我认为你误解了
or
操作人员Python首先评估
i1
。如果它是真的(在您的情况下,为非零),那么python执行该块,而不考虑第二个条件。您真正想要的是第一个条件也检查索引是否对列表有效。即应为:
if i1 > tam or i2 > tam:
...
此外,顺便说一句,在python中交换elment的一个常见习惯用法是:
a, b = b, a
因此,您的代码的工作版本可能如下所示:
def troca_valor(lista, i1, i2):
a = lista[:]
tam = len(lista)
if i1 > tam or i2 > tam:
return None
else:
a[i1], a[i2] = lista[i2], lista[i1]
return a
assert troca_valor([0,1,2,3],2,0) == [2,1,0,3]
assert troca_valor(["a", "e", "i", "o", "u"],1,3) == ["a", "o", "i","e", "u"]
assert troca_valor([0,1,2,3],7,3) == None
assert troca_valor([0,1,2,3],2,5) == None