所以我想要的是一个从用户获取元组输入的函数,然后计算出该元组是否包含偶数。我想知道如何使用for或while循环。我试过了,但代码不起作用。我有点得到了一些东西,但它不起作用:
def ifEven(x):
i = -1
if isinstance(x, tuple):
while i < len(x):
for i in x:
i = i + 1
if x[i] % 2 == 0:
return True
else:
return False
答案 0 :(得分:5)
您应该阅读Python中for
语句的文档:https://docs.python.org/2/tutorial/controlflow.html#for-statements。
这是一个有效的代码:
def ifEven(x):
if isinstance(x, tuple):
for i in x:
if i % 2 == 0:
return True
return False
话虽如此,它可以使用Python的生成器表达式重写为单行:
def isEven(x):
return any(v % 2 == 0 for v in x)
答案 1 :(得分:0)
你的缩进看起来有点偏,但这可能只是你复制/粘贴的方式。真正的是python中的“True”而不是“true”,就像你的返回函数一样,这可能也会让你感到烦恼。
答案 2 :(得分:0)
在for
循环中i
本身初始化并开始迭代元组。每次迭代时i
的内容是元组中的元素之一。
让我们深入研究一下。让你的元组为(3, 4, 6, 7)
在第一次迭代中: -
for i in x # i=3
i = i+1 # i = 4
if x[i] %2 == 0 : # x[4] % 2 == 0 => This will give you IndexError, since there is no index 4 in the tuple x(python uses zero based indexing)
因此,您不需要单独递增i
,因为for
会将迭代变量递增到提供的序列的末尾(在您的情况下,它取决于元组{{1}中的最后一个元素})
由于x
拥有元组本身的元素,因此通过递增它,您将增加i
中的值。然后,您将从元组中使用递增的索引访问元素。也就是说,如果元组元素为i
,则首先将其递增1,因此它变为3
,然后检查元组的第四个索引中的元素是否为偶数,即4
是偶数还是不。但是因为我考虑过的元组是长的4,所以它会抛出x[4]
因此,您无需初始化IndexError
,也不需要使用i = -1
,无需在while
循环内增加i
。其他解决方案由塞尔丘克提供。