0
votes

Valider l'entrée en python

im essayant d'écrire un programme de ciseaux de papier rock où le choix est de 1, 2 et 3. Je veux valider l'entrée de sorte que toute entrée autre que ces trois choix imprimera un message indiquant que l'entrée est valide et demande l'utilisateur de réinscrire les données. Cependant, je l'ai quelque peu travaillé, même si je saisis 1 2 ou 3, il imprimera toujours le message et demandera plus d'informations.

print("This program simulates a 'rock paper scissor' game.")
print("The rules are as follows: rock beats scissor, paper beats rock, and scissor beats paper. \n")

print("This program simulates a 'rock paper scissor' game.")
print("The rules are as follows: rock beats scissor, paper beats rock, and scissor beats paper. \n")

#get user input
user_choice = input("Please choose from the following:  \n"
                    " 1 for scissor \n"
                    " 2 for rock \n"
                    " 3 for paper. \n")

#validate input so user only enters 1, 2, or 3
while user_choice != 1 or user_choice != 2 or user_choice != 3:
    user_choice = input("Please enter only '1' for scissor, '2' for rock, or '3' for paper: ")

#convert input to int 
int_user_choice = int(user_choice)


2 commentaires

entrée renvoie un str , essayez pendant que user_choice! = "1" ...


Est-ce que cela répond à votre question? Comment puis-je lire les entrées en tant que chiffres?


4 Réponses :


1
votes

Vous devrez convertir l'entrée d'une chaîne à un entier si vous souhaitez le comparer avec des entiers plus tard. Et vous pouvez utiliser une liste si vous souhaitez éviter de répéter la logique encore et encore.

while user_choice not in [1,2,3]


0 commentaires

1
votes

Après avoir reçu l'entrée, vous pouvez vérifier si l'entrée est un et c'est dans la plage valide et si l'une des deux conditions ne tient pas, demandez à nouveau une entrée pour une entrée.

valid_choices = {'1','2','3'}
while not user_choice in valid_choices:
  user_choice = input("Please enter only '1' for scissor, '2' for rock, or '3' for paper: ")


0 commentaires

1
votes

Faites toute l'invite / validation en une seule boucle. L'utilisateur ne veut pas continuer tant que la condition n'est satisfaite

print("This program simulates a 'rock paper scissor' game.")
print("The rules are as follows: rock beats scissor, paper beats rock, and scissor beats paper. \n")

print("This program simulates a 'rock paper scissor' game.")
print("The rules are as follows: rock beats scissor, paper beats rock, and scissor beats paper. \n")

#get user input
while True:
    user_choice = input("Please choose from the following:  \n"
                    " 1 for scissor \n"
                    " 2 for rock \n"
                    " 3 for paper. \n")

    #validate input so user only enters 1, 2, or 3
    if user_choice in ["1", "2", "3"]:
        int_user_choice = int(user_choice)
        break


0 commentaires

1
votes

Le vôtre n'est pas correct car l'entrée renvoie la chaîne de type et vous vérifiez avec TYPE INT, modifiez donc le type de la boucle. De plus, vous ne pouvez pas utiliser ou code> si vous souhaitez terminer lorsque l'un des cas est vrai, dans ce cas, vous devez utiliser et code>.

print("This program simulates a 'rock paper scissor' game.")
print("The rules are as follows: rock beats scissor, paper beats rock, and scissor beats paper. \n")

print("This program simulates a 'rock paper scissor' game.")
print("The rules are as follows: rock beats scissor, paper beats rock, and scissor beats paper. \n")

#get user input
user_choice = input("Please choose from the following:  \n"
                    " 1 for scissor \n"
                    " 2 for rock \n"
                    " 3 for paper. \n")

#validate input so user only enters 1, 2, or 3

while user_choice != '1' and user_choice != '2' and user_choice != '3':
    user_choice = input("Please enter only '1' for scissor, '2' for rock, or '3' for paper: ")

#convert input to int
int_user_choice = int(user_choice)


0 commentaires