Python实现帕斯卡三角输出含多余0,如何调整得到正确结果
问题原因
- 多余尾0的来源:你的代码对11的i2次幂做了
-1操作,帕斯卡三角第n行(从0开始计数)的各位正好对应11**n的各位数字,减1后末位会变为0,因此每一行末尾都多了一个0。 - 缺少顶部首行的来源:你的循环从
i2=1开始迭代,而对应首行[1]的是11**0,少了i2=0的迭代步骤。 - 第5行结果错乱的来源:当i2>=5时,
11**5 = 161051,此时11的幂次出现进位,直接将数值转为字符串拆分单个字符的逻辑会把进位后的多位数拆成独立字符,无法对应正确的帕斯卡三角数值,这个实现思路仅适用于5行以内的场景,不具备通用性。
修复方案
临时修复版(仅适配行数≤5的场景,保留你原有实现思路)
def pascaltri(r): # 循环从0开始,覆盖首行 for i2 in range(r): string = " " * (r - i2 - 1) # 去掉减1操作,直接取11的i2次幂 string += " ".join(map(str, str(11**i2))) print(string) pascaltri(5)
通用实现版(支持任意行数,无进位问题)
采用帕斯卡三角标准递推逻辑:每一行首尾固定为1,中间元素等于上一行相邻两个元素的和,不受进位限制。
def pascaltri(r): triangle = [] for i in range(r): # 初始化当前行,首尾默认是1 row = [1] * (i + 1) # 计算当前行中间位置的数值 for j in range(1, i): row[j] = triangle[i-1][j-1] + triangle[i-1][j] triangle.append(row) # 打印前补空格实现居中对齐 print(" " * (r - i - 1) + " ".join(map(str, row))) pascaltri(5)
内容的提问来源于stack exchange,提问作者NewtonL
相关产品推荐
相关产品推荐

