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

Python实现N行帕斯卡三角打印 函数传参与代码逻辑错误排查

帕斯卡三角程序问题修正

原代码核心问题

  • 无参数化设计,逻辑冗余混乱:三个自定义函数没有按照职责设置形参,反而在三角生成、格式转换的函数内部重复调用get_triangle_size()拉取用户输入,不仅重复弹窗让用户输入行数,还错误把输入的整数行数当成二维三角列表遍历,直接触发类型报错
  • 缺失返回值逻辑:generate_pascal_triangle生成完三角列表、pascal_triangle_tostring拼接完输出字符串后,都没有通过return把结果传回外层,主程序调用时拿到的全是None,完全没有可用数据
  • 边界场景逻辑断裂:当用户输入行数为1时,虽然代码写了判断逻辑,但因为没有返回语句,函数实际返回空值,无法正常输出

修正后可运行的完整代码

# 校验用户输入的合法行数
def get_triangle_size():
    while True:
        numberOfRows = input("Enter the no. of rows: ")
        try:
            numberOfRows = int(numberOfRows)
        except ValueError:
             print("N must be an integer")
             continue
        if numberOfRows <= 0:
            print("N must be at least 1")
            continue
        break
    return numberOfRows

# 接收行数参数n,生成对应帕斯卡三角二维列表
def generate_pascal_triangle(n):
    if n == 1:
        triangle = [[1]]
        return triangle
    # 初始化前两行基础结构
    triangle = [[1], [1, 1]]
    # 从第三行开始逐行生成
    for i in range(2, n):
        row = [1]
        # 基于上一行的相邻元素计算当前行的中间值
        for j in range(1, i):
            row.append(triangle[i-1][j-1] + triangle[i-1][j])
        row.append(1)
        triangle.append(row)
    return triangle

# 接收三角列表,拼接为可直接打印的字符串
def pascal_triangle_tostring(triangle_list):
    output = ""
    for row in triangle_list:
        for value in row:
            output += str(value) + "\t"
        output += '\n'
    return output

# 主程序执行流程
print("This program prints a Pascal's triangle with n line")
triangle_size = get_triangle_size()
pascal_triangle = generate_pascal_triangle(triangle_size)
print("Pascal’s triangle with %d lines:\n" % triangle_size)
print(pascal_triangle_tostring(pascal_triangle))

针对参数传值的关键说明

  • 自定义函数的传值逻辑:函数需要什么外部数据,就把这个数据作为形参写在函数定义的括号里,调用的时候把实际存在的变量按顺序传进去就行,不要在函数内部写和自身职责无关的输入拉取逻辑
    • 原来的generate_pascal_triangle不需要自己去问用户要行数,主程序已经通过get_triangle_size()拿到了合法的行数,直接把这个整数传给函数当形参就行
    • 原来的pascal_triangle_tostring不需要自己拉用户输入,主程序已经通过generate_pascal_triangle拿到了三角的二维列表,直接把这个列表传给函数当形参就行
  • 只要函数的计算结果需要被外层使用,就一定要写return把结果返回,不然函数内部变量出了函数就访问不到,外层永远拿不到处理后的数据
  • 调用顺序要和函数的依赖关系匹配:先拿合法输入→再用输入生成三角列表→再把列表转成输出字符串→最后打印,不要跳步打乱顺序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 09:15:04