Livre_silo 30 août 2013 16:32 Page 119
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
119
5 – Fonctions
1 Le programme s’arrête sur l’erreur suivante :
ZeroDivisionError: 'float division by zero'
2 Il est clair que la division par zéro provient de la ligne s = s + 1. / (a-210) dans la fonction g ; en
revanche, la lecture seule du code ne nous permet pas de déterminer quand la variable a prend la
valeur 210.
3 Si l’on n’utilise que la commande Pas en avant, le débogueur n’entre pas dans l’appel à la fonction g
et on ne voit pas ce qui se passe.
À la ligne print(g()), il faut donc utiliser Pas vers l’intérieur. Ensuite, on peut effectuer Pas en avant
dans le corps de g jusqu’à déterminer que la division par zéro a lieu à l’itération j=6. Si par erreur on
continue à utiliser Pas vers l’intérieur, on peut se retrouver dans le corps de f. Pour ne pas avoir à
exécuter les 100 itérations à la main, on peut effectuer Pas vers l’extérieur.
Remarquons que placer un point d’arrêt à la ligne qui produit la division par zéro évite de dérouler
toutes les itérations dans g à la main.
POUR ALLER PLUS LOIN Un générateur pseudo-aléatoire
Le lecteur qui aura eu la curiosité de dérouler une exécution de la fonction f dans l’exercice
corrigé ci-avant aura pu remarquer le caractère apparemment imprévisible des valeurs successives prises par la variable x (apparemment seulement puisqu’il s’agit d’une suite périodique). Ce sont des procédures telles que celle-ci qui permettent aux ordinateurs de simuler
le hasard. On parle de générateur pseudo-aléatoire.
5.1.2 Variables globales et locales
En Python, on distingue deux sortes de variables : les globales et les locales. Par exemple,
dans le programme suivant, x est une variable globale :
x = 7
print(x)
À l’inverse, la variable y dans la fonction f suivante est locale :
def f():
y = 8
return y
Ainsi, avant un appel à f(), on se trouve dans l’état :
. .
7 .
x
Pendant l’appel, et après avoir exécuté y = 8, on se trouve dans un état augmenté d’une
variable locale y, c’est-à-dire :
. .
7 .
x
. .
8 .
y
Après l’appel, la variable locale y disparaît et on se retrouve dans l’état initial :
. .
7 .
x
Précédent

- 132/402

Suivant