这可以按预期工作:
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':
由于
答案 0 :(得分:3)
语句one or two
如果已定义则会返回one
,two
如果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',请事先使用变量来定义列表。
答案 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;自然语言"。