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.
4 Réponses :
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"):
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 .
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."
Eh bien, supposons que l'utilisateur saisisse "y" .
while True et rencontrera la condition if choice! = "y" ou choice! = "n" , où choice == 'y' , est vrai ou faux?
"y"! = "y" est faux, vérifiez la condition suivante "y"! = "n" est vrai, donc toute la condition est vraie 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)
Merci beaucoup, je le comprends maintenant.
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
Au lieu de
ou, utilisezet. À l'heure actuelle, l'instructionifcorrespond 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éstret j'ai oublié de supprimer les parenthèses.