24. Apprendre à Reeborg à faire des additions

Dans cette leçon, je vous guiderai pour écrire un programme qui fera faire à Reeborg l'addition de deux nombres. Bien que nous allons le faire de la façon habituelle, en utilisant des nombres écrits en base 10 (que nous utilisons tous les jours), nous pourrons facilement utiliser le programme pour additionner des nombres dans d'autres bases !


Échauffement

  1. Écrivez un programme qui fait faire à Reeborg l'addition 3+2 de la manière suivante :
    3+2donne 5
    Écrivez-le de façon qu'il puisse aussi fonctionner pour additionner 1+4.
  2. Modifiez votre programme pour que Reeborg puisse calculer 13+22 de la manière suivante, où chaque pile de sonnettes représente un chiffre :
    13+22donne 35
  3. Pouvez-vous écrire un programme pour que Reeborg puisse toujours calculer 3+2 mais aussi 8+4 comme suit ?

    8+4donne 12


    Votre nouveau programme doit aussi faire correctement les additions 2+5 et 9+9. Pouvez-vous voir comment faire cela ? Si oui, alors essayez... Cependant, si vous ne pouvez pas, ne vous découragez pas ; continuez à lire plutôt...

Révisons l'addition

Ajoutons deux nombres "à la manière traditionnelle", de droite à gauche :

  528
+ 634
------
12 # additionner les unités d'abord (8+4)

Nous remarquons que nous avons un "1" à mettre en retenue au-dessus de la colonne des dizaines. Cette "retenue au-dessus", c'est très probablement là que votre programme a eu des problèmes. Réécrivons-le de la manière "habituelle" et continuons.

   1
528
+ 634
------
1162

Bien, ça a été un peu rapide, mais je suis sûr que vous avez pu suivre. Dans le monde de Reeborg, nous aimerions que cette addition ressemble à ce qui suit :

début de l'additiondonne fin de l'addition

Attaquons d'abord le problème plus simple de l'addition 8+4.


Additionner 8+4 en base 10

Attention : L'exercice suivant peut être un peu difficile et est présenté plus comme un défi. Lisez le reste de cette leçon et décidez vous-même si vous voulez essayer, ou continuer directement à en apprendre plus sur Python.

Comme nous l'avons déjà dit, le problème de l'addition de deux nombres de façon que chaque pile de sonnettes représente un seul chiffre arrive quand nous devons additionner deux chiffres dont la somme est plus grande que 9 (en base 10). En quelque sorte, nous devons garder une trace de ce nombre magique (10), quels que soient les deux nombres que nous allons additionner. J'ai créé un monde (fichier : adding_world.wld) assez grand pour ajouter deux nombres de 7 chiffres en base 10 (ou même en base 16 !). Chargez ce fichier monde et je vous guiderai pour que vous puissiez écrire un programme qui peut faire des additions correctement.

Après avoir chargé le fichier monde, si vous regardez en bas de l'écran, vous verrez que Reeborg transporte 8 sonnettes. Écrivez un programme pour que Reeborg mette une ligne de sonnettes, une à chaque intersection de la 10e rue, comme illustré ci-dessous (après que mon programme a fini, j'ai utilisé les touches fléchées de mon clavier pour écarter Reeborg du chemin car il était sur la sonnette de la dernière colonne : c'est pourquoi vous ne le voyez pas dans l'image ci-dessous).

ligne de sonnettes à travers la 10e rue

Maintenant, assurez-vous d'enregistrer ce programme avant de continuer.

Rechargez le fichier monde (pour que le monde soit vide à nouveau et Reeborg soit au point d'origine [intersection de la 1re avenue et la 1rerue]) et ajoutez des sonnettes dans le coin en bas à droite pour que l'affichage ressemble à ce qui suit (mais avec Reeborg au point d'origine).

8+4

Faites faire à Reeborg ce qui suit :

  1. Mettre une ligne de sonnettes à travers la 10e rue comme auparavant.
  2. Aller en bas à droite de l'écran, ramasser les deux piles (8 et 4) de sonnettes.
  3. Disperser ces 12 sonnettes sur une colonne verticale comme illustré ci-dessous.

8+4 dispersés à la verticale

Maintenant, nous avons deux sonnettes au-dessus de la ligne de sonnettes horizontale (les unités du nombre 12) et une sonnette en plus sur la ligne horizontale (que nous pouvons utiliser comme la "retenue"). Ainsi, tout ce que vous avez à faire est de :

  1. Faire ramasser à Reeborg les 9 sonnettes au-dessous de la ligne de sonnettes horizontale, et les mettre de côté (peut-être en les posant toutes sur la ligne horizontale) ; vous pouvez le faire en répétant les étapes suivantes :
    1. ramasser une sonnette
    2. voir s'il y a une autre sonnette à ramasser, sinon
    3. avancer... jusqu'à arriver à une intersection où il y a une autre sonnette à ramasser...
    au point auquel vous aurez atteint la ligne de sonnettes horizontale. Vous pouvez les déposer toutes à cette intersection.
  2. Faites-le continuer à avancer au nord au moins au-delà de la dernière sonnette, comme illustré ci-dessous :

    8+4

  3. Faites lui faire demi-tour, ramasser une sonnette et avancer. Répéter jusqu'à ce que Reeborg arrive à l'intersection où il n'y a plus de sonnettes à ramasser (en dessous de la ligne horizontale) ; à ce point, Reeborg devrait transporter trois sonnettes.
  4. Faites lui transporter ces sonnettes vers le bas, jusqu'à ce qu'il arrive au mur ;
  5. Faites lui poser toutes les sonnettes (3), en ramasser une (la retenue), avancer vers l'ouest et poser la sonnette-retenue.
Tout ce qu'il reste à faire est d'écarter Reeborg du chemin pour afficher le résultat !

8+4

Eh bien... en réalité, ces cinq étapes comme je les ai écrites vont avoir besoin de pas mal de code et vous pourrez trouver cela un peu difficile à faire. Mais vous y arriverez si vous procédez méthodiquement. Essayez !


Additionner 3+5

Alors, vous avez fini par faire calculer 8+4 par votre programme. Formidable ! Maintenant essayez-le avec 3+5. Est-ce que cela fonctionne ? Il y a des chances que non... puisqu'il n'y a pas besoin de retenue. Pouvez-vous réfléchir à une façon de le faire ? Peut-être que vous pourrez en utilisant seulement ce que nous avons appris jusqu'ici... Pour la solution que j'ai écrite moi, j'ai eu besoin d'un mot-clé Python que nous n'avons pas encore vu : break.

[NdT : break = interrompre]


Défi final

Si vous savez ce que veut dire additionner des nombres dans des bases autres que la base 10, essayez de modifier votre programme (ou le fichier monde ?...) pour pouvoir additionner des nombres dans une base différente.


Et ensuite ?

Jusqu'ici, dans le monde de Reeborg, nous avons vu les mots-clés Python suivants :
def, elif, else, if, not, pass, while. Nous avons fini par écrire un programme plutôt compliqué pour que Reeborg puisse additionner deux nombres. Il est temps d'abandonner le monde de Reeborg pour voir comment additionner deux nombres bien plus facilement avec du Python "pur". Ne vous en faites pas : nous reviendrons dans le monde de Reeborg de temps en temps, et nous verrons comment notre connaissance améliorée de Python peut aider Reeborg.

précédentAprès la tempête - début - Python sait déjà comment additionner.suivant