Sujet précédent

12. Exercice de lecture

Sujet suivant

14. Répète

Cette page

13. Autre livraison de journal

Retournons à l’exemple de la livraison des journaux à Monsieur Pattis et le monde Journal 0. Ci-dessous est la première solution que vous avez dû trouver, avec quelques commentaires rajoutés.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
prend()  # le journal

# monter au premier
tourne_a_gauche()
avance()
tourne_a_gauche()
tourne_a_gauche()
tourne_a_gauche()
avance()
avance()

# monter au deuxième
tourne_a_gauche()
avance()
tourne_a_gauche()
tourne_a_gauche()
tourne_a_gauche()
avance()
avance()

# monter au troisième
tourne_a_gauche()
avance()
tourne_a_gauche()
tourne_a_gauche()
tourne_a_gauche()
avance()
avance()

depose()  # le journal

# demi-tour
tourne_a_gauche()
tourne_a_gauche()

# descendre un étage
avance()
avance()
tourne_a_gauche()
avance()
tourne_a_gauche()
tourne_a_gauche()
tourne_a_gauche()

# descendre un autre étage
avance()
avance()
tourne_a_gauche()
avance()
tourne_a_gauche()
tourne_a_gauche()
tourne_a_gauche()

# descendre un autre étage
avance()
avance()
tourne_a_gauche()
avance()
tourne_a_gauche()
tourne_a_gauche()
tourne_a_gauche()

Cette solution est plutôt longue ... et il est facile de faire des erreurs. On remarque cependant qu’il y a plusieurs répétitions, ce qui suggère qu’on peut définir plusieurs fonctions. Nous avons déjà défini tourne_a_droite et demi_tour qui devraient être dans votre bibliothèque. Utilisons-les et définissons d’autres fonctions.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from biblio import tourne_a_droite, demi_tour

def monter_un_etage():
    tourne_a_gauche()
    avance()
    tourne_a_droite()
    avance()
    avance()

def monter_trois_etages():
    monter_un_etage()
    monter_un_etage()
    monter_un_etage()

def descendre_un_etage():
    avance()
    avance()
    tourne_a_gauche()
    avance()
    tourne_a_droite()

def descendre_trois_etages():
    descendre_un_etage()
    descendre_un_etage()
    descendre_un_etage()

# === Fin des définitions ===

prend()  # le journal
monter_trois_etages()
depose()  # le journal
demi_tour()
descendre_trois_etages()

Chaque fonction ne contient pas plus de 5 instructions. Chacune de ces fonctions est facile à lire et à comprendre. Une fois que l’on a défini les fonctions requises, il est facile d’écrire un programme: 5 lignes suffisent pour faire en sorte que Reeborg livre le journal et retourne au rez-de-chaussée. Les définitions de fonctions permettent donc d’éviter plein de répétitions, et facilitent la compréhension.

Allez-y!

Écrivez le programme ci-dessus et assurez-vous qu’il fonctionne. Lorsque ce sera fait, vous serez prêt à apprendre un autre truc qui permettra de le simplifier encore davantage.

Puisque des fonctions comme monter_un_etage, monter_trois_etages, etc., sont spécifiques à une tâche en particulier, ce n’est probablement pas une bonne idée de les sauvegarder dans la bibliothèque.