Python:找出元组是否包含偶数的函数?

时间:2015-02-11 00:33:34

标签: python python-3.x for-loop

所以我想要的是一个从用户获取元组输入的函数,然后计算出该元组是否包含偶数。我想知道如何使用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 

3 个答案:

答案 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。其他解决方案由塞尔丘克提供。