Python忽略了#34;如果(变量)不是:"

时间:2017-05-21 17:47:34

标签: python

if AMPM is not "AM" or AMPM is not "PM":
    AMPM = input('You entered an incorrect value for AMPM. Please, try again: ')

它完全忽略了"不是"部分。我已经尝试过了!=我得到了相同的结果,它只是继续if语句。难道我做错了什么?

完整代码:https://pastebin.com/t6WmqPTr

4 个答案:

答案 0 :(得分:4)

表达式是完全错误的,但无论如何我会建议更惯用的方法:

if AMPM not in ('AM', 'PM'):
    # statement

通过这种方式,如果AMPM恰好设置为" foo"

,则可以保证您获得正确的结果。

答案 1 :(得分:0)

因为AMPM不能兼顾" AM"和" PM",将始终运行输入语句。您应该使用and代替or。此外,您应该使用!=而不是is not。虽然is not在某些情况下会因字符串实习而起作用。

答案 2 :(得分:0)

我修好了!概要:

它看到AMPM是,所以没关系。然后它看到AMPM不是PM,所以它继续。这是我的解决方案:

if AMPM != "AM":
  if AMPM != "PM":
    AMPM = input('You entered an incorrect value for AMPM. Please, try again: ')

答案 3 :(得分:0)

查看完整代码,您有以下内容:

if AMPM == "Am" or AMPM == "am":
    AMPM = "AM"
if AMPM == "Pm" or AMPM == "pm":
    AMPM = "PM"

if AMPM is not "AM" or AMPM is not "PM":
    AMPM = input('You entered an incorrect value for AMPM. Please, try again: ')

您已经检查了上面所需的一切!您询问的部分是您在其他所有方法都失败时要执行的操作。这就是else子句的用途。因此,您可以修复代码(并使其更加干净和可读),如下所示:

if AMPM == "Am" or AMPM == "am":
    AMPM = "AM"

elif AMPM == "Pm" or AMPM == "pm":
    AMPM = "PM"

else:
    AMPM = input('You entered an incorrect value for AMPM. Please, try again: ') 

如果这是新的 - elif表示'else-if'。如果第一个if被评估为false,程序将检查其后的elif。如果所有子句都为假,则执行else部分。