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

Python帕斯卡三角生成器出错,请求问题排查

问题:Python帕斯卡三角生成器列表为空排查

我尝试用Python的嵌套列表和循环实现帕斯卡三角生成器,当n=2时,预期输出如下:

1
 1 1
1 2 1

我的代码如下:

n = int(input("Enter the limit: "))
triangle = []
currentRow = 0
for currentRow in range(n+1):
    spaces = n - currentRow
    printables = currentRow - 1
    temp = []
    while spaces > 0:
        temp.append(" ")
        spaces -= 1
    while printables > 0:
        if currentRow == 0:
            temp.append("1")
            triangle.append(temp)
            temp.clear()
        else:
            try:
                if (triangle[currentRow - 1][(spaces + 1) - 1]) == " " or (triangle[currentRow - 1][(spaces + 1) + 1]) == " ":
                    temp.append("1 ")
                else:
                    temp.append(f"{int(triangle[currentRow - 1][(spaces - 1) + 1]) + int(triangle[currentRow - 1][(spaces + 1) + 1])} ")
                triangle.append(temp)
                temp.clear()
            except IndexError:
                pass
print(triangle)

但triangle列表始终输出为空,尽管我一直在向其中追加值,请求帮助排查问题。


问题排查与修复

核心问题分析

  • 引用类型的陷阱:每次向triangle追加temp后立刻调用temp.clear(),列表是引用类型,triangle里存的是temp的引用,清空temp会直接让triangle里的元素变成空列表。
  • 循环条件逻辑错误:当currentRow == 0时,printables = currentRow - 1 = -1,内层while printables > 0根本不会执行,导致第一行的1永远加不进triangle。
  • 索引计算混乱:混合存储空格和数字的方式,让上一行元素的索引判断完全出错,再加上try-except直接忽略IndexError,把大量逻辑错误都掩盖了。

修复后的代码

重构后的代码先生成纯数值的帕斯卡三角,再处理格式对齐,逻辑更清晰:

n = int(input("Enter the limit: "))
# 先生成纯数值的帕斯卡三角
triangle = []
for row_num in range(n + 1):
    row = [1] * (row_num + 1)
    # 计算中间元素
    for j in range(1, row_num):
        row[j] = triangle[row_num - 1][j - 1] + triangle[row_num - 1][j]
    triangle.append(row)

# 处理格式输出,添加前置空格对齐
for i, row in enumerate(triangle):
    spaces = n - i
    print(" " * spaces + " ".join(map(str, row)))

# 查看最终生成的数值列表
print("\n生成的帕斯卡三角数值列表:")
print(triangle)

修复说明

  1. 分离逻辑:先搞定纯数值的三角生成,这部分是帕斯卡三角的核心逻辑,验证起来更简单,再单独处理格式对齐的问题。
  2. 避免引用问题:每次生成全新的row列表,直接追加到triangle,不会出现清空原列表导致的空值问题。
  3. 简化计算:利用帕斯卡三角的数学规律,每行首尾固定为1,中间元素等于上一行相邻两数之和,索引计算清晰不易出错。

内容的提问来源于stack exchange,提问作者Zey Roax

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 06:50:06