TP n°3 - Les fonctions
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.
"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.
Vous disposez ci-dessous d'un code Python pour ce jeu qui n'est pas totalement terminé : Le corps du programme est déjà écrit et doit rester tel quel, et votre objectif est d'écrire les fonctions appelées dans le corps du programme et de le faire fonctionner.
- Lisez les règles du jeu si ce n'est pas déjà fait.
- Étudiez le logigramme et repérez les 4 fonctions à coder.
- Copiez le code dans Thonny.
- Pour chaque fonction, écrivez la 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.
À 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.
Vous l'avez remarqué dans le TP précédent, la phase compliquée d'un projet (informatique ou non) est de conceptualiser, de découper le projet en phases concrètes, simples, réalisables et qui structurent votre pensée.
Dans tous les travaux d'ampleurs, comme un TM, un code informatique, un dissertation, il est bon d'établir avant tout un plan qui va nous guider non seulement dans l'élaboration du projet mais qui va structurer notre penseé.
En informatique, on aime bien les schéma ou logigramme, comme nous les avons vu en 1ère année. Cela permet de visualiser facilement le cheminement du programme mais aussi de découper en phases notre résultat final.
Dans cette mise en pratique, vous allez expérimenter cette manière de travailler. Ici, le travail est déjà fait en amont, c'est-à-dire que le logigramme, la logique de fonctionnement a déjà été posée pour vous. Le logigramme ci-dessous pose le fonctionnement général du programme que vous devez écrire. Bien sûr, vous êtes libre d'ajouter des étapes selon votre propre conceptions.
Vous allez concevoir le logiciel d'un bancomat qui permet aux clients de:
- Vérifier le solde du compte
- Déposer de l'argent
- Retirer de l'argent
- Quitter le programme
On part du principe que le client n'a pas de code PIN a entrer.
Voici la donnée du problème puis son logigramme minimal.
- Le client possède au départ la somme de 1000 francs.
- Il entre sa carte dans le bancomat ce qui démarre le programme.
- Le programme lui affiche le menu (voir ci-dessus).
- Tant qu'il ne quitte pas le programme, il peut choisir une des actions sur son compte (afficher le solde, déposer de l'argent, retirer de l'argent)
- Lorsqu'il dépose de l'argent, on lui montre le solde de son compte après le dépôt.
- Lorsqu'il retire de l'argent, on vérifie que le montant est disponible.