为什么我的if语句说两个字符串在一个列表中,而它不是?

2024-04-27 19:00:00 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,我正在创建一个计算器,到目前为止,这个程序要求用户进行一个涉及加法、减法、乘法和/或除法的运算。然后程序继续创建两个列表,一个包含完整的数字,另一个包含运算符。代码的下一部分应该检查包含运算符的列表是否以if语句的形式包含乘法或除法,但是if语句失败了,它说列表包含“*”和“/”当它不包含时,下面是不起作用的代码。有什么帮助吗?你知道吗

if ("*") or ("/") in Oper_NAN:
 print("POSITIVE")
else
  print("NEGATIVE")

问题是if语句总是返回正数而从不返回负数,即使这两个运算符不在Oper\u NAN列表中(Oper\u NAN中的所有项都是字符串)。我给if语句贴错标签了吗?谢谢你的阅读!你知道吗


Tags: or代码用户程序列表if运算符数字
2条回答

这个if语句基本上可以分解为以下几点:

if True or (condition): #code

python中的所有内容都有一个真值,非空字符串的计算结果为True。你知道吗

您的if条件将被延迟计算。首先计算左侧,仅当左侧为False时才计算右侧。但是,非空字符串始终为True,因此if条件中的代码将始终执行。你知道吗

布尔逻辑/真值填充:P or Q对于两个状态PQ将在以下情况下计算为TruePTrue,不管Q是真是假,或者PFalseQTrue,每隔一个例子就是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

给出:

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 "*/"):

相关问题 更多 >