【问题标题】:How to use != sign correctly in if/else clause?如何在 if/else 子句中正确使用 != 签名?
【发布时间】:2019-08-15 01:03:11
【问题描述】:

问题:如果用户输入单词 != '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)

我应该如何更改代码来解决这个问题?

【问题讨论】:

  • mode not in ('encrypt', 'decrypt')
  • 问题是,如果n 实际上被提供了值2,那么n!=3 就变为真了!如果n 提供值为3,则n!=2 变为真!不可能让这两个条件一起导致错误! (tl;dr with negation,你真的需要考虑条件句在or 下的行为)
  • @tripleee 我认为这不能回答问题。 OP 显然对布尔逻辑感到困惑;他们并不是真的询问如何实现多个条件。
  • @tripleee 哦,拜托,我不是要一个涉及 for 循环的“高效”解决方案——这对我来说似乎效率不高......

标签: python comparison equality boolean-logic


【解决方案1】:

n != 2 or n != 3 永远为真。如果n2,那么它就不是3。所有其他值都不是2

你打算n != 2 and n != 3

【讨论】:

    【解决方案2】:

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

    假设mode="encrypt"。一步一步:

    mode != 'encrypt' 的计算结果为 false。到目前为止一切顺利。

    mode != 'decrypt' 但是,计算结果为true。这是个问题。

    发送到if 的最终表达式将是:false or true。最后,计算结果为true,导致进入if 块。

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

    【讨论】:

    • 谢谢你给我解释了很多@pydude
    【解决方案3】:

    您需要使用and,而不是or。因为n 永远不会等于3 和4,所以包含orif 语句将始终解析为True

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      • 2016-03-20
      • 1970-01-01
      相关资源
      最近更新 更多