Laboratoire débogage et gestion des erreurs -solution
But
Correction d'erreurs de syntaxe, d'exécution et de logique.
Utiliser le débogueur et les techniques de débogage.
Continuer à pratiquer le pseudo-code (algo).
Énoncé
Vous devez trouver les erreurs dans le code Python de l’enseignant, les réparer et documenter vos découvertes.
Pour chacun des exercices suivants, vous devez :
Réfléchir à la logique du programme et écrire un pseudo-code qui décrit les résultats attendus en vous basant sur ce que le programme est supposé faire (et non sur le programme plein d'erreurs).
Corriger les erreurs de syntaxe.
Créer un plan de tests et tester votre programme.
Corriger le reste des erreurs d'exécution et de logique à l'aide du débogueur.
Lire les messages d'erreur et corriger les erreurs évidentes sans débogueur.
Utiliser le débogueur, notamment pour les erreurs de logique ou pour les erreurs d'exécution les moins évidentes. Voir dans les notes de cours la technique de base et les astuces de débogage.
Exercice 1 : Retrait d'argent au guichet automatique
Il s'agit d'un programme permettant de retirer de l'argent du guichet automatique. Votre compte débute avec 1000$ et vous demande d'effectuer 2 retraits.
Si un retrait est négatif, il ne doit pas avoir lieu.
Si un retrait est plus grand que le solde du compte, il doit retirer le solde restant seulement.
Le code suivant contient plusieurs erreurs de logique et d'exécution. Vous devez :
Créer un plan de tests (selon le tableau dans l'énoncé).
Identifier les erreurs.
Corriger les erreurs et gérer les exceptions.
def retrait(solde:str = 0, retrait: float = 0) -> bool:
if retrait > solde:
retrait = solde
print(f"* Solde insuffisant, retrait effectué: {retrait} $")
else:
solde = solde - retrait
print(f"* Retrait effectué: {retrait}")
return solde
if __name__ == "__main__":
MONTANT_INITIAL = 1000
solde = MONTANT_INITIAL
print("*************************")
print("*** GUICHET ***")
print("*************************")
print(f"Solde initial: {solde} $")
print("*************************")
retrait_1 = float(input("Retrait 1: Combien voulez-vous retirer? "))
solde = retrait(solde, retrait_1)
retrait_2 = float(input("Retrait 2: Combien voulez-vous retirer? "))
solde = retrait()
print("*********************")
print(f"Solde initial: {MONTANT_INITIAL} $")
print(f"Retrait 1: {retrait_1} $")
print(f"Retrait 2: {retrait_2} $")
print(f"Solde final: {solde} $")
print(f"*********************")
Exercice 2 : Roche-Papier-Ciseau
(Inspiré d'un exercice du laboratoire de Rémy Corriveau)
Le code doit afficher un menu et demander aux deux joueurs de choisir leurs armes. Ensuite, le gagnant est affiché ainsi que l’arme victorieuse.
Dans le code suivant, vous trouverez (au moins) :
3 erreurs de syntaxe.
3 erreurs d'exécution.
Au moins 4 lignes ayant des erreurs de logique.
Notez que vous aurez besoin d'utiliser la fonction
str.lower()
qui transforme la chaîne de caractères toute en minuscule.Une amélioration possible (optionnel).
def roche_papier_ciseau(choix_joueur1:str, choix_joueur2:str) -> None:
"""
Cette fonction compare les choix du jeu Roche-Papier-Ciseaux entre deux
joueurs et affiche le gagnant.
:param choix_joueur1: Le choix du joueur 1 ("roche", "papier" ou "ciseau")
:param choix_joueur2: Le choix du joueur 2 ("roche", "papier" ou "ciseau")
:return: Aucun
"""
armes = ["roche", "papier", "ciseau"]
if choix_joueur1 in armes or choix_joueur2 not in armes:
print("Vous n'avez pas entré roche, papier ou ciseau. :(")
else:
if choix_joueur1 = choix_joueur2:
print("Partie nulle!")
elif (choix_joueur1 == 'roche' and choix_joueur2 == 'ciseau') or (choix_joueur2 == 'ciseau' and choix_joueur1 == 'papier' or choix_joueur1 == 'papier' or choix_joueur2 == 'roche'):
joueur_gagnant = "joueur2"
arme_gagnante = choix_joueur1
elif choix_joueur1 == 'roche' and choix_joueur2 == 'papier' or choix_joueur1 == 'ciseau' and choix_joueur1 == 'roche' or choix_joueur2 == 'papier' and choix_joueur1 == 'ciseau':
joueur_gagnant = "joueur2"
arme_gagnante = choix_joueur2
print(f"\nLe gagnant est {joueur_gagnant} avec {arme_gagnante}, félicitation.")
if __name__ == "__main__":
print("""
Bienvenu au jeu Roche-Papier-Ciseau.
Veuillez faire un choix parmi les suivants :
roche
papier
ciseau
"")
choix1 = input("Choix du joueur 1 : ")
choix2 = input("Choix du joueur 2 : ")
roche_papier_ciseau()
Plan de tests (avec 3 exemples)
roche
ciseau
joueur 1 gagne avec roche.
joueur 2 gagne avec roche
roche
papier
joueur 2 gagne avec papier.
joueur 2 gagne avec papier.
Roche
Papier
joueur 2 gagne avec Papier
Vous n'avez pas entré roche, papier ou ciseau. :(
...
Last updated