Exercice 3 : Création d'un système de magie
Écrivez une fonction qui gère les sorts magiques :
def lancer_sort(nom_sort, mana_joueur, pv_cible): """ Lance un sort magique. Retourne un tuple (nouveau_mana, nouveaux_pv_cible, message) """ if nom_sort == "boule_de_feu": if mana_joueur >= 20: # À compléter : coûte 20 mana, inflige 40 dégâts pass else: return (mana_joueur, pv_cible, "Pas assez de mana !") elif nom_sort == "soin": if mana_joueur >= 15: # À compléter : coûte 15 mana, soigne 30 PV pass else: return (mana_joueur, pv_cible, "Pas assez de mana !") else: return (mana_joueur, pv_cible, "Sort inconnu !") # Test de la fonction resultat = lancer_sort("boule_de_feu", 25, 100) print(resultat)
a) Complétez la fonction pour les sorts "boule_de_feu" et "soin"
b) Quelle est l'utilité des docstrings (triples guillemets) ? .............................
c) Testez la fonction avec différents paramètres
Correction Exercice 3 :
a) Fonction complétée :
def lancer_sort(nom_sort, mana_joueur, pv_cible): """ Lance un sort magique. Retourne un tuple (nouveau_mana, nouveaux_pv_cible, message) """ if nom_sort == "boule_de_feu": if mana_joueur >= 20: nouveau_mana = mana_joueur - 20 nouveaux_pv = pv_cible - 40 if nouveaux_pv < 0: nouveaux_pv = 0 return (nouveau_mana, nouveaux_pv, "Boule de feu lancée ! 40 dégâts infligés.") else: return (mana_joueur, pv_cible, "Pas assez de mana !") elif nom_sort == "soin": if mana_joueur >= 15: nouveau_mana = mana_joueur - 15 nouveaux_pv = pv_cible + 30 if nouveaux_pv > 100: # PV maximum de 100 nouveaux_pv = 100 return (nouveau_mana, nouveaux_pv, "Sort de soin lancé ! +30 PV.") else: return (mana_joueur, pv_cible, "Pas assez de mana !") else: return (mana_joueur, pv_cible, "Sort inconnu !") # Tests de la fonction print("=== TESTS DES SORTS ===") # Test 1 : Boule de feu réussie resultat = lancer_sort("boule_de_feu", 25, 100) print(f"Test 1 - Boule de feu: {resultat}") # Test 2 : Boule de feu échouée (pas assez de mana) resultat = lancer_sort("boule_de_feu", 10, 100) print(f"Test 2 - Boule de feu (échec): {resultat}") # Test 3 : Soin réussi resultat = lancer_sort("soin", 20, 50) print(f"Test 3 - Soin: {resultat}") # Test 4 : Sort inconnu resultat = lancer_sort("éclair", 30, 100) print(f"Test 4 - Sort inconnu: {resultat}")
b) Les docstrings servent à :
- Documenter ce que fait la fonction
- Expliquer les paramètres attendus
- Décrire la valeur de retour
- Être accessible via
help(lancer_sort)
c) Tests supplémentaires :
# Test avec PV négatifs potentiels print("\n=== TESTS AVANCÉS ===") resultat = lancer_sort("boule_de_feu", 50, 30) print(f"Monstre avec peu de PV: {resultat}") # Résultat : (30, 0, "Boule de feu lancée ! 40 dégâts infligés.") # Test de soin avec PV déjà élevés resultat = lancer_sort("soin", 20, 90) print(f"Soin avec PV élevés: {resultat}") # Résultat : (5, 100, "Sort de soin lancé ! +30 PV.")