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
答案 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