我正在尝试定义一个下面的函数,它应该返回两个给定数字之间的所有奇数,但是返回会终止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发布于 2021-06-15 09:05:13
由于您是从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循环)。最重要的部分是从return到yield的更改。这就是创建生成器的部分。它基本上是一个不会终止执行的“惰性”(内存效率)返回。
发布于 2021-06-15 09:30:29
如果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]一种更具pythonic风格的方法是使用list comprehension
代码:
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]https://stackoverflow.com/questions/67978570
复制相似问题