2
votes

Comment utiliser! = Se connecter correctement à la clause if / else?

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?


10 commentaires

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, le n! = 3 devient vrai! et si n 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 avec ou )


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.


3 Réponses :


2
votes

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 .


0 commentaires

2
votes

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.


1 commentaires

Merci qui m'explique beaucoup @pydude



0
votes

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


0 commentaires