Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的if语句说两个字符串在一个列表中,而它不是?_Python_Python 3.x - Fatal编程技术网

Python 为什么我的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语句形式的乘法或除法,但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

啊!谢谢你的快速回复。所以基本上,我不能同时检查它们?如果是这样的话,谢谢你简单的解决办法,我以后会记住的