Exercice 15 : résolution en Python

 Énoncé 15 

Le programme simule le jet d'un dé et affiche la valeur trouvée à chaque lancer. Le programme doit afficher le nombre de jets qui ont été nécessaires pour trouver un 6.

 Analyse 

La succession de questions à se poser est la suivante :

  1. Ce programme nécessite-t-il une répétitive ?
    • La réponse est "Oui";
    • Il est maintenant superflu de se demander si ce sera un Répète ou un Tant que du fait qu'en Python, seul le Tant que existe.
  2. Ce programme nécessite-t-il un ou plusieurs tours de main ?
    • Le programme doit compter le nombre de jets de dés pour obtenir un 6... Le tour de main du compteur est donc nécessaire;
  3. Qu'est-ce qui viendra avant la répétitive ?
    • Le fait de prévenir l'utilisateur de ce que fera le programme;
    • Le fait d'initialiser le compteur à zéro
  4. Qu'est-ce qui viendra dans la répétitive ?
    • Le fait de "lancer" le au hasard et d'afficher le résultat;
    • Le fait d'incrémenter le compteur, c'est-à-dire y ajouter 1 à chaque boucle.
  5. Qu'est-ce qui arrêtera la répétitive ?
    • Le fait que la valeur du soit égale à 6;
  6. Qu'est-ce qui viendra après la répétitive ?
    • L'affichage du nombre de lancers nécessaires pour obtenir le 6.

 Le programme en pseudo-code 

Nous allons prendre l'habitude d'écrire le programme en pseudo-code avec un Répète, ce qui facilitera l'établissement de la condition d'arrêt (le cerveau réfléchit plus facilement "à l'endroit" qu'à "l'envers"). Il suffira alors de transformer le Répète en Tant que en appliquant le théorème de de Morgan à la condition d'arrêt que l'on aura trouvée.

Attention : La transformation n'est pas toujours aussi simple, il faut toujours veiller à ce que la condition vérifie "quelque chose" qui existe.

En fonction de toutes les réponses ci-dessus, voici le programme en pseudo-code :

Affiche+nl "le programme lance un dé et affiche le nombre de lancers qui ont été nécessaires pour obtenir un 6."
compteur ← 0
Répète
    Tire la valeur du dé au hasard
    Affiche la valeur du dé, " "
    compteur ← compteur + 1
Jusqu'à ce que dé = 6
Affiche+nl "Il a fallu ", compteur, " lancers pour obtenir un 6."

L'inverse de la condition dé = 6 sera dé ≠ 6 ou, puisqu'on n'ira jamais au-dessus de 6, dé < 6.

 Le programme en Python 

Voici ce que cela donne en Python en tenant compte d'un certain nombre de points importants :

  1. Le tirage au sort d'un nombre entier se fait grâce à la fonction randint appartenant à la bibliothèque random. Il faut donc importer cette fonction.
  2. La première fois qu'on fera appel à la variable de est dans le while, c'est-à-dire en lecture, ce qui n'est pas permis (variable vide);
  3. Il faudra donc initialiser de avec une valeur avant la boucle while;
  4. Cette valeur peut être n'importe quoi SAUF 6 sinon le programme sautera la boucle dès qu'il y arrivera.
  5. Faisons simple et initialisons de avec la valeur impossible 0.
  6. Lors de l'affichage, on désire que les valeurs des dés s'affichent les unes à la suite des autres, sans passage à la ligne. Ceci se fait en ajoutant, à la fin du print la mention , end=" " entre les (). Le passage à la ligne automatique du print est alors désactivé et remplacé par un espace.
  7. Concernant la robustesse du programme, question qu'il faut systématiquement se poser, il n'y a aucune lecture au clavier, tout est donc en ordre.
from random import randint
print ("le programme lance un dé et affiche le nombre de lancers qui ont été nécessaires pour obtenir un 6.")
compteur = 0
de = 0
while de < 6 :
    de = randint (1,6)
    print (de, end=" ")
    compteur += 1
print() # Simplement pour passer en début de nouvelle ligne pour l'affichage suivant.
print ("Il a fallu", compteur, "lancers pour obtenir un 6.")

Vous pouvez "copier-coller" ce programme dans votre éditeur IDLE pour vérifier s'il fonctionne selon les spécifications de départ.

Vérifiez si les valeurs tirées au hasard vont bien de 1 à 6 compris, que toutes les valeurs s'affichent, que le nombre de lancers correspond bien à ce qui est affiché,...

 Codez "robuste" !!! 

Comme indiqué plus haut, la question de la robustesse ne se pose pas ici puisqu'il n'y a aucune lecture au clavier.

Bonne poursuite de votre apprentissage.

Retour