Python 8.3 : Refactoriser du code
Dans cette vidéo, nous poursuivons notre projet de questionnaire Python et nous abordons une notion essentielle : la refactorisation du code. L'objectif est de transformer plusieurs fonctions question1, question2... en une seule fonction générique poser_question() qui prend tous les paramètres nécessaires. Cela évite la duplication et rend le code beaucoup plus facile à maintenir.
Paramètres de la fonction
- question : l'énoncé à poser.
- reponse1, reponse2, reponse3, reponse4 : les choix proposés.
- choix_reponse : la bonne réponse (a, b, c ou d).
Au lieu d'écrire une fonction par question, nous écrivons une seule fonction qui reçoit en arguments l'énoncé, les quatre propositions et la lettre de la bonne réponse. Pour chaque nouvelle question, il suffit alors d'appeler poser_question() avec les bons paramètres. Le code devient compact et évolutif : passer de 3 à 100 questions ne demande plus de dupliquer des dizaines de blocs identiques.
def poser_question(question, r1, r2, r3, r4, choix_reponse):
print("\n" + question)
print("a " + r1)
print("b " + r2)
print("c " + r3)
print("d " + r4)
reponse = input("Votre réponse : ")
if reponse == choix_reponse:
print("Bonne réponse")
else:
print("Mauvaise réponse")
poser_question("Quelle est la capitale de la France ?", "Lyon", "Marseille", "Paris", "Lille", "c")
poser_question("Quelle est la capitale de l'Italie ?", "Rome", "Venise", "Florence", "Pise", "a")
Nous améliorons aussi l'affichage en ajoutant un saut de ligne avant chaque question et en concaténant les lettres a/b/c/d avec leur proposition. Attention à bien faire correspondre la bonne réponse à la lettre attendue (a, b, c ou d) pour éviter les erreurs. La refactorisation rend ainsi le code plus esthétique, plus court et plus simple à étendre. À la prochaine vidéo, nous y ajouterons la gestion du score.
En résumé
Cette leçon enseigne les principes de la refactorisation en Python à travers un exemple pratique de quiz. Au lieu de dupliquer du code pour chaque question, on crée une fonction réutilisable poser_question() avec paramètres (énoncé, réponses, bonne réponse). L'instructeur montre comment passer de trois fonctions identiques copiées-collées à un seul appel de fonction générique.
Points clés
- La refactorisation consiste à factoriser le code répétitif en une seule fonction paramétrée au lieu de copier-coller
- Définir une fonction poser_question() acceptant : la question, les 4 réponses, et l'index de la bonne réponse
- Appeler une unique fonction avec différents paramètres pour chaque question plutôt que créer question_1(), question_2(), question_3()
- Afficher les réponses numérotées (A, B, C, D) et vérifier le choix utilisateur contre la bonne réponse
- La refactorisation réduit drastiquement le temps d'implémentation et améliore la maintenabilité
Questions fréquentes
Pourquoi refactoriser au lieu de copier-coller du code ?
Copier-coller le code pour chaque question (10, 100, 1000 questions) devient rapidement ingérable et inefficace. Une seule fonction réutilisable avec paramètres permet d'ajouter autant de questions qu'on veut sans dupliquer le code.
Comment construire la fonction poser_question() ?
La fonction prend en paramètres : l'énoncé de la question, une liste de réponses (4 options), et l'index de la bonne réponse. Elle affiche la question avec les options (A, B, C, D), récupère le choix utilisateur et affiche si la réponse est correcte.
Quel est l'intérêt pratique montré dans l'exemple du quiz ?
Au lieu d'écrire question_1(), question_2(), question_3() avec du code identique, on écrit une seule fonction poser_question(). Ensuite, on l'appelle pour chaque question en passant les paramètres spécifiques (question de la France, question de l'Italie, etc.).