Предположим, вы хотите перебрать все целые числа между двумя границами и b
(включительно), но не знаете заранее, как a
сравнивается с b
. Ожидаемое поведение:Цитирование через интервал в любом направлении
def run(a, b):
if a < b:
for i in range(a, b + 1):
print i,
elif a > b:
for i in range(a, b - 1, -1):
print i,
else:
print a
print
run(3, 6)
run(6, 3)
run(5, 5)
Результат:
3 4 5 6
6 5 4 3
5
Есть ли более элегантное решение? Ниже более кратким, но терпит неудачу, когда a == b
:
def run(a, b):
for i in range(a, b + cmp(b, a), cmp(b, a)):
print i,
print
run(3, 6)
run(6, 3)
run(5, 5)
Результат:
3 4 5 6
6 5 4 3
(...)
ValueError: range() step argument must not be zero
'для i в диапазоне (min ((a, b)), max ((a, b)) + 1)' было бы самым очевидным способом – TemporalWolf
@TemporalWolf Это дает '3 4 5 6' дважды. – Aristide
Да, я сделал предположение о том, что вы хотели, чтобы они восходили. – TemporalWolf