我在自学python,我试图理解下面的示例失败的原因
#!/usr/bin/python3.4
vWHEN = sys.argv[1]
print (vWHEN)
if vWHEN != "before" or vWHEN != "after":
exit("ERROR: " + vWHEN + " is invalid. Should be: 'before' or 'after'")
结果如下:
$ ptest.py before
before
ERROR: before is invalid. Should be: 'before' or 'after'
但以下方法确实有效:
#!/usr/bin/python3.4
vWHEN = sys.argv[1]
if vWHEN == "before" or vWHEN == "after":
print (vWHEN)
else:
exit("ERROR: " + vWHEN + " is invalid. Should be: 'before' or 'after'")
输出:
$ ptest.py before
before
您正在处理一个逻辑错误。让我们从当前版本(第二版)开始:
这就像英语一样,如果
a
是"before"
或"after"
,则条件有效。但是,您的第一个(不正确)版本是:这将始终是
True
,因为a
不能有2个值,所以or
的一个分支将始终是True
解决方案:
让我们应用De Morgan's Laws来看看如何反转条件逻辑。来表示正确案例的反向逻辑
我们需要
根据法律规定
因此,第一个
if
语句的正确版本应该是:旁注:要简化针对多个值的测试,请尝试使用以下方法:
或
它读起来容易得多,因此也更容易推理
vWHEN != "before" or vWHEN != "after"
将始终为真。任何字符串都不等于“before”或“after”(例如,“before”不等于“after”)您应该使用和布尔运算符-仅当用户输入的“before”和“after”都不需要出错时:
我怀疑你想改变你的逻辑
当您使用
or
而不是and
时,无论vWHEN
的值是多少,它都将始终进入if
主体相关问题 更多 >
编程相关推荐