【问题标题】:How to print a sequence stacked in a "pyramid" with alternating sort?如何使用交替排序打印堆叠在“金字塔”中的序列?
【发布时间】:2018-10-17 07:38:57
【问题描述】:
我想在金字塔中打印以下整数序列(奇数行升序排序,偶数行降序排序)。如果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
【问题讨论】:
标签:
python
python-3.x
printing
range
sequence
【解决方案1】:
您需要某种方式来跟踪您在打印每一行时在序列中的位置,生成整个序列,然后将其分块成行,或者......(可能的方法列表不胜枚举)。
下面是一个相当简单的方法,它只跟踪范围起始值,根据行号计算范围终止值,并反转偶数行。
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
【解决方案2】:
使用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