3
votes

Exécuter une seule ligne de code dans une boucle while une seule fois

Comment faire exécuter une ligne de code spécifique une seule fois dans une boucle while?

Je veux la ligne: "Bonjour% s, s'il vous plaît entrez votre estimation:"% p1 " pour exécuter une seule fois et pas à chaque fois que le joueur se trompe.

Y a-t-il une commande ou une fonction que je peux utiliser ou dois-je structurer tout le jeu différemment? Y a-t-il une solution simple au programme sous cette forme?

import random

number = random.randint(1,9)

p1 = input("Please enter your name: ")

count = 0

guess = 0

while guess != number and guess != "exit":

    guess = input("Hello %s, please enter your guess: " % p1)

    if guess == "exit":
        break

    guess = int(guess)
    count += 1

    if guess == number:
        print("Correct! It Took you only", count, "tries. :)")
        break
    elif guess > number:
        print("Too high. Try again.")
    elif guess < number:
        print("Too low. Try again.")


0 commentaires

4 Réponses :


2
votes

Vous pouvez créer une variable d'indicateur, e. g.

if print_username:
    guess = input("Hello %s, please enter your guess: " % p1)
    print_username = False
else:
    guess = input("Try a new guess:")

avant la boucle while. À l'intérieur de la boucle, décochez-la après la première itération de la boucle:

print_username = True


1 commentaires

ternaire est plus court - et count fonctionne déjà comme discriminateur - pas besoin de créer un autre drapeau. C'est «plus facile» cependant.



3
votes

Vous devez demander une nouvelle estimation à chaque itération - sinon le code sera bouclé à l'infini (après une première mauvaise estimation) ou se terminera immédiatement.

Pour changer le message, vous pouvez utiliser un ternaire (aka: instruction en ligne if ) à l'intérieur de votre impression pour le rendre conditionnel:

# [start identical]

while guess != number and guess != "exit": 
    guess = input("Hello {}, please enter your guess: ".format(p1) if count == 0 
                  else "Try again: ")

# [rest identical]

Voir Python a-t-il un opérateur conditionnel ternaire?

Le ternaire vérifie la variable count que vous incrémentez et imprime un message s'il est 0 et lors d'exécutions consécutives l'autre texte (car count n'est plus 0 ).

Vous pouvez également passer à des formes plus modernes de mise en forme de chaîne: str.format - fonctionne également pour 2.7


0 commentaires

0
votes

Une façon d'exécuter une instruction seulement x fois dans une boucle while pourrait être d'implémenter un compteur, et d'ajouter une condition if qui vérifie si le compteur


0 commentaires

0
votes

Vous devriez demander le nom d'utilisateur en dehors de la boucle et demander une entrée au début de la boucle.

À l'intérieur de la boucle, vous créez une sortie à la fin et demandez une entrée à l'itération suivante. La même chose fonctionnerait pour la première itération: créer une sortie (en dehors de la boucle) puis demander une entrée (première chose à l'intérieur de la boucle)


0 commentaires