if语句中的几个变量

时间:2016-08-07 23:56:30

标签: python if-statement logical-operators

这可以按预期工作:

if c1 in r':6' or c2 in r':6':
    subst_weight = 1

这不是:

if (c1 or c2) in r':6':
    subst_weight = 1

为什么和有什么不同?目标是确定字符串中是否c1c2。 同样在这里:

使用:

if c1 == '6' or c2 == '6':

不起作用:

if (c1 or c2) == '6':

由于

5 个答案:

答案 0 :(得分:3)

语句one or two如果已定义则会返回onetwo如果one不真实,我也不会看到它不会出现的原因; t使用你的逻辑,因为如果其中任何一个是真的,并且包含在字符串中,它将评估为True

>>> a = "6"
>>> b = ":"
>>> (a or b)
'6'
>>> (b or a)
':'
>>> a = None
>>> (a or b)
':'
>>> b
':'

对于超过2个变量,它将返回第一个真正的变量

>>> a = None
>>> b = None
>>> c = 6
>>> a or b or c
6

但是请注意你的逻辑,你想要检查该字符串中是否有任何变量,你不能使用它,因为c1 ca等于"example"而且#&# 39;那些将被归还if陈述的内容是什么,而不是":6"

答案 1 :(得分:2)

虽然没有真正回答你的原因问题,但这是“我应该怎么做......”的答案。

if any(x in r':6' for x in [c1, c2]):
  something

如果您获得了更多的'c',请事先使用变量来定义列表。

(酱:Check if multiple strings exist in another string

答案 2 :(得分:1)

这个表达式:

if (c1 or c2) in r':6':

从左到右进行评估。假设(c1 or c2)是真实的,它等同于:

if True in r':6':

这显然不是你想要的。如果你想让它适用于多个变量,这将很好地做到:

if any(c in r':6' for c in (c1, c2, c3, c4)):

答案 3 :(得分:1)

这与给予运营商的先例有关。使用()'表示首先评估c1 or c2。它的计算结果为True或False。所以你的陈述转换为

if bool in r':g'

这不是你想要的。

答案 4 :(得分:1)

因为(c1 or c1)计算的是第一个变量的值,如果它不是" false"(表示false,0或空字符串)或第二个变量的值。

编程语言不像#34;自然语言"。