如何实现垂直方向递增数值的水平金字塔(Python)
问题:实现特定数字金字塔的Python函数
我需要编写一个Python函数triangle,参数height代表金字塔的底边长度,要求生成的金字塔数字先沿垂直方向递增,再按水平方向填充。我写了一份代码,但当height大于3时输出结果不符合预期。
原代码
def triangle(height): count=0 for i in range(height//2): count+=1 for j in range(i+1): print(count+count*j,end=' ') print() for i in range((height-1)//2,-1,-1): count+=1 for j in range(i+1): print(count+count*j,end=' ') print()
期望输出示例
调用triangle(4)时,输出应为:
1 2 5 3 6 4
调用triangle(5)时,输出应为:
1 2 6 3 7 9 4 8 5
解决方案
原代码的数字生成逻辑错误,没有匹配示例中的填充规律。观察示例可以发现,数字是按列优先的顺序填充:先填满第一列(1到height),再填第二列(height+1开始),以此类推,最后每一行收集对应列的数字。
通过分析数字的位置规律,可以推导出第i行(从1开始计数)第k个数字的计算公式:
(k-1)*(height - k + 1) + i
基于此规律,编写正确的函数如下:
def triangle(height): for i in range(1, height + 1): # 当前行的数字个数 num = min(i, height - i + 1) # 生成当前行的所有数字 row_nums = [(k-1)*(height - k + 1) + i for k in range(1, num + 1)] # 按格式打印,前面加4个空格对齐 print(" " + " ".join(map(str, row_nums)))
测试该函数,输出完全符合预期。
内容的提问来源于stack exchange,提问作者Elden King
相关产品推荐
相关产品推荐

