le sujet¶
on vous demande d’écrire un programme guess.py
v0: lorsqu’on le lance avec
python guess.pyle programme commence par tirer au sort un nombre entre 0 et 100;
puis il vous propose de deviner ce nombre; pour cela il vous demande quel nombre vous choississez, et vous indique si vous avez trouvé, ou si vous choisi trop grand, ou trop petit;
le programme continue jusqu’à ce que vous trouviez le bon nombrev1: on veut pouvoir fixer cette borne max sur la ligne de commande, en faisant
python --max 1000 guess.py
bien sûr vous pouvez sophistiquer comme vous le sentez; par exemple ajouter un compteur pour dire combien d’essais il a fallu pour trouver, etc...
comment tirer au sort¶
pour cela on utilise le module random
allez sur la page de la documentation officielle et cherchez la bonne fonction
pour faire ça
le plus simple pour trouver cette page est de
partir de google
et de chercher
python module randomchoisissez bien la page de
docs.python.org(elle existe en français si vous préferez à l’anglais)
la réponse
import random
aleatoire = random.randint(0, 100)comment poser une question à l’utilisateur¶
plutôt que de récrire le même code que dans countdown.py (on a vu que c’était
non trivial si on veut le faire proprement) on va réutiliser la fonction
saisie_entier() qu’on avait fait à ce moment-là:
# pour pouvoir réutiliser la fonction saisie_entier
# qui se trouve dans le fichier countdown
from countdown import saisie_entier
borne = saisie_entier("borne max: ")
print(f"le nombre à deviner est entre 0 et {borne}")comment utiliser la ligne de commandes¶
ça se fait avec un module spécialisé qui s’appelle argparse
vous pouvez chercher de votre coté pour trouver des exemples d’utilisation, ou
simplement aller voir la solution ci-dessous
(et oui, c’est un peu du charabia, mais c’est tellement utile qu’on s’habitue
assez vite si on en a besoin 🙂)
solutions¶
une version v0¶
le nombre est entre 0 et 100, on ne peut pas changer la borne
pour voir la v0
"""
un programme qui
- tire au sort un nombre entre 0 et 100
- demande de deviner le nombre n
- indique si la réponse est
supérieure, inférieure, ou égale à n
- s'arrête lorsqu'on a trouvé
"""
import random
# de mon coté au lieu d'avoir un seul fichier guess.py
# j'ai plusieurs versions countdown_v0.py etc...
# du coup au lieu de faire simplement comme vous
# from countdown import saisie_entier
# je dois faire à la place:
from countdown_v1 import saisie_entier
borne_max = 100
print(f"entre 0 et {borne_max}")
toguess = random.randint(0, borne_max)
while True:
yourguess = saisie_entier("votre choix ")
if yourguess > toguess:
print("trop grand")
elif yourguess < toguess:
print("trop petit")
else:
print("Yes !!!")
break
v1: on peut changer la borne sur la ligne de commande¶
la v1
"""
par rapport à la v1, on peut changer la borne sur la ligne de commande
"""
import random
from argparse import ArgumentParser
from notebooks.exos.beginners.countdown_v0 import saisie_entier
# pour utiliser argparse, cette ligne est toujours la même
parser = ArgumentParser()
# ici on définit ce qu'on peut ajouter ou pas sur la ligne de commande
parser.add_argument("-m", "--max", default=100, help="la borne maximum", type=int)
# de nouveaux ces deux lignes sont toujours les mêmes
args = parser.parse_args()
# et à ce stade dans la variable args on a les informations
borne_max = args.max
print(f"entre 0 et {borne_max}")
toguess = random.randint(0, borne_max)
while True:
yourguess = saisie_entier("votre choix ")
if yourguess > toguess:
print("trop grand")
elif yourguess < toguess:
print("trop petit")
else:
print("Yes !!!")
break