TP n°3 - Les fonctions - "7 qui perd"
2ème année maturité
Objectifs
- Décomposer un programme qui fonctionne déjà en plusieurs fonctions cohérentes.
- Faire le lien entre un logigramme et le découpage d'un programme en fonctions.
- Réutiliser la syntaxe
def, les paramètres etreturnvus en cours.
Le jeu "7 qui perd" ci-dessous fonctionne déjà, mais tout son code est actuellement écrit "à plat" : il n'utilise aucune fonction. Votre travail n'est pas d'inventer un nouveau jeu, mais de reconstruire les fonctions dont ce programme a besoin.
Le corps du programme reste tel quel (la partie qui n'est pas dans une fonction) : la boucle du jeu, les appels aux fonctions, l'affichage. Ce sont ces appels qui vous indiquent le nom de chaque fonction et ce qu'elle doit recevoir en paramètre.
en section 3, le logigramme découpe le déroulement du jeu en blocs d'action. Les blocs en bleu sont exactement les 4 fonctions que vous devez écrire. Le reste du logigramme correspond au code déjà présent dans le corps du programme.
Marche à suivre conseillée :
- Lisez les règles du jeu (section 2) si ce n'est pas déjà clair.
- Étudiez le logigramme (section 3) et repérez les 4 blocs bleus.
- Copiez le code de la section 4 dans Thonny.
- Pour chaque bloc bleu, écrivez la fonction correspondante juste après
from random import *, en vous basant sur la façon dont elle est appelée plus bas dans le programme (nom, paramètres, ce qu'elle doit renvoyer avecreturn). - Testez au fur et à mesure : le programme ne pourra tourner que lorsque les 4 fonctions existent.
"7 qui perd" se joue à 2 joueurs, en alternance.
- Chaque joueur a un score total, qui commence à 0. Le premier joueur à atteindre 50 points gagne la partie.
- À son tour, un joueur peut choisir de lancer deux dés, autant de fois qu'il le souhaite.
- À chaque lancer, on additionne les deux dés :
- si le total fait 7, le joueur perd tout ce qu'il avait accumulé durant ce tour (mais pas son score déjà validé), et c'est au tour de l'autre joueur ;
- sinon, le total s'ajoute à un score "du tour" encore risqué : le joueur peut soit relancer les dés, soit s'arrêter.
- S'il s'arrête, son score du tour est ajouté définitivement à son score total, puis c'est au tour de l'autre joueur.
Bon à savoir : il faut bien distinguer deux scores différents — le score total déjà « en banque » (définitif) et le score du tour en cours (encore risqué, effacé si le total des dés fait 7).
Voici le déroulement complet d'une partie, sous forme de logigramme. Les 4 blocs bordés de bleu sont les actions qui doivent devenir des fonctions dans votre code.
Astuce : sur un petit écran, faites défiler le schéma horizontalement, ou ouvrez cette page sur un ordinateur pour le voir en entier.
À l'aide du bouton "Copier", reproduisez ce code dans Thonny, puis écrivez les 4 fonctions manquantes juste après l'import, à la place du commentaire TODO.
from random import *
# TODO : à vous de créer ces 4 fonctions, en vous aidant du logigramme (section 3)
# - lancerDes()
# - calulScore(de1, de2)
# - changerJoueur(tour)
# - afficherGagnant(scores)
joueur = randint(1, 2)
scores = [0, 0]
scoreInter = 0
while scores[0]<50 and scores[1]<50:
if input(f'Joueur {joueur} : lance les dés (o/n) ? ') == 'o':
d1, d2 = lancerDes()
scoreDes = calulScore(d1, d2)
scoreInter = scoreInter + scoreDes
if scoreDes == 0:
print(f'Tu fais [{d1}, {d2}], tu passes ton tour.')
print(f'Ton total est de {scores[joueur-1]}')
print('-'*20)
joueur = changerJoueur(joueur)
scoreInter = 0
else :
print(f'Tu fais [{d1}, {d2}] soit {scoreDes}, ton total serait de {scores[joueur-1] + scoreInter}')
else:
scores[joueur-1] = scores[joueur-1] + scoreInter
print(f'Ton total est de {scores[joueur-1]}')
joueur = changerJoueur(joueur)
print('-'*20)
scoreInter = 0
afficherGagnant(scores)
Conseils :
- Regardez comment une fonction est appelée pour savoir combien de paramètres elle prend : par exemple
calulScore(d1, d2)prend deux valeurs. - Regardez ce que le programme fait du résultat pour savoir quoi
return: par exempled1, d2 = lancerDes()veut dire que la fonction doit renvoyer deux valeurs. - Testez votre programme régulièrement, même s'il manque encore des fonctions : Python vous dira clairement laquelle il ne trouve pas.
La syntaxe des fonctions (def, paramètres, return, portée des variables) a été vue en cours. Si besoin, retournez consulter :