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
相关产品推荐
相关产品推荐

