是否需要另一个循环以不同的条件打印反向?



我有下面的程序,在给定的范围内打印偶数。但是,我想这样做,如果第二个数字小于第一个数字,例如end <开始,然后以相反的顺序打印偶数。>

我在想,基于这里的内容,我们需要为每个条件分别设置两个循环,但是是否有更简单的方法来实现这一点?

start = int (input("1st number: "))
end = int (input("2nd number: "))
for num in range(start, end + 1):
    if num % 2 == 0 and start < end:
        print (num, end = " ")
    #elif num % 2 == 0 and end > start:
        #print (num, end = " ")

你只需要颠倒范围顺序来实现你想要的:

start = int (input("1st number: "))                                                                                                                                                                                                                           
end = int (input("2nd number: "))
rng = range(start, end + 1) if start < end else range(start, end -1, -1)
for num in rng:
    if num % 2 == 0:
        print (num, end = " ")

rng = range(start, end + 1) if start < end else range(start, end -1, -1)完成了所有的魔法:

1st number: 10
2nd number: 1
10 8 6 4 2
1st number: 1
2nd number: 10
2 4 6 8 10 

别人回答的一些变通方法:

print(*[n for n in (range(start,end+1), range(start,end-1,-1))[start>end] if not n % 2])

你只需要首先计算范围方向(不需要测试偶/奇属性,只需根据方向使用2或-2的步骤)

start = 20
end = 30
# uncomment to swap start & end
#start,end = end,start
# compute direction. 2 or -2
direction = 2 if (end-start)>0 else -2
# add direction to end works in both directions
for num in range(start, end + direction,direction):
    print(num,end=" ")

打印:

20 22 24 26 28 30 

现在,如果你交换开始和结束,它打印:

30 28 26 24 22 20 

最新更新