1
votes

Pourquoi mon instruction else simple ne fonctionne-t-elle pas correctement dans ma boucle while?

Je suis un noob et probablement stupide, mais l'aide est grandement appréciée. Je veux savoir pourquoi le code se termine lorsqu'il exécute l'instruction "else", je veux qu'il continue la boucle "while".

import random
happy == "no"
while happy == "no":
    stat = random.randint(1,50)
    print (stat)
    happy = input("Are you happy with this?" )
    if happy == "yes":
        print("Okay moving on. ")
        break
else:
    print("Please enter a valid answer. ")


0 commentaires

3 Réponses :


3
votes

Votre else doit être au même niveau d'indentation que if , et vous essayez de faire une comparaison ( == ) dans la deuxième ligne au lieu de définir la variable happy comme étant no (avec = ). Ceci est le code fixe, dont j'ai pu vérifier qu'il fonctionne pour moi dans Python 3.7.4:

import random
happy = "no"
while happy == "no":
    stat = random.randint(1,50)
    print (stat)
    happy = input("Are you happy with this?" )
    if happy == "yes":
        print("Okay moving on. ")
        break
    else:
        print("Please enter a valid answer. ")

La clause else dans while est pour un objectif spécifique - quelque peu contre-intuitif même pour les développeurs Python non débutants (laissez seuls les nouveaux arrivants). Vous êtes tombé sur cette construction "par accident", c'est pourquoi votre code n'a pas renvoyé une SyntaxError et peut vous avoir induit en erreur lors du débogage.


7 commentaires

Salut, désolé, j'ai mal formaté le code de ma question !! Dans mon code actuel, l'indentation est correcte (la même que celle que vous avez publiée) mais le code se termine toujours après l'exécution de l'instruction "else" plutôt que de relancer la "stat".


L'instruction «else» est également déclenchée lorsque l'utilisateur entre «non» comme réponse, même s'il s'agit d'une réponse valide. Je ne sais pas pourquoi c'est


A fonctionné correctement pour moi ici avec Python 3.7.4. J'ai dû changer la deuxième ligne en happy = "yes" (en supprimant un = ). Mais il a jeté une erreur avant cela, il est donc peu probable que ce soit le cas.


Argh, je ne peux pas comprendre pourquoi ça se termine!


Il y a un certain nombre d'engrenages en mouvement impliqués - version Python, système d'exploitation, IDE, etc. dans la deuxième ligne. Je vérifierais trois fois que vous copiez-collez le code que vous exécutez réellement et ajouterais autant d'informations que possible à la question. Enregistrez votre écran si nécessaire. Compte tenu de ce que je vois dans la question, je ne peux pas (ni personne) faire grand-chose pour vous aider à diagnostiquer votre problème.


Mon ami a corrigé le code en modifiant ma boucle While. Il a changé "while happy ==" no "en" while True ". Et il a expliqué que la raison pour laquelle cela ne fonctionnait pas auparavant était que l'instruction" else "changeait toujours la variable" happy ", car j'ai demandé à l'utilisateur de entrez une chaîne pour cela dans la précédente déclaration "if". Merci pour toute l'aide.


Cela fonctionnerait aussi, mais je ne sais toujours pas pourquoi le code que j'ai publié fonctionne pour moi et pas pour vous 🧐



1
votes

La réponse est parce que votre indentation. L'indentation est très importante en Python .

Ce que vous voulez faire, c'est déplacez l'instruction else au même niveau d'indentation que if , de sorte que la logique dit:

Vérifiez si cette condition est vraie, sinon (sinon), faites ceci

Un simple retrait devrait résoudre votre problème.

import random
happy = "no"
while happy == "no":
    stat = random.randint(1,50)
    print (stat)
    happy = input("Are you happy with this?" )
    if happy == "yes":
        print("Okay moving on. ")
        break
    else:
        print("Please enter a valid answer. ")


2 commentaires

Salut, désolé, j'ai mal formaté le code de ma question !! Dans mon code actuel, l'indentation est correcte (la même que celle que vous avez publiée) mais le code se termine toujours après l'exécution de l'instruction "else" plutôt que de relancer la "stat".


L'instruction «else» est également déclenchée lorsque l'utilisateur entre «non» comme réponse, même s'il s'agit d'une réponse valide. Je ne sais pas pourquoi c'est



0
votes

Mon ami a corrigé le code en modifiant ma boucle While. Il a changé "while happy ==" no "en" while True ". Et il a expliqué que la raison pour laquelle cela ne fonctionnait pas auparavant était que l'instruction" else "changeait toujours la variable" happy ", car j'ai demandé à l'utilisateur de saisissez une chaîne pour celui-ci dans l'instruction "if" précédente.


0 commentaires