Python 8.4 : Gérer un score
Dans cette vidéo, nous poursuivons notre projet de questionnaire Python en ajoutant la gestion d'un score. C'est aussi l'occasion de parler des variables globales, un concept important quand on modifie une variable depuis l'intérieur d'une fonction. Plusieurs approches sont possibles et nous allons en explorer deux pour bien comprendre les subtilités.
Approches étudiées
- Retourner True ou False depuis la fonction et incrémenter le score à l'extérieur.
- Utiliser une variable reponse_correcte locale puis un if pour mettre à jour le score.
- Déclarer global score dans la fonction pour modifier directement la variable globale.
La première approche consiste à retourner directement True ou False, mais elle empêche l'exécution des prints en fin de fonction et n'est pas idéale. On préfère initialiser une variable reponse_correcte à False, la passer à True si la réponse est juste, puis utiliser un if pour incrémenter le score. Pour que la fonction puisse modifier la variable score définie à l'extérieur, il faut utiliser le mot-clé global.
score = 0
def poser_question(question, r1, r2, r3, r4, choix_reponse):
global score
reponse_correcte = False
# ... afficher la question, lire la réponse ...
if reponse == choix_reponse:
reponse_correcte = True
print("Bonne réponse")
else:
print("Mauvaise réponse")
if reponse_correcte:
score += 1
poser_question(...)
print("Score final :", score)
Il est important de noter qu'une fonction peut lire la valeur d'une variable globale sans le mot-clé global, mais elle ne peut pas la réaffecter sans lui. C'est pourquoi global score est obligatoire ici puisque nous faisons score += 1. À très bientôt pour une nouvelle vidéo sur la portée (scope) des fonctions et des variables.
En résumé
Cette leçon explique comment implémenter la gestion d'un score dans un projet de questionnaires en Python. Le cours couvre l'initialisation de la variable score, la vérification des réponses correctes et leur incrémentation. Il explore également les nuances de Python concernant les variables locales et globales, en montrant quand utiliser le mot-clé `global` pour accéder ou modifier une variable depuis une fonction.
Points clés
- Initialiser une variable `score` à zéro au niveau du programme principal avant de l'utiliser
- Utiliser une variable booléenne pour stocker si une réponse est correcte avant de la traiter
- Incrémenter le score avec `score += 1` quand la réponse est correcte
- En Python, une fonction peut **lire** une variable globale sans la déclarer `global`, mais elle doit utiliser le mot-clé `global` pour la **modifier**
- Préférer déclarer des variables locales dans la fonction plutôt que d'utiliser `global` pour éviter les ambiguïtés de portée
- Python est strict avec la portée des variables : l'oubli du mot-clé `global` provoque une erreur si on tente de réaffecter une variable du scope parent
Questions fréquentes
Pourquoi Python exige le mot-clé `global` pour modifier une variable ?
Python distingue clairement les variables locales des variables globales. Si vous tentez de réaffecter une variable sans déclarer `global`, Python la traite comme une variable locale. Le mot-clé `global` signale explicitement que vous souhaitez modifier la variable du scope parent, ce qui rend le code plus lisible et évite les bugs.
Peut-on lire une variable globale depuis une fonction sans déclarer `global` ?
Oui, une fonction peut lire une variable globale sans le mot-clé `global`. Le mot-clé `global` est nécessaire uniquement quand vous voulez **modifier** la valeur de cette variable.
Quelle est la meilleure approche : déclarer le score en global ou en local dans la fonction ?
Il est préférable de déclarer le score comme variable locale **à l'intérieur de la fonction** plutôt que de l'utiliser en global. Cela rend le code plus modulaire et évite les ambiguïtés. On ne recourt au mot-clé `global` que quand c'est absolument nécessaire.