所以,我有这个:
while cancer[j] != ("l"or"r"or"c")
当它在字符串之间有一些r和c时,它停在第一个“l”的路上,它的表现就像没有“或”而只有“l”。
例如我的字符串就是这个:
c56r36c20l80c23l180c23l20c55r70
然后它返回:
c56r36c20
它在第一个“l”处停止,在路上跳过“c”和“r”。
答案 0 :(得分:1)
它正常工作;它只是你认为应该如何工作:
("l" or "r" or "c")
返回该列表中的第一个非虚假项目(bool(item) is true
),如果没有,则返回false。这意味着它将返回"l"
。
所以你的while循环实际上是:
while cancer[j] != "l":
你想要的是:
while cancer not in ('l', 'r', 'c')
或
while not cancer in ('l', 'r', 'c')
两者几乎都是一样的。
答案 1 :(得分:1)
通常,如果'或'语句中的某个表达式求值为True
,则表达式的其余部分根本不会被计算。因此,当在字符串中遇到第一个'l'时,while条件将在那里中断。
你应该有类似的东西:
while cancer[j] not in ('l', 'r', 'c'):