Exo Fonction

Identification

Infoforall

14 - Exercices Variable


A rendre en version papier ou numérique.

1 - Expression ou Instruction

✎ 01° Donner la définition d'expression et d'instruction.

...CORRECTION...

Allez lire le cours !

✎ 02° Pour chacune de ces lignes, dire s'il s'agit d'une expression ou d'une instruction.

>>> a = 5 >>> a + 2 >>> b = a + 4 >>> t = [4, 40, 3] >>> len(t) >>> c = t[0] + t[1] >>> c = c + 1 >>> import Turtle

...CORRECTION...

>>> a = 5 # Instruction (affectation) >>> a + 2 # Expression >>> b = a + 4 # Instruction (affectation) >>> t = [4, 40, 3] # Instruction (affectation) >>> len(t) # Expression >>> c = t[0] + t[1] # Instruction (affectation) >>> import Turtle # Instruction (on importe des choses en mémoire)

2 - Gestion des variables

✎ 03° Donner les modifications de mémoire ou les affichages provoqués par ce programme.

1 2 3 4 5 6 7
a = "Bo" b = "um " c = a + b c print(c*3) a = "Po" print(c*3)

...CORRECTION...

1 2 3 4 5 6 7
a = "Bo" # a référence "Bo" b = "um " # b référence "um " c = a + b # c référence "Boum " c # Il n'y a qu'une expression. Aucun effet dans un programme ! print(c*3) b # Affiche "Boum Boum Boum" a = "Po" # a référence "Po" maintenant, mais cela ne modifie pas c print(c*3) # Affiche toujours "Boum Boum Boum"

✎ 04° Comment intervertir les contenus d'une variable x contenant 50 et une variable y contenant 100 ? Utiliser la méthode en plusieurs lignes.

...CORRECTION...

>>> x = 50 >>> y = 100 >>> temp = x >>> x = y >>> y = temp >>> x 100 >>> y 50

✎ 05° Comment intervertir les contenus d'une variable x contenant 50 et une variable y contenant 100 en une seule ligne ?

...CORRECTION...

>>> x = 50 >>> y = 100 >>> x, y = y, x >>> x 100 >>> y 50

3 - Locale ou globale

✎ 06° Un élève pense que son programme permet de récupérer la somme des nombres envoyés à la fonction.

1 2 3 4 5 6 7
def somme(a, b): s = a + b x1 = 10 x2 = 40 s = 0 somme(x1,x2)

Question : indiquer les variables qui sont locales et les variables qui sont globales.

...CORRECTION...

1 2 3 4 5 6 7
def somme(a, b): # a et b sont locales car elles stockent les entrées s = a + b # s est locale puisque c'est une affectation x1 = 10 # globale puisque hors fonction x2 = 40 # globale puisque hors fonction s = 0 # globale puisque hors fonction somme(x1,x2) # juste un appel de fonction

✎ 07° Modifier mentalement les noms des variables et justifer la valeur de s dans le programme principal après exécution du programme.

1 2 3 4 5 6 7
def somme(a, b): s = a + b x1 = 10 x2 = 40 s = 0 somme(x1,x2)

...CORRECTION...

1 2 3 4 5 6 7
def somme(a_so, b_so): s_so = a_so + b_so x1_pp = 10 x2_pp = 40 s_pp = 0 somme(x1_pp,x2_pp)

En renommant mentalement les variables, on voit clairement que la variable qu'on tente de modifier en ligne 2 est s_so, la variable locale de la fonction.

La variable s_pp n'a donc pas été modifiée et vaut toujours 0.

✎ 08° Questions de cours :

  1. Une variable globale est-elle permanente ou temporaire ?
  2. Une variable locale est-elle permanente ou temporaire ?

...CORRECTION...

  1. Une variable globale est-elle permanente ou temporaire ?
  2. Une variable globale est permanente, elle ne disparait pas tant que le programme est en marche.

  3. Une variable locale est-elle permanente ou temporaire ?
  4. Une variable locale est temporaire, elle n'est créée que lorsqu'on appelle la fonction et elle est détruite dès que la fonction répond.

✎ 09° Questions de cours :

  1. Une fonction peut-elle lire une variable globale ?
  2. Une fonction peut-elle modifier une variable globale ?
  3. Le programme principal peut-il lire une variable locale à une fonction ?
  4. Le programme principal peut-il modifier une variable locale à une fonction ?

...CORRECTION...

  1. Une fonction peut-elle lire une variable globale ?
  2. Oui, une fonction peut lire une variable globale.

  3. Une fonction peut-elle modifier une variable globale ?
  4. Non, pas de modification possible.

  5. Le programme principal peut-il lire une variable locale à une fonction ?
  6. Non, car cette variable n'existe que le temps que la fonction fonctionne. Or l'instruction dans le programme se situe avant l'appel ou après l'appel...

  7. Le programme principal peut-il modifier une variable locale à une fonction ?
  8. Non, car cette variable n'existe que le temps que la fonction fonctionne. Or l'instruction dans le programme se situe avant l'appel ou après l'appel...

✎ 10° Voici un nouveau programme, proche mais pas similaire.

1 2 3 4 5 6 7 8 9
def incrementation(a): total = s total = a + total return total x1 = 10 x2 = 40 s = 20 s = incrementation(x1)

Question : modifier mentalement les noms des variables en vous demandant si elles sont locales ou globale. Exécuter le programme et donner la valeur de s en fin de programme.

...CORRECTION...

1 2 3 4 5 6 7 8 9
def incrementation(a_loc): # locale puisque c'est une entrée total_loc = s_pp # total locale car une affectation MAIS s globale total = a + total_loc # total locale car affectation return total x1_pp = 10 # x1 globale x2_pp = 40 # x2 globale s_pp = 20 # s globale s_pp = incrementation(x1_pp) # s globale

En ligne 2, s est bien la variable globale puisqu'une entrée n'est stockée dans une variable notée s et qu'il n'y a aucune affectation sur une variable s dans cette fonction.

Déroulé de l'exécution :

L1(déclaration) - L6 - L7 - L8 - L9 (appel en envoyant 10)

L1(appel, a_loc reçoit 10)

L2 : total_loc reçoit 20, lue depuis la variable globale.

L3 : total_loc incrémentée de 10, pour un total de 30.

L4 : la fonction renvoie total_loc,soit 30.

Retour en L9 et x_pp reçoit 30.

On notera que toutes les variables locales ont été détruites et n'existent plus.

FIN

Activité publiée le 15 11 2023
Dernière modification : 15 11 2023
Auteur : ows. h.