2021

您所在的位置:网站首页 python中输出金字塔 2021

2021

#2021| 来源: 网络整理| 查看: 265

python初学者关于数字金字塔的构造过程@数字金字塔 数字金字塔的构造目标

作为一个Python语言的初学者,在看完B站的Python学习基础视频后,脑海中蹦出一个构想:输出一个数字金字塔。数字金字塔在第一行居中输出1个数字‘1’,第二行输出2个数字‘2’…以此类推,最后形成一个等腰三角形的数字形状。

失败的开始

初学者刚开始写代码,简直是一脸懵逼,写出的代码各种报错。在百度上查找报错的类型和解决办法,折腾了半天后终于有了思路。思考了几种方案,但是使用.center()函数和format()函数始终无法做到使每行的数字完全居中。最终结合了网上查找的几种方案,找出了最后的解决方案。在每行每二个数字的中间插入空格,使每行的数字+空格的个数始终为奇数个,方便对齐。在使用.center()和format()失败后,经同学的提醒,直接暴力在每行的字符串前直接添加空格,人造居中对齐!

参考的原版C代码

在网上找到了我想要的目标完全契合的代码,不过是用C写的,代码如下:

#include //输出数字金字塔(数字1-9) int main() { int n,i,j,k; scanf("%d",&n); for (i=1;i if (k==i) { printf("%d",i); } else{ printf("%d ",i); } } printf("\n"); } return 0; }

输出的结果如下: 理想的输出结果

自己的改编1.0

但是以上结果是用C实现的,我需要将其改为Python实现的代码。刚开始以为很简单,直接改成Python格式的代码就OK了,但我还是太年轻了! 改为Python实现的代码如下:

n=int(input('请输入数字金字塔层数(1-9):')) i=j=k=1 for i in range(1,n+1): for j in range(1,n-i+1): print(' ',end='') j+=1 for k in range(1,i+1): if k==i: print(' ',i) else: print(' ',i,end='') k+=1 i+=1

但实际上,输出的结果并不能让人满意;它居中了,但没完全居中! 输出结果如下: Python代码实现1.0输出结果

自己的改编2.0

于是我开始思考,怎么实现每行数字的完全居中。可不可以这样实现:因为每行的内容都极为简单,可不可以将每行的内容都存储到一个字符串当中,然后根据最后一行的宽度,利用.center(n)函数实现居中对齐。在其中,偶数行时,剩余空格为奇数个,所以改为.center(n+1)。我以为这样就可以了,但‘我还是太年轻了!×2’ .center(n)函数无法将一个空格分为两半啊! 改版代码如下:

n = int(input('请输入数字金字塔层数(1-9):')) for i in range(1, n + 1): str1 = str(i) * i if i % 2 == 0: print(str1.center(n + 1), end='') else: print(str1.center(n), end='') print()

输出的结果还是不能让人满意,甚至比上一版本更差;它也是居中了,但没完全居中! 输出结果如下: 在这里插入图片描述

自己的改编3.0

最后,经过半天的折磨,我想到了最后的解决方案。在每行每二个数字的中间插入空格,使每行的数字+空格的个数始终为奇数个,方便对齐。 首先定义一个函数f(n),利用这个函数将每行的内容都变成一个字符串,其中每二个数字的中间插入空格,使各行出来的效果美观,且对齐方便。 然后找出每行字符串前该添加的空格的个数,经过计算,每行前需要空出n-i个空格;其中n为要输出数字金字塔的行数,i为当前第几行数。 再次改版代码如下:

n = int(input('请输入一个数(1-9):')) def f(n): i = 1 str1 = str(n) while i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3