You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现垂直方向递增数值的水平金字塔(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 11:03:15