Python 为什么我的if语句说两个字符串在一个列表中,而它不是?
基本上,我正在创建一个计算器,到目前为止,该程序要求用户进行一个涉及加法、减法、乘法和/或除法的运算。然后程序继续创建两个列表,一个包含完整的数字,另一个包含运算符。代码的下一部分应该检查包含运算符的列表是否包含if语句形式的乘法或除法,但if语句失败,它表示列表包含“*”和“/”,如果不包含,则代码无效。有什么帮助吗Python 为什么我的if语句说两个字符串在一个列表中,而它不是?,python,python-3.x,Python,Python 3.x,基本上,我正在创建一个计算器,到目前为止,该程序要求用户进行一个涉及加法、减法、乘法和/或除法的运算。然后程序继续创建两个列表,一个包含完整的数字,另一个包含运算符。代码的下一部分应该检查包含运算符的列表是否包含if语句形式的乘法或除法,但if语句失败,它表示列表包含“*”和“/”,如果不包含,则代码无效。有什么帮助吗 if ("*") or ("/") in Oper_NAN: print("POSITIVE") else print("NEGATIVE") 问题是if语句总是返回正数
if ("*") or ("/") in Oper_NAN:
print("POSITIVE")
else
print("NEGATIVE")
问题是if语句总是返回正数而从不返回负数,即使这两个运算符不在Oper_NAN列表中(顺便说一句,Oper_NAN中的所有项都是字符串)。我是否将if语句标记为错误?谢谢你的阅读 给定:
if ("*") or ("/") in Oper_NAN: print("POSITIVE") else print("NEGATIVE")
或
的每一面都会单独评估。因此,您正在考虑以下两种情况是否属实:
("*")
("/") 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 "*/"):
此if语句基本上可分解为以下内容:
if True or (condition): #code
python中的所有内容都有一个真值,非空字符串的计算结果将为True
如果条件被延迟评估,您的。首先计算左侧,仅当左侧为False
时,才会计算右侧。但是,非空字符串始终为True,因此将始终执行if条件中的代码
布尔逻辑/真值填充:p或Q
对于两个状态p
和Q
将在以下情况下计算为True
P
是True
,无论Q是真是假,或者P
是false
,Q
是True
每隔一种情况都是false
如果有兴趣,这里有更“数学”的一面,使用一个被称为真值表的东西
| P | Q | P v Q |
-----------------
| T | T | T |
-----------------
| T | F | T |
-----------------
| F | T | T |
-----------------
| F | F | F |
-----------------
您可以使用:
if "*" in Oper_NAN or "/" in Oper_NAN
啊!谢谢你的快速回复。所以基本上,我不能同时检查它们?如果是这样的话,谢谢你简单的解决办法,我以后会记住的