0
votes

La fonction d'impression suivie d'une fonction de pause ne renvoie rien

guess a number from 1 to 2. 2
too high
guess a number from 1 to 2. 1
>>> 

2 commentaires

Dans la seconde entrée appelle , la condition but! = Devinez devient false et le pendant sorties de boucle. Déplacez le deviness = int (entrée («Devinez un numéro de 1 à 2 ')) à l'intérieur du pendant que boucle, avant le premier si et supprimez l'appel à entrée avant le pendant .


Il suffit d'utiliser pendant que true: au lieu de la vérification pré-mature.


3 Réponses :


1
votes

Votre tandis que La condition de boucle quitte la boucle avant votre ELIF GUEST == objectif a une chance de voir l'égalité. Chaque fois que vous fournissez une nouvelle entrée, il est toujours testé par pendant que l'objectif! = Devinez: avant de pouvoir atteindre elif devinge == Objectif: .

Pour corriger, vous peut soit rendre le pendant une boucle infinie: xxx

ou déplacez le corps de la finale elif en dehors du tandis que boucle: xxx

Dans les deux cas, j'ai corrigé le style un peu pour correspondre à Pep8 (vous n'avez pas besoin de parenthèses sont des tests conditionnels pour tandis que / si en python).

Vraiment, pour minimiser la duplication de code, vous souhaitez déplacer l'entrée sur le haut de la boucle, et seulement se casser en bas, faisant votre code quelque chose comme: xxx

ou avec python 3.8 + 's expression d'affectation pour permettre la définition et les tests dans le conditionnel, vous pouvez en faire une tasse plus concise (mais éventuellement plus obscure) avec: xxx


2 commentaires

Comment puis-je déplacer l'elfe? cela ne créerait-il pas une erreur de syntaxe?


@Szymonbartnicki: Juste mis à jour avec l'exemple de code. Pour être clair, j'ai dit de déplacer le corps du elif , pas le elif elle-même (vous supprimez le elif < / Code> Ligne elle-même, ainsi que la pause qui n'est plus dans une boucle).



0
votes

Placez la supposition en haut de la boucle plutôt que dans chaque condition. Cela vous permet de savoir quelle ligne est pritée, il est facile de mettre à jour, et vous ne répétez pas le code.

low, high = 1, 2
goal = randint(low, high)
while True:
    guess = int(input(f'guess a number from {low} to {high}: '))

    if(guess > goal):
        print('too high')
    elif(guess < goal):
        print('too low')
    elif(guess == goal):
        print('Success!')
        break


2 commentaires

La comparaison initiale d'un entier à Aucun est un peu sify, cependant. Une boucle sans une condition explicite serait meilleure, d'autant plus que vous faites un chèque équivalent dans le corps de la boucle.


Bon point. Il n'est vraiment pas nécessaire d'avoir que si nous utilisons break pour sortir de la boucle.



0
votes

Je vais donc essayer de former ma réponse afin que vous puissiez suivre.

from random import randint
goal = randint(1,2)
guess = int(input('guess a number from 1 to 2'))
guessed = False
while not guessed:
    if(guess > goal):
        print('too high')
        guess = int(input('guess a number from 1 to 2'))
    elif(guess < goal):
        print('too low')
        guess = int(input('guess a number from 1 to 2'))
    elif(guess == goal):
        print('☺')
        guessed = True


0 commentaires