为什么我的if语句说如果两个字符串不在列表中?

Enc*_*ons 0 python python-3.x

基本上我正在创建一个计算器,到目前为止该程序要求用户进行加法,减法,乘法和/或除法的操作.然后程序继续创建两个列表,一个包含完整的数字,另一个包含运算符.代码的下一部分应该检查包含运算符的列表是否包含if语句形式的乘法或除法,但if语句失败并且它表示列表包含"*"和"/"时没有,这里的代码不起作用.任何帮助?

if ("*") or ("/") in Oper_NAN:
 print("POSITIVE")
else
  print("NEGATIVE")
Run Code Online (Sandbox Code Playgroud)

问题是if语句总是返回正数而且从不返回负数,即使两个运算符不在列表Oper_NAN中(Oper_NAN中的所有项都是字符串btw).我是否将if语句标记为错误?谢谢你的阅读!

kin*_*all 6

鉴于:

if ("*") or ("/") in Oper_NAN: print("POSITIVE") else print("NEGATIVE")
Run Code Online (Sandbox Code Playgroud)

您的每一面or都是单独评估的.所以你正在考虑其中任何一个是否属实:

("*")
("/") in Oper_NAN
Run Code Online (Sandbox Code Playgroud)

第一个是非零长度字符串,始终True在布尔上下文中进行求值.所以你的if陈述总是如此True,因为True或任何东西总是如此True.

解决这个问题最简单的方法是:

 if ("*") in Oper_NAN or ("/") in Oper_NAN:
Run Code Online (Sandbox Code Playgroud)

您也可以使用any()和生成器表达式来编写它,尽管这对于两个字符来说可能有点过分:

if any(c in Oper_NAN for c in "*/"):
Run Code Online (Sandbox Code Playgroud)