le sujet¶
on vous demande d’écrire un programme countdown.py
lorsqu’on le lance avec
python countdown.pyil commence par vous demander de taper le nombre de secondes que vous voulez attendre, et les décompte, et s’arrête une fois arrivé à 0
comment poser une question à l’utilisateur¶
pour faire ça on utilise la fonction builtin input()
ça se présente comme ceci
reponse = input("vous avez quel âge ? ")
### ici dans la variable `reponse` on a **une chaine**
print(f"vous avez répondu {reponse}")comment attendre¶
pour attendre un certain temps, on utilise en Python la fonction sleep dans le
module time
ça se présente comme ceci
import time
# pour attendre une demie-seconde
time.sleep(0.5)solutions¶
une version v0 un peu naïve¶
ça fonctionne, mais on ne contrôle pas l’entrée de l’utilisateur: si on entre autre chose qu’un entier positif ça se passe mal
pour voir la v0
"""
un programme qui:
demande à l'utilisateur un nombre
puis affiche le nombre, attend une seconde, affiche le nombre -1, ...
jusqu'à zéro O et le programme s'arrête
"""
import time
def countdown(n):
# en Python on écrirait ceci
while n:
# qui en fait veut dire ceci
# while n != 0:
print(n)
time.sleep(1)
n -= 1
print(0)
if __name__ == '__main__':
timeout = int(input("entrez le nombre de secondes: "))
countdown(timeout)
v1: un peu mieux¶
cette fois on continue de poser la question jusqu’à ce qu’on reçoive un entier
la v1
"""
on améliore la saisie, pour les cas où
- on se trompe
- on en a assez et on veut quitter le programme
"""
import time
def countdown(n):
while n:
print(n)
time.sleep(1)
n -= 1
print(0)
def saisie_entier(message):
while True:
try:
return int(input(message))
# si on entre une valeur qui ne peut pas être traduite en entier
except ValueError:
print("je n'ai pas compris...")
# si l'utilisateur en a assez, il tape Control-C
except KeyboardInterrupt:
print("bye")
exit(1)
if __name__ == '__main__':
countdown(saisie_entier("entrez le nombre de secondes: "))
quelques remarques¶
dans un premier temps on avait écrit la fonction
saisie_entier()et le texte de la question était cablé à l’intérieur;
mais dans un exercice suivant, on a voulu réutiliser cette fonction, d’où le paramètreil reste un défaut ici; pouvez-vous voir lequel ?
réponseque se passe-t-il si on entre un entier négatif ?