返回终止循环

时间:2021-06-15 00:29:35

标签: python-3.x

我正在尝试定义一个以下函数,该函数应该返回两个给定数字之间的所有奇数,但是返回会终止 for 循环,以便仅返回第一个数字。我该如何克服?

def oddNumbers(l,r):
L=[]
for i in range (l,r+1):
    L.append(i)
for i in range (len(L)):
    if L[i] % 2 !=0:
        return(L[i])
    else:
        continue

2 个答案:

答案 0 :(得分:0)

由于您是从 Python 开始的,我建议您阅读 PEP 8 以了解有关 Python 总体风格指南的更多信息。希望你喜欢你的 Python 之旅!

关于您的函数,正如您所提到的,Python 会在找到 return 时终止程序的执行。这不是一个基本概念,但 Python 有一个名为 generators(您可以查看更多 here)的东西,您可以使用它来轻松修复您的函数:

def odd_numbers(l, r):
    for i in range (l, r + 1):
        if i % 2 == 0:
            continue
        else:
            yield i

看到我稍微简化了函数(只需要一个 for 循环)。最重要的部分是从 returnyield 的变化。这是您创建生成器的部分。它基本上是一个不会终止执行的“惰性”(内存高效)返回。

答案 1 :(得分:0)

如果 generators 对你来说太难了,你可以试试这个。

代码:

def odd_numbers(l,r):
    ans = []
    for i in range (l,r+1):
        if i % 2 == 1:
            ans.append(i)
    return ans

print(odd_numbers(1,10))

结果:

[1, 3, 5, 7, 9]

通过使用 list comprehension

更像 Python

代码:

def odd_numbers_list_comprehension(l,r):
    return [i for i in range (l,r+1) if i % 2 == 1]

print(odd_numbers_list_comprehension(1,10))

结果:

[1, 3, 5, 7, 9]
相关问题