如何使用!=在if / else子句中正确签名?

时间:2019-03-24 17:55:08

标签: python comparison equality boolean-logic

问题:如果用户输入单词!='encrypt'或'decrypt',但我尝试再次调用ask_user(),但输入正确时会出现相同的错误消息。

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:   ")

似乎在同一行上使用多个!=语句并没有达到我的想象:

# test to support above observ.
for n in range(4):
    if n != 2 or n != 3:
        print('me')
    else:
        print(n)

如何更改代码以解决此问题?

3 个答案:

答案 0 :(得分:2)

n != 2 or n != 3将始终为真。如果n2,则不是3。所有其他值都不是2

您打算使用n != 2 and n != 3

答案 1 :(得分:2)

您的问题是您使用的是.square而不是or。 如果您考虑如何解释代码:

我们说and。逐步:

mode="encrypt"的值为mode != 'encrypt'。到目前为止一切都很好。

false的取值为mode != 'decrypt'。这是个问题。

发送到true的最终表达式将是:if。最后,这将求值为false or true,从而导致输入true块。

将其更改为if意味着必须and检查两种无效模式才能输入该块。

答案 2 :(得分:0)

您需要使用and,而不是or。因为n永远不会等于3和4,所以合并了if的{​​{1}}语句将始终解析为or