Déplace le TP sour le jeu de roulette dans DM
This commit is contained in:
parent
51d6511426
commit
dbc42bcf59
3 changed files with 109 additions and 0 deletions
109
src/cours/CIEL1/01-bases-python/dm/tp1bis_mise_en_pratique.md
Normal file
109
src/cours/CIEL1/01-bases-python/dm/tp1bis_mise_en_pratique.md
Normal file
|
|
@ -0,0 +1,109 @@
|
||||||
|
# Python - Mise en pratique
|
||||||
|
|
||||||
|
Nous allons mettre en pratique ce que nous avons vu jusqu'à maintenant dans un programme un peu plus conséquent.
|
||||||
|
|
||||||
|
L'objectif est de créer un mini jeu dans lequel vous pourrez jouer à la roulette. Les règles seront évidemment simplifiées.
|
||||||
|
|
||||||
|
- Le joueur mise sur un nombre (entier) entre 0 et 49, et annonce une mise en jetons (par exemple : 20 jetons).
|
||||||
|
- La croupière lance la roulette, et celle-ci déterminera le numéro gagnant. Les numéros impairs ont une couleur rouge, les numéros pairs sont noirs.
|
||||||
|
- Si le joueur a misé sur le numéro gagnant, il remporte 3 fois sa mise
|
||||||
|
- Si le joueur a misé sur un nombre de même couleur (donc de même parité que le numéro gagnant), il remporte 0,5 fois sa mise (arrondi à l'entier supérieur, car les jetons sont toujours entiers)
|
||||||
|
- Sinon, le joueur perd sa mise. Notons qu'il la garde dans les deux autres cas, en plus de ses gains.
|
||||||
|
- Le joueur aura 100 jetons disponibles au début de la partie. Il ne peut miser qu'un nombre entier de jeton, et seulement des jetons qu'il possède.
|
||||||
|
- Si le joueur tombe à zéro jetons, la partie est finie.
|
||||||
|
- Sinon, il peut rejouer (mais n'est pas obligé).
|
||||||
|
|
||||||
|
Imprégnez-vous bien des règles du jeu.
|
||||||
|
|
||||||
|
1. Créez un nouveau fichier appelé `roulette.py`.
|
||||||
|
2. Copiez le contenu suivant dedans. Ce sera la structure du script, que vous complèterez à l'aide des questions suivantes.
|
||||||
|
|
||||||
|
Il y a de nombreux `#TODO` (parfois `"#TODO"`) qu'il faudra remplacer par le code adéquat.
|
||||||
|
|
||||||
|
L'instruction `pass` sert à ne rien faire tout en ayant un script valide qui pourra donc s'exécuter sans erreur pour que vous puissiez avancer et tester votre code. Vérifiez que le code ci-dessous fonctionne sans erreur (il ne fera évidemment pas ce qui est demandé, ça c'est votre job !)
|
||||||
|
|
||||||
|
~~~python
|
||||||
|
from random import randint
|
||||||
|
#TODO
|
||||||
|
|
||||||
|
def miser(jetons_restants):
|
||||||
|
#TODO
|
||||||
|
return 7, 12
|
||||||
|
|
||||||
|
def choisir_nombre():
|
||||||
|
nombre = -1
|
||||||
|
while "#TODO condition" :
|
||||||
|
nombre = "#TODO demander un nombre à l'utilisatrice"
|
||||||
|
if "#TODO condition":
|
||||||
|
print("Erreur : le nombre doit être compris entre 0 et 49")
|
||||||
|
return nombre
|
||||||
|
|
||||||
|
#TODO fonction miser_jetons
|
||||||
|
|
||||||
|
def tourner_la_roulette():
|
||||||
|
numero = 8 #TODO
|
||||||
|
print(f"Le croupier tourne la roulette. Le numéro {numero} est le numéro gagnant !")
|
||||||
|
return numero
|
||||||
|
|
||||||
|
def calculer_gains_couleur(mise):
|
||||||
|
pass #TODO
|
||||||
|
|
||||||
|
def calculer_gains_numero(mise):
|
||||||
|
pass #TODO
|
||||||
|
|
||||||
|
def continuer_de_jouer(jetons_restants):
|
||||||
|
return #TODO Effacer cette ligne quand ce sera demandé
|
||||||
|
if "#TODO condition":
|
||||||
|
print("Vous êtes ruiné.e. C'est la fin de la partie.")
|
||||||
|
#TODO Retourner une valeur
|
||||||
|
else:
|
||||||
|
#TODO Afficher les jetons restants (avec une phrase)
|
||||||
|
rejouer = input("Souhaitez-vous continuer ? (o/n)")
|
||||||
|
if rejouer == "o" or rejouer == "O":
|
||||||
|
pass #TODO Retourner une valeur
|
||||||
|
else:
|
||||||
|
#TODO Annoncer qu'on quitte le jeu avec le nombre de jetons restants
|
||||||
|
pass #TODO Retourner une valeur
|
||||||
|
|
||||||
|
jetons = 100
|
||||||
|
continuer = True
|
||||||
|
|
||||||
|
while continuer:
|
||||||
|
gains = 0
|
||||||
|
numero_misé, mise = miser(jetons)
|
||||||
|
|
||||||
|
numero_gagnant = tourner_la_roulette()
|
||||||
|
#TODO Écrire ici la condition principale, pour déterminer les gains
|
||||||
|
|
||||||
|
jetons += gains
|
||||||
|
continuer = continuer_de_jouer(jetons)
|
||||||
|
~~~
|
||||||
|
|
||||||
|
3. Expliquez les étapes du programme qui se déroulent dans la boucle à la fin du script, et quand est-ce qu'elle s'arrête.
|
||||||
|
1. Complétez les fonctions suivantes à l'aide des règles du jeu :
|
||||||
|
1. `calculer_gains_numero`
|
||||||
|
1. `calculer_gains_couleur`. Comme nous voulons arrondir à l'entier supérieur, il faudra importer et utiliser la fonction `ceil` du module `math`.
|
||||||
|
|
||||||
|
Pour vérifier vos résultats, vous pouvez soit utiliser l'interpréteur en console, soit appeler les fonctions dans votre script et utiliser `print` pour afficher le résultat
|
||||||
|
|
||||||
|
2. Allez à la ligne `#TODO Écrire ici la condition principale, pour déterminer les gains`. Cette condition est celle qui permet de savoir si un joueur a gagné ou non.
|
||||||
|
1. Écrivez la condition en utilisant les fonctions `calculer_gains_couleur` et `calculer_gains_numero`. N'oubliez pas le cas où le joueur perd.
|
||||||
|
2. Ajoutez des `print` dans chaque branche pour annoncer les gains ou pertes.
|
||||||
|
3. Testez les différents cas possibles en modifiant les valeurs retournées par la fonction `tourner_la_roulette`
|
||||||
|
1. Maintenant que nous sommes sûrs que nos trois cas fonctionnent, nous allons pouvoir réellement tirer un nombre au hasard. Pour cela, nous avons déjà importé la fonction `randint` du module `random` dont voici la [documentation](https://docs.python.org/3.13/library/random.html#random.randint) :
|
||||||
|
> random.**randint**(a, b)
|
||||||
|
>
|
||||||
|
> Return a random integer N such that a <= N <= b. Alias for randrange(a, b+1).
|
||||||
|
|
||||||
|
1. Expliquez brièvement ce que fait `randint`
|
||||||
|
2. Modifiez la fonction `tourner_la_roulette` de façon à ce qu'elle retourne un nombre entre 0 et 49 tiré aléatoirement.
|
||||||
|
|
||||||
|
1. Le coeur du jeu semble maintenant fonctionner. Il ne reste plus qu'à permettre à la joueuse d'interagir avec le programme. Commençons par la mise.
|
||||||
|
1. Complétez la fonction `choisir_nombre` de façon à ce que l'on demande à la joueuse un nombre tant que celui-ci n'est pas valide. Pour simplifier, considérons que personne ne s'amusera à entrer autre chose que des nombres (nous verrons plus tard dans l'année un moyen bien plus efficace de gérer les erreurs).
|
||||||
|
2. Complétez la fonction `miser` pour qu'elle utilise notre fonction nouvellement complétée. Vérifiez que tout fonctionne comme prévu.
|
||||||
|
3. Sur le même modèle que `choisir_nombre`, écrivez une fonction `miser_jetons` qui permettra à la joueuse de choisir un nombre de jetons à miser. Attention : il faudra vérifier qu'elle ne mise pas plus de jetons que ce qu'elle a. Vous aurez donc besoin d'un paramètre pour passer le nombre de jetons restants à votre fonction.
|
||||||
|
4. Complétez la fonction `miser` pour qu'elle utilise notre nouvelle fonction. Vérifiez que tout fonctionne comme prévu.
|
||||||
|
|
||||||
|
1. Maintenant, il ne reste plus qu'à demander au joueur s'il souhaite continuer de jouer, et mettre fin à la partie s'il n'a plus de jetons. Dans la fonction `continuer_de_jouer`, retirez la première ligne, celle qui contient un `return`. Complétez le reste de la fonction en remplaçant les lignes contenant la mention `#TODO`. Testez votre programme de bout en bout.
|
||||||
|
|
||||||
|
1. Mettez le programme final dans votre compte rendu.
|
||||||
Loading…
Add table
Add a link
Reference in a new issue