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.