Python if语句中的几个变量

Python if语句中的几个变量,python,if-statement,logical-operators,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 为什么,有什么区别?目标是找出字符串中是c1还是c2。 这里也一样: 作品: if c1 == '6' or c2 == '6': 不起作用: if (c1 or c2) == '6': 谢谢这句话: if (c1 or c2) in r':6': 从左到右计算。假

这将按预期工作:

if c1 in r':6' or c2 in r':6':
    subst_weight = 1
这并不是:

if (c1 or c2) in r':6':
    subst_weight = 1
为什么,有什么区别?目标是找出字符串中是
c1
还是
c2
。 这里也一样:

作品:

if c1 == '6' or c2 == '6':
不起作用:

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

这句话:

if (c1 or c2) in r':6':
从左到右计算。假设
(c1或c2)
是真实的,它等价于:

if True in r':6':
这显然不是你想要的。如果您希望它适用于多个变量,这将很好:

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

这与给运营商的先例有关。使用()表示首先计算
c1或c2
。它的计算结果为真或假。因此,您的语句将转换为

if bool in r':g'

如果定义了
one或two
语句,它将返回
one
,如果
one
语句不是truthy语句,
two
语句将返回
one
语句,我看不出它不符合逻辑的原因,因为如果其中一个语句是truthy语句,并且包含在字符串中,它将计算为
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
可以等于
“example”
,如果
语句不在
”:6“

,因为
(c1或c1)中,这就是返回到
的内容
如果第一个变量的值不是“false”(表示false、0或空字符串)或第二个变量的值,则计算为第一个变量的值


编程语言的工作方式与“自然语言”不同。

虽然没有确切地回答您为什么要这样做的问题,但这是对“那么我应该如何…”的回答

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


(sause:)

或链的计算结果为第一个truthy操作数(或序列中的最后一个,如果没有truthy操作数),而不是“True”。谢谢,我知道了。有没有办法让它不那么难看?如果你有更多的变量,它可能会变得非常乏味。这样做,只需在列表中填入要检查的变量即可:
如果有(c在txt中表示c在[c1,c2,…]):
“defined”在本上下文中表示“truthy”。如果c1是真的,但不是r':6'的子字符串,则将跳过If语句。谢谢,这很有帮助。还是有点难看。
if any(x in r':6' for x in [c1, c2]):
  something