Я хочу напечатать следующую последовательность целых чисел в пирамиде (нечетные строки отсортированы по возрастанию, четные строки отсортированы по убыванию). Если S=4
, он должен напечатать четыре строки и так далее.
Ожидаемый результат:
1
3 2
4 5 6
10 9 8 7
Я попробовал следующий код, но он произвел неверный вывод.
S=int(input())
for i in range(1,S+1):
y=i+(i-1)
if i%2!=0:
print(*range(i,y+1))
elif i%2==0:
print(*range(y,i-1,-1))
# Output:
# 1
# 3 2
# 3 4 5
# 7 6 5 4
Использование itertools.count
и просто реверсирование подсписок перед печатью на четных строках
из импорта импорта itertools
s = 4
l = count(1)
for i in range(1, s+1):
temp = []
for j in range(i):
temp.append(next(l))
if i % 2:
print(' '.join(map(str, temp)))
else:
print(' '.join(map(str, temp[::-1])))
1 3 2 4 5 6 10 9 8 7
Вам нужно каким-то образом отслеживать, где вы находитесь в последовательности, когда печатаете каждую строку, генерируете всю последовательность, а затем разбиваете ее на строки или... (список возможных подходов продолжается и продолжается).
Ниже представлен довольно простой подход, который просто отслеживает значение начала диапазона, вычисляет значение остановки диапазона на основе номера строки и меняет даже четные строки.
rows = int(input())
start = 1
for n in range(1, rows + 1):
stop = int((n * (n + 1)) / 2) + 1
row = range(start, stop) if n % 2 else reversed(range(start, stop))
start = stop
print(*row)
# If rows input is 4, then output:
# 1
# 3 2
# 4 5 6
# 10 9 8 7