这段代码确定奇数是否在数字列表中有什么问题?

时间:2017-11-19 19:33:57

标签: python python-3.x

def is_odd(number):
    """The function returns True if the number is odd, 
    False otherwise.
    """
    if number %  2 == 1:
        return True
    return False


def contains_odd_number(number_list):
    """The function returns True if number_list contains
    at least one odd number, False otherwise.
    """
    for num in number_list:
        if is_odd(num) != True:
            return False
        return True

5 个答案:

答案 0 :(得分:3)

这似乎过于复杂&破碎。一个大问题是循环中的缩进。

好吧,抓一下,然后使用any编写函数如下:

def contains_odd_number(number_list):
    return any(x % 2 for x in number_list)

这更像是pythonic&高性能。只要在列表中找到奇数,any就会停止。

答案 1 :(得分:2)

扭转逻辑。你知道当你找到第一个时有一个奇数,但你不知道当你找到第一个偶数时,它不是奇数:

for num in number_list:
    if is_odd(num):
        return True
return False  # only return False after you checked all

答案 2 :(得分:2)

你可以简化你的问题,不要害怕布尔值,只需返回它们:

is_odd中,您可以直接返回结果

def is_odd(number):
    """The function returns True if the number is odd, 
    False otherwise.
    """
    return number %  2 != 0

在这里,只需要一点理解,并充分利用任何一个:

def contains_odd_number(number_list):
    """The function returns True if number_list contains
    at least one odd number, False otherwise.
    """
    return(any(is_odd(x) for x in number_list))

print(contains_odd_number([2,2,2,1]))

- >真

答案 3 :(得分:0)

这是

中的逻辑错误
for num in number_list:
        if is_odd(num) != True:
            return False
        return True

如果在列表中找到奇数,你可以使用你设置为1的标志来解决这个问题,否则如果在列表的迭代中找不到奇数,它就会保持为0

当遍历所有列表元素的迭代完成后,您查询该标志,如果它是1,则列表包含od编号

        flag = 0
for num in number_list:
        if is_odd(num) == True:
            flag = 1

if flag == 1

    print ...

答案 4 :(得分:0)

contains_odd_number()在for循环的第一次迭代后返回。 为了让它循环遍历整个列表,您需要将默认返回值移出循环。

导致以下结果:

def contains_odd_number(number_list):
    """The function returns True if number_list contains
    at least one odd number, False otherwise.
    """
    for num in number_list:
        if is_odd(num) != True:
            return False
    return True