Livre_silo 30 août 2013 16:32 Page 118
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
118
Informatique pour tous
Le nom à donner à la fonction, à ses arguments et à ses variables sont pour ainsi dire donnés dans l’énoncé.
On n’oublie pas de mentionner les conditions d’utilisation dans la documentation.
def division_euclidienne(n, d):
"""calcule q et r tels que n = q * d + r et 0 <= r < d,
en supposant n >= 0 et d > 0
"""
r = n
q = 0
while r > d:
r = r - d
q = q + 1
return (q, r)
SAVOIR-FAIRE Utiliser un débogueur avec des fonctions
On a vu jusqu’ici que, en mode débogueur, on pouvait exécuter un programme instruction par instruction à l’aide de la commande Pas en avant arrow-step-over.png (ou next). Lorsque
le programme comporte des fonctions, cette commande considère chaque appel de
fonction comme une instruction unique et passe donc directement à l’instruction suivante. Ce n’ est pas approprié si on veut voir ce qui se passe dans le corps de la fonction.
Pour entrer dans le corps d’une fonction au moment où elle est appelée, on clique sur
Pas vers l’intérieur arrow-step-in.png ou on tape s comme step. Le curseur qui indique la prochaine
ligne à exécuter se déplace sur la première ligne du corps de la fonction et on peut
ensuite suivre son déroulement instruction par instruction. Les variables utilisées dans
le corps de la fonction s’affichent alors également dans l’explorateur de variables.
À l’inverse, si le débogueur est entré dans une fonction et si on souhaite aller directement à la fin de l’exécution de cette fonction, au moment du retour de valeur, on
clique sur Pas vers l’extérieur arrow-step-out.png ou on tape r comme return.
Exercice 5.3 On donne le programme suivant :
def f(x):
for i in range(100):
x = (13 * x + 1) % 256
return x
def g():
s = 0.
for j in range(10):
a = f(j)
s = s + 1. / (a-210)
return s
print(g())
1 Que se passe-t-il lors de son exécution ?
2 Jusqu’à quel point la simple lecture du code permet-elle d’expliquer ce comportement ?
3 À quelle itération de la boucle de la fonction g se situe le problème ?
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
118
Informatique pour tous
Le nom à donner à la fonction, à ses arguments et à ses variables sont pour ainsi dire donnés dans l’énoncé.
On n’oublie pas de mentionner les conditions d’utilisation dans la documentation.
def division_euclidienne(n, d):
"""calcule q et r tels que n = q * d + r et 0 <= r < d,
en supposant n >= 0 et d > 0
"""
r = n
q = 0
while r > d:
r = r - d
q = q + 1
return (q, r)
SAVOIR-FAIRE Utiliser un débogueur avec des fonctions
On a vu jusqu’ici que, en mode débogueur, on pouvait exécuter un programme instruction par instruction à l’aide de la commande Pas en avant arrow-step-over.png (ou next). Lorsque
le programme comporte des fonctions, cette commande considère chaque appel de
fonction comme une instruction unique et passe donc directement à l’instruction suivante. Ce n’ est pas approprié si on veut voir ce qui se passe dans le corps de la fonction.
Pour entrer dans le corps d’une fonction au moment où elle est appelée, on clique sur
Pas vers l’intérieur arrow-step-in.png ou on tape s comme step. Le curseur qui indique la prochaine
ligne à exécuter se déplace sur la première ligne du corps de la fonction et on peut
ensuite suivre son déroulement instruction par instruction. Les variables utilisées dans
le corps de la fonction s’affichent alors également dans l’explorateur de variables.
À l’inverse, si le débogueur est entré dans une fonction et si on souhaite aller directement à la fin de l’exécution de cette fonction, au moment du retour de valeur, on
clique sur Pas vers l’extérieur arrow-step-out.png ou on tape r comme return.
Exercice 5.3 On donne le programme suivant :
def f(x):
for i in range(100):
x = (13 * x + 1) % 256
return x
def g():
s = 0.
for j in range(10):
a = f(j)
s = s + 1. / (a-210)
return s
print(g())
1 Que se passe-t-il lors de son exécution ?
2 Jusqu’à quel point la simple lecture du code permet-elle d’expliquer ce comportement ?
3 À quelle itération de la boucle de la fonction g se situe le problème ?
