diff --git a/src/cours/CIEL1/01-bases-python/tp/roulette_debut.py b/src/cours/CIEL1/01-bases-python/dm/roulette_debut.py similarity index 100% rename from src/cours/CIEL1/01-bases-python/tp/roulette_debut.py rename to src/cours/CIEL1/01-bases-python/dm/roulette_debut.py diff --git a/src/cours/CIEL1/01-bases-python/tp/roulette_final.py b/src/cours/CIEL1/01-bases-python/dm/roulette_final.py similarity index 100% rename from src/cours/CIEL1/01-bases-python/tp/roulette_final.py rename to src/cours/CIEL1/01-bases-python/dm/roulette_final.py diff --git a/src/cours/CIEL1/01-bases-python/dm/tp1bis_mise_en_pratique.md b/src/cours/CIEL1/01-bases-python/dm/tp1bis_mise_en_pratique.md new file mode 100644 index 0000000..4fce468 --- /dev/null +++ b/src/cours/CIEL1/01-bases-python/dm/tp1bis_mise_en_pratique.md @@ -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.