1
votes

Demander une entrée jusqu'à ce que la chaîne exacte soit un problème d'entrée

Voici mon code Python:

choice = (input("Are you signed up? (y/n) "))

print(choice)

while True:
    if choice != "y" or choice != "n":
        choice = (input("Are you signed up? (y/n) "))
        print(choice)
    else:
        break

Je veux que le programme continue de demander à l'utilisateur d'entrer jusqu'à ce qu'il entre "y" ou "n". Le problème est qu'il n'accepte jamais l'entrée, même s'ils entrent "y" ou "n".

Quand j'imprime ce qu'ils ont entré (c'est un vrai mot), cela dit que c'est "y" ou " n "mais il ne l'accepte toujours pas.

J'utilise Python depuis un certain temps maintenant et j'essaye juste quelque chose aujourd'hui mais je ne peux pas comprendre cela pour une raison quelconque J'ai l'impression que c'est quelque chose de simple et d'évident, mais je suis stupide de le remarquer.

Quelqu'un peut-il m'expliquer cela, s'il vous plaît? Merci.


3 commentaires

Au lieu de ou , utilisez et . À l'heure actuelle, l'instruction if correspond toujours. Si l'utilisateur entre "y", choice! = "N" est toujours vrai.


N'utilisez pas de parenthèses inutiles autour de votre appel input . Ils sont incohérents et déroutants.


Merci à vous deux. C'était str (input (...)) mais j'ai supprimé str et j'ai oublié de supprimer les parenthèses.


4 Réponses :


1
votes

Vous avez besoin de et au lieu de ou dans ce cas.

    if choice not in "Randy!" or choice in "Rad!":

ou si vous préférez, vous pouvez le faire

XXX

Vous pouvez également faire:

    if choice not in "yn":

ou parce que ce sont chacun des caractères 1 que vous pouvez faire:

    if choice not in ("y", "n"):    # THIS ONE IS PROBABLY THE BEST

Vous pouvez également faire:

    if not (choice == "y" or choice == "n"):


0 commentaires

1
votes

Puisque choice ne peut pas être 'y' et 'n' en même temps, l'un des choice! = 'y ' et choice! =' n ' est toujours vrai.

Vous devez utiliser et , pas ou .


2 commentaires

Merci, cela fonctionne, mais cela n'a pas de sens pour moi pourquoi ce serait et . Exemple: "Continuez à frapper ceci jusqu'à ce qu'il devienne rouge OU jusqu'à ce qu'il devienne violet.", Ce qui signifie que vous devriez arrêter de le frapper une fois que l'un de ceux-ci est satisfait. "Continuez à le frapper jusqu'à ce qu'il devienne rouge ET jusqu'à ce qu'il devienne violet.", Ce qui signifie que vous devriez arrêter de le frapper une fois qu'il est à la fois rouge et violet.


@ itzn4utiluss C'est plus comme "continuez à frapper ceci pendant qu'il n'est pas devenu rouge et n'est pas non plus devenu violet."



1
votes

Eh bien, supposons que l'utilisateur saisisse "y" .

  1. Votre code entrera dans la boucle while True et rencontrera la condition if
  2. Est-ce que choice! = "y" ou choice! = "n" , où choice == 'y' , est vrai ou faux?
    1. "y"! = "y" est faux, vérifiez la condition suivante
    2. "y"! = "n" est vrai, donc toute la condition est vraie
  3. Demander à nouveau une contribution
  4. Aller à (1)

La même chose se produit pour choice == "n" .


Cependant, vous voulez une condition qui dit not (choice = = "y" ou choix == "n") . Conformément aux lois de De Morgan :

(not (choice == "y")) and (not (choice == "n"))
=> choice != "y" and choice != "n"

Votre code se traduit donc par:

not (a or b) == (not a) and (not b)


1 commentaires

Merci beaucoup, je le comprends maintenant.



1
votes

Comme tout le monde a déjà signalé le problème dans votre code, j'ajoute simplement une version nettoyée de votre code.

while True:
    choice = (input("Are you signed up? (y/n) "))

    if choice == "y" or choice == "n":
        print(f"Your choice is {choice}")
        break


0 commentaires