Problème: j'essaie à nouveau d'appeler ask_user () si l'utilisateur entre des mots! = 'encrypt' ou 'decrypt', mais le même message d'erreur apparaît lorsque l'entrée EST correcte.
# test to support above observ. for n in range(4): if n != 2 or n != 3: print('me') else: print(n)
Il semble que l'utilisation de plus d'une instruction! = sur la même ligne ne fonctionne pas comme je l'avais imaginé:
def ask_user(): while True: mode = input("Would you like to encrypt or decrypt: ") if mode != 'encrypt' or mode != 'decrypt': print("Please retry; you must type lowercase. \n") ask_user() else: message = input("Enter your message: ")
Comment changer le code pour résoudre ce problème problème?
3 Réponses :
n! = 2 ou n! = 3
sera toujours vrai. Si n
est 2
alors ce n'est pas 3
. Toutes les autres valeurs ne sont pas 2
.
Vous vouliez n! = 2 et n! = 3
.
Votre problème est que vous utilisez ou
au lieu de et
.
Si vous pensez à la façon dont le code est interprété:
Disons que mode = "encrypt"
. Étape par étape:
mode! = 'encrypt'
donne la valeur false
. Tout va bien jusqu'à présent.
mode! = 'decrypt'
, cependant, prend la valeur true
. C'est un problème.
L'expression finale envoyée au if
sera: false ou true
. Ceci, finalement, évalue à true
, provoquant la saisie du bloc if
.
Le changer en et
signifie que les deux modes invalides devront être vérifiés true
pour que le bloc soit saisi.
Merci qui m'explique beaucoup @pydude
Vous devez utiliser et
, pas ou
. Comme n
ne sera jamais égal à 3 et 4, l'instruction if
qui incorpore ou
se résoudra toujours en True code >
mode pas en ('encrypt', 'decrypt')
en.wikipedia.org/wiki/De_Morgan%27s_laws
le problème est que si
n
reçoit réellement la valeur 2, len! = 3
devient vrai! et sin
est fourni la valeur 3,n! = 2
devient vrai! il est impossible de faire en sorte que les deux conditions aboutissent à un faux ensemble! (tl; dr avec négation, il faut vraiment réfléchir à la façon dont les conditionnelles se comportent avecou
)Double possible de Comment avoir plusieurs conditions pour une instruction if en python
D'accord, sérieusement, avons-nous un double pour ce genre de questions?
@tripleee Je ne pense pas que cela réponde à la question. L'OP est clairement confus au sujet de la logique booléenne; ils ne demandent pas vraiment comment implémenter plusieurs conditions.
@ Aran-Fey Il doit y en avoir un quelque part. C'est une question courante.
Double possible de stackoverflow .com / questions / 6838238 /…
@ tripleee oh allez, je ne demande pas une solution "efficace" impliquant des boucles for - qui ne me semble pas efficace ici ...
Programme Python prenant deux entrées entières trouver pair et impair est similaire, mais je n'appellerais pas cela un doublon.