基本上我正在创建一个计算器,到目前为止程序要求用户进行加法,减法,乘法和/或除法的操作。然后程序继续创建两个列表,一个包含完整的数字,另一个包含运算符。代码的下一部分应该检查包含运算符的列表是否包含if语句形式的乘法或除法,但if语句失败并且它表示列表包含“*”和“/”时没有,这里的代码不起作用。任何帮助?
if ("*") or ("/") in Oper_NAN:
print("POSITIVE")
else
print("NEGATIVE")
问题是if语句总是返回正数而且从不返回负数,即使两个运算符不在列表Oper_NAN中(Oper_NAN中的所有项都是字符串btw)。我是否将if语句标记为错误?谢谢你的阅读!
答案 0 :(得分:6)
假设:
if ("*") or ("/") in Oper_NAN: print("POSITIVE") else print("NEGATIVE")
or
的每一面都会单独评估。所以你正在考虑其中任何一个是否属实:
("*")
("/") in Oper_NAN
第一个是非零长度字符串,在布尔上下文中始终被评估为True
。因此,if
语句始终为True
,因为True
或其他内容始终为True
。
解决此问题的最简单方法是:
if ("*") in Oper_NAN or ("/") in Oper_NAN:
您也可以使用any()
和生成器表达式来编写它,尽管这对于两个字符来说可能有点过分:
if any(c in Oper_NAN for c in "*/"):
答案 1 :(得分:2)
这个if语句基本上分解为:
if True or (condition): #code
python中的所有内容都有一个真值,非空字符串将评估为True
。
懒惰地评估您的if
条件。首先评估左侧,仅当左侧是False
时才评估右侧。但是,非空字符串始终为True,因此if条件中的代码将始终执行。
布尔逻辑/真值值内容:P or Q
,在以下情况下,P
和Q
将评估为True
。 P
为True
,无论Q是真还是假,或P
为False
且Q
为True
,其他每种情况均为{ {1}}。
如果对此感兴趣的话,那就更多" mathy"它的一面,使用了所谓的真值表。
False
您可以使用:
| P | Q | P v Q |
-----------------
| T | T | T |
-----------------
| T | F | T |
-----------------
| F | T | T |
-----------------
| F | F | F |
-----------------