问题:编写一个接受两个正整数a和b(a小于b)的函数,并返回一个列表,该列表包含a和b之间的所有奇数(包括a和包括b,如果适用),按降序排列。
程序:
def odd(a,b):
c=[]
for i in range(a,b+1):
if i%2==1:
c.append(i)
c.sort()
c.reverse()
return c
澄清:只有当我使用c.sort然后反转它时才能得到正确的输出。但c.reverse
应该给出正确的输出,对吧?当我“不排序”并反转列表时,输出列表的顺序不正确,尽管元素按排序顺序进入列表。谁能解释我为什么?
其他人指出你的错误。我想提供一个更高效的解决方案:
def odd(a,b):
return list(range(b if b%2 else b-1,a-1,-2))
print(odd(1,10))
print(odd(1,11))
结果:
[9, 7, 5, 3, 1]
[11, 9, 7, 5, 3, 1]
它使用range
反向两步,并确保它以奇数开头。
可以在循环之后调用list.append()
而不是循环的每次迭代。 return语句也应该在循环之外。
def odd(a,b):
c=[]
for i in range(a,b+1):
if i%2==1:
c.append(i)
c.reverse()
return c
print(odd(1,10))
# Returns [9, 7, 5, 3, 1]