1说明 1。1杨辉三角的介绍。 1。2杨辉三角的python实现,用turtle和pydotplus高级别可视化实现。 1。3代码讲解通俗易懂,注释仔细,小白秒懂。 1。4环境:python3。8 2杨辉三角 2。1杨辉三角形,即PascalTriangle帕斯卡三角形。 2。2又称贾宪三角形,是二项式系数在三角形中的一种几何排列。 2。3北宋人贾宪约1050年首先使用贾宪三角进行高次开方运算。 2。4南宋数学家,杨辉所著的《详解九章算术》(1261年)一书中用如图的三角形解释二项和的乘方规律。 2。5规律:在杨辉三角中 第3行的三个数恰好对应着两数和的平方的展开式的每一项的系数, 即(ab);a2abb 第4行的四个数恰好依次对应两数和的立方的展开式的每一项的系数, 即(ab)a3ab3abb 以此类推。 因此可得出二项式定理的公式为: (ab)C(n,0)abC(n,1)a(n1)b。。。C(n,r)a(nr)br。。。C(n,n)ab。 3python可视化效果图赏析 3。1终端图 图1 3。2turtle图 图2:小bug 图3:小bug 3。3pydotplus图 图4:经典 4上述4张图的python的代码 4。1图1的代码:参考文章https:blog。csdn。netweixin43469680articledetails88781849?utmmediumdistribute。pcrelevant。nonetaskblogBlogCommendFromMachineLearnPai21。addparamisCfdepth1utmsourcedistribute。pcrelevant。nonetaskblogBlogCommendFromMachineLearnPai21。addparamisCf杨辉三角金字塔版注意:迭代对象1金字塔的数字列表2列表数值转str类型。center居中nyouint(input(请您输入杨辉三角的层数,推荐6:))自己增加的datalb〔〕定义三角deftriangle():N〔1〕whileTrue:generator特点在于:在执行过程中,遇到yield就中断,下次又继续执行yieldN我们需要吧N复制给L,而不能直接LN,因为这样L和N会在同一个地址,后续算法就会出错LN。copy()forjinrange(len(L)):遍历和转化tempstr(L〔j〕)L〔j〕tempdatalb。append(temp)l。join(L)。center(50)组合和居中一起写print(l)这里就是打印l了N。append(0)每次都要在最后一位加个0,用于后续的叠加N〔N〔i〕N〔i1〕foriinrange(len(N))〕打印三角的设置defprinttriangle(x):a0fortintriangle():这里可以每次调用一个N(得力于Yield函数)a1ifax:break打印杨辉三角printtriangle(nyou1)打印7行a1f6备用:自己增加的,便于pydotplus中使用print(datalb)labelworld〔a1,b1,b2,c1,c2,c3,d1,d2,d3,d4,e1,e2,e3,e4,e6,f1,f2,f3,f4,f5,f6〕 4。2图2的代码:参考文章https:blog。csdn。netweixin42644456articledetails107963565?utmmediumdistribute。pcaggpagesearchresult。nonetaskblog2allfirstrankv2rankv252107963565。nonecaseutmtermpythonE69DA8E8BE89E4B889E8A792E5AD97E7ACA6E8BE93E587BAE5B185E4B8ADspm1000。2123。3001。4430importturtleast杨辉三角和居中N〔1〕定义画线defprtLine():globalNN〔1〕〔N〔i〕N〔i1〕foriinrange(len(N)1)〕〔1〕杨辉三角放到二维列表中d〔〕d。append(N)foriinrange(5):prtLine()d。append(N)每一行数字拼接成一个字符串,5个空格连接多行内容,组成字符串列表strprt〔〕fordataLineind:strprt。append(。join(str(v)forvindataLine))文本输出的居中。可以有其他居中方法。以80为总宽度fortxtinstrprt:paddingint((80len(txt))2)画图t。pensize(3)t。penup()y200t。goto(0,y)foriinrange(len(strprt)):txtstrprt〔i〕y80画图模式下,一个字符的宽带是5paddingint((len(txt)5)2)t。goto(padding,y)t。write(txt,font(Times,10,bold))移动到第一个字符的下方调节连接符合线的位置t。goto(padding10,y55)画折线ifi1andilen(strprt):t。pendown()t。setheading(45)forkinrange(i):t。forward(30)t。left(90)t。forward(30)t。right(90)t。penup()t。done() 4。3图3代码蜂窝六边形添加杨辉三角数字importturtleastimportmathasm影响杨辉三角的层数和蜂窝六边形的层数nyouint(input(请您输入杨辉三角的层数,推荐7:))杨辉三角和居中N〔1〕画线defprtLine():globalNN〔1〕〔N〔i〕N〔i1〕foriinrange(len(N)1)〕〔1〕杨辉三角放到二维列表中d〔〕d。append(N)foriinrange(nyou):prtLine()d。append(N)每一行数字拼接成一个字符串,5个空格连接多行内容,组成字符串列表strprt〔〕fordataLineind:strprt。append(。join(str(v)forvindataLine))t。setup(600,500,None,None)defdraw():以图形中心点为基准进行绘图扩张foryinrange(len(strprt)):设置列向第一个图形的坐标peny18045ypenx2507。5m。sqrt(3)m。pow(1,y)t。penup()t。goto(penx18020(y1),peny)txtstrprt〔y〕t。write(txt,font(Times,10,bold))t。pendown加3是向右增加,可适当调整forxinrange(len(strprt)3):设置行向图形的扩张t。circle(30,steps6)x1penx30m。sqrt(3)xt。penup()t。setx(x1)t。pendown()t。tracer(False)直接获取绘图结果,省略过程draw()t。done() 4。4图4代码:经典importpydotplusaspdp语法符合原dot语法dot定义节点属性digraphg{说实话代码太啰嗦了,要是能和python一样就好了定义节点关系左下斜a1b1c1d1e1f1;b2c2d2e2f2;c3d3e3f3;d4e4f4;e5f5;右下斜a1b2c3d4e5f6;b1c2d3e4f5;c1d2e3f4;d1e2f3;e1f2;以上是默认a1〔shapecircle,label1〕;指定圆和标签名b1〔shapecircle,label1〕;b2〔shapecircle,label1〕;c1〔shapecircle,label1〕;c2〔shapecircle,label2〕;c3〔shapecircle,label1〕;d1〔shapecircle,label1〕;d2〔shapecircle,label3〕;d3〔shapecircle,label3〕;d4〔shapecircle,label1〕;e1〔shapecircle,label1〕;e2〔shapecircle,label4〕;e3〔shapecircle,label6〕;e4〔shapecircle,label4〕;e5〔shapecircle,label1〕;f1〔shapecircle,label1〕;f2〔shapecircle,label5〕;f3〔shapecircle,label10〕;f4〔shapecircle,label10〕;f5〔shapecircle,label5〕;f6〔shapecircle,label1〕;}调用函数数据制图graphpdp。graphfromdotdata(dot)生成jpg图片graph。writejpg(homexgjDesktopyhsj4。jpg)备注〔1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,1,5,10,10,5,1〕〔a1,b1,b2,c1,c2,c3,d1,d2,d3,d4,e1,e2,e3,e4,e5,f1,f2,f3,f4,f5,f6〕 图4很棒,但是dot的代码太繁琐了,您有没有更好的杨辉三角python可视化的方法呢? 可以一起探讨。