首先,对于 OR
条件语句的一个更正:
你需要这样说:
if x == 0 or y == 0 or z == 0:
原因是“或”将条件分成了单独的逻辑部分。按照您最初的陈述方式,这些部分是:
x
y
z == 0 // or 1, 2, 3 depending on the if statement
最后一部分没问题——例如检查z是否等于0——但前两部分基本上只是说
if x
和
if y
。由于整数除非为0,否则始终计算为
True
,这意味着当
x
或
y
不等于0时,您条件的第一部分始终为
True
(在y的情况下总是如此,因为您有
y = 1
,因为
OR
的工作方式),导致整个条件始终为
True
。
为了避免这种情况,您需要确保条件的所有部分(OR
的每个侧面)都可以独立地理解(您可以通过假装OR
语句的另一侧面不存在来做到这一点)。这就是您可以确认您的OR
条件是否正确定义的方法。
您可以像这样单独编写语句:
if x == 0
if y == 0
if z == 0
这意味着正确的合并方式是使用 OR
关键字:
if x == 0 or y == 0 or z == 0
第二,如何解决问题:
基本上,您想要检查任何变量是否与给定的整数匹配,如果是,就将其分配一个与之一一对应的字母。 您要对某个整数列表执行此操作,以便输出是字母列表。 你可以这样做:
def func(x, y, z):
result = []
for integer, letter in zip([0, 1, 2, 3], ['c', 'd', 'e', 'f']):
if x == integer or y == integer or z == integer:
result.append(letter)
return result
同样地,您可以使用列表推导式来更快地实现相同的结果:
def func(x, y, z):
return [
letter
for integer, letter in zip([0, 1, 2, 3], ['c', 'd', 'e', 'f'])
if x == integer or y == integer or z == integer
]
1
。 - user9011445any
/all
函数。 例如:all([1, 2, 3, 4, False])
将返回 Falseall([True, 1, 2, 3])
将返回 Trueany([False, 0, 0, False])
将返回 Falseany([False, 0, True, False])
将返回 True - edddif x == 0 or 1:
这样做,当然类似于if x or y == 0:
,但对新手来说可能仍然有点困惑。考虑到 "为什么我的 'x == 0 or 1' 不起作用?" 这类问题的数量之多,我更愿意使用 这个问题 作为我们的标准重复目标。 - Aran-Fey0
、0.0
或False
等“假值”进行比较时要特别小心。你很容易写出错误的代码,从而得到“正确”的答案。 - smci