Exercice 2 : résolution en Python

 Énoncé 2 

Le programme doit lire au maximum 3 mots en arrêtant la lecture dès qu'il trouve le mot "stop". Le programme doit ensuite signaler si le mot "stop" figurait parmi les mots lus.

 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 lire au maximum 3 mots dans la liste... il faudra donc les compter. Le tour de main du compteur est donc nécessaire;
    • Il faut signaler la présence du mot "stop", ce qui pourrait faire penser que le tour de main du signal est nécessaire, mais l'arrêt se fait d'office avec le mot "stop". S'il a été lu, il sera toujours présent dans la variable de lecture après la répétitive, il suffira de vérifier s'il est dans cette variable ou pas pour savoir s'il a été lu.
  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 demander un mot à l'utilisateur et de le lire;
    • 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 le mot lu soit égal à "stop";
    • OU
    • Le fait que le compteur soit égal à 3;
  6. Qu'est-ce qui viendra après la répétitive ?
    • L'affichage qui signale si le mot "stop" figurait ou pas parmi les mots lus.

 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.

Voici le programme en pseudo-code :

Affiche+nl "Le programme va lire au maximum 3 mots en arrêtant la lecture dès qu'il trouve le mot "stop". Le programme va ensuite signaler si le mot "stop" figurait parmi les mots lus."
compteur ← 0
Répète
    Affiche "Donne-moi un mot : "
    Lis et colle sur mot
    compteur ← compteur + 1
Jusqu'à ce que (mot = "stop") OU (compteur = 3)
Si mot = "stop" Alors
    Affiche+nl "stop était dans la liste des mots lus."
Sinon
    Affiche+nl "stop n'était pas dans la liste des mots lus."
Fin Si

Inverser la condition (mot = "stop") OU (compteur = 3) donnera (mot ≠ "stop") ET (compteur ≠ 3). Étant donné que le compteur n'ira jamais plus haut que 3, la condition peut devenir (mot ≠ "stop") ET (compteur < 3).

 Le programme en Python 

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

  1. La première fois qu'on fera appel à la variable mot est dans le while, c'est-à-dire en lecture, ce qui n'est pas permis (variable vide);
  2. Il faudra donc initialiser mot avec une chaîne de caractères avant la boucle while;
  3. Cette chaîne de caractères peut être n'importe quoi SAUF "stop" sinon le programme sautera la boucle dès qu'il y arrivera.
  4. En effet, la boucle ne s'effectuera pas dès que SOIT (fonction ET) le compteur sera = à 3, SOIT quand mot sera = à "stop". Nous initialiserons mot avec la chaîne vide "".
  5. Concernant la robustesse du programme, question qu'il faut systématiquement se poser, on ne manipule que des chaînes de caractères en provenance du clavier, il n'y a donc rien à craindre quoi que tape l'utilisateur en entrée.
  6. L'énoncé contient des guillemets de part et d'autre du mot "stop". Afin que le programme n'y voit pas la fin de la chaîne à afficher, il faut faire précéder les " d'une barre oblique inverse ou backslash.

print ("Le programme va lire au maximum 3 mots en arrêtant la lecture dès qu'il trouvera le mot \"stop\". Le programme va ensuite signaler si le mot \"stop\" figurait parmi les mots lus.")
compteur = 0
mot = ""
while mot != "stop" and compteur < 3 :
    mot = input("Donne-moi un mot : ")
    compteur += 1
if mot == "stop" :
    print ("stop était dans la liste des mots lus.")
else :
    print ("stop n'était pas dans la liste des mots lus.")

Vous pouvez "copier-coller" ce programme dans votre éditeur IDLE pour vérifier s'il fonctionne selon les spécifications de départ. Exécutez le programme en tapant "stop" en première position, en deuxième, en troisième, en quatrième,... Que se passe-t-il si vous tapez "Stop" ?

 Codez "robuste" !!! 

Comme indiqué plus haut, la question de la robustesse doit se poser d'office dès que votre programme effectue une lecture au clavier. Vous devez anticiper ce qui peut se passer en fonction des réactions multiples et variées de l'utilisateur.

Dans le programme actuel, seules des chaînes de caractères en provenance du clavier sont manipulées, il n'y a donc rien à craindre.

Bonne poursuite de votre apprentissage.

Retour