Révisions : variables et compréhension
Révisions : variables et compréhension
Objectifs cantonaux : O1.6.
Séance de révision consacrée aux notions de variable, variable locale et variable globale — pas de nouvelle théorie aujourd’hui, uniquement des questions et des « devinettes » pour vérifier que ces notions sont bien comprises avant l’examen de variables/binaire.
Question 1
Expliquez avec vos propres mots ce qu’est une variable.
▷ Rappel
Une variable est un nom désignant un emplacement mémoire contenant toujours une et une seule valeur à la fois. Lors de la création d’une variable, son nom se trouve à gauche de l’opérateur d’affectation =, sa valeur (ou l’expression qui la calcule) à droite :
variable = expressionPlusieurs noms peuvent désigner le même emplacement mémoire, mais une variable ne peut jamais contenir plus d’une seule valeur à un instant donné.
Question 2
Expliquez avec vos propres mots ce qu’est une variable locale, puis ce qu’est une variable globale.
▷ Rappel
- Une variable locale appartient en propre à une fonction : soit un paramètre, soit une variable créée à l’intérieur du corps de la fonction.
- Une variable globale est définie en dehors de toute fonction.
Question 3 — tracer l’exécution
Que va afficher ce programme ? Répondez sans exécuter le code, en reproduisant exactement la sortie attendue, puis vérifiez à l’ordinateur.
x = 300
y = x + 200
x = 400
print(y)! Piège à éviter
Il ne faut surtout pas penser à la ligne 2 comme une « équation » qui ferait que modifier x plus tard modifierait aussi y. En Python, y = x + 200 calcule la valeur de y à cet instant précis (ici, 500) et la fige dans y — les modifications ultérieures de x n’ont aucun effet rétroactif sur y. Le programme affiche donc 500.
Devinette — variables locales vs globales
Que va afficher ce programme ?
def double(x):
x = x * 2
print(x)
x = 10
double(x)
print(x)! Solution
Le programme affiche 20 puis 10. Il y a deux variables x distinctes : la variable globale (ligne 5) et la variable locale à double (paramètre, ligne 1). Modifier la variable locale à l’intérieur de double ne change rien à la variable globale du même nom.
Exercice de synthèse — trouver l’erreur
Un programme doit dessiner des cercles concentriques de rayon croissant, mais dessine à la place plusieurs cercles superposés du même rayon :
def cercle(rayon):
setPos(-rayon, 0)
nb_cotes = 60
polygone(2 * 3.1416 * rayon / nb_cotes, nb_cotes)
rayon += 30
def cercles_concentriques(nb_cercles):
rayon = 50
for _ in range(nb_cercles):
cercle(rayon)Expliquez précisément pourquoi rayon += 30 (dans cercle) ne change rien au déroulement de cercles_concentriques, puis proposez une correction.