使用python格式化打印杨辉三角形

 


 

一、题目

杨辉三角形,也称帕斯卡三角,其定义为:顶端是 1,视为(row0).第1行(row1)(1&1)两个1,这两个1是由他们上头左右两数之和 (不在三角形内的数视为0).依此类推产生第2行(row2):0+1=1;1+1=2;1+0=1.第3行(row3):0+1=1;1+2=3; 2+1=3;1+0=1. 循此法可以产生以下诸行。

如下图所示。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbTBfNjk0MzE4OTU=,size_20,color_FFFFFF,t_70,g_se,x_16
定义一个函数 ,传入正整数参数 M,输出 M 行的杨辉三角(为使格式美观,采用M行中最大数的位数 做为数据输出时的占位宽度和 数据间的间隔)。

二、代码

如下:

组合数函数原理watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbTBfNjk0MzE4OTU=,size_19,color_FFFFFF,t_70,g_se,x_16 

import math as m
def c(n,r):#定义函数计算C n r 
    if n==0 or r==0:
        return 1
    else:
        return int(m.factorial(n)/(m.factorial(r)*m.factorial(n-r)))
x=eval(input())
all=[]
l=[]
#创建一个二维列表以每一行的数的列表为元素,如[[1],[1,1],[1,2,1]]
for n in range(x):
    for r in range(n+1):
        l.append(c(n,r))#每一个元素都是C n r,n为列,r为一列中的第几项
    all.append(l[:])
    l.clear()
max=all[x-1][x//2]#找到最大数
num=0
#判断最大数位数
while max!=0:
    num+=1
    max=max//10
for n in range(x):
    #打印每行前端空格
    print(' '*((x-n)*num),end='')
    #输出数字内容
    for nn in range(n+1):
        print("{:>{}}".format(all[n][nn],num*2),end='')
                #格式控制打印三角形内容,右对齐,占num*2个字符
    print()

 

总结

1、理解杨辉三角中每一个数的来历

2、掌握format的格式控制方法

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐