最近复习下python,做基础的练习,偶然间看到一年前的任务:乘法表金字塔模型,是个烂尾活。哎,顺便完成了,颇有感慨,自愧不如。还是得干呐!先将代码和效果展示下:
效果的话就是这样:
代码如下:
i = 1
while i <= 9:
j = 1
print(" " * (50 - 4 * i),end="\t")
while j <= i:
print("%d*%d=%d"%(j,i,i*j),end="\t")
while i == j:
#print(" " *(50 - 5 * i))
print('\t')
break
j += 1
i += 1
代码其实没多少,就是有的地方需要脑筋转个弯,细心想一下还是可以想通的。
大概讲一下吧:
1.可能大家都知道,乘法表这样的肯定是两次嵌套循环,分成列和行。进入每一行后,然后再计算列。
i为行,j为列,我用的是while循环,你也可以试试for循环,效果都一样,因为是九九乘法表,所以我限定的是'while < 9',i的初值是1,即从1开始计算,然后进入循环,每一次进入每新的一行后,列都要从1开始计算,所以在while进入新的一行后,j = 1,也便于计算。
2.为了让整个乘法表程金字塔型,要给每行前面填充空格,莫要以为是将乘法表居中,实际上是它的前面填充了一定数量的空格,比如第一行就是 50 - 4 * 1 = 46个空格,第二行是42个,以此类推。你也可以将倍数改成其他的倍数。因为编译器不能让这个金字塔型的表自适应的显示在console中,所以要调距离,我就直接写了个比较大的,50空格。填充空格这儿得多思考些。
3.然后就是每行进入后,进行行和列的相乘计算,当这一行计算完后换行,进入下一行,换行的判断条件就是 i = j,
也就是到了3 * 3 ,4 * 4之类的这里,到了每行的末尾,进行换行。
4.一个小提示,每一行打印后,end=' ',里面最好写上\t,它可以让文本垂直方向对齐。界面美观。
我的这段程序也有不足之处,就是这个界面需要自己调试,选出合适的大小,直接以实参的形式作为控制和限定。
看到这里有没有想法吧这个三角倒过来呢?
必须有啊,不多说,上代码
i = 9
while (0 < i) and (i <= 9):
j = 1
print(" " * (50 - 4 * i), end="\t")
while j <= i:
print("%d*%d=%d" %(j,i,i*j),end="\t")
while i == j:
print('\t')
break
j += 1
i -= 1
效果如下:
就是做一个简单的变通即可,从最大的基数9开始,逢 i == j换下一行就行。
仔细对比两处代码哪里不一样,效果确实像金字塔一行翻天覆地。
到了这里我不知道小伙伴们还有没有想法,反正我有想法:搞一个菱形怎么样?
作为一个程序员,花里胡哨的两下还是得玩玩吧,是吧,哈哈。
其实也没啥,就是将两个对称的三角连在一起就可以了,连接后 9 * 9的那一行就多了一行,这个直接将金字塔的循环改成
while i <= 8即可。
这个漂亮的diamond就出世了!
效果如下:
代码也分享出来吧:
i = 1
while i <= 8:
j = 1
print(" " * (50 - 4*i),end="\t")
while j <= i:
print("%d*%d=%d"%(j,i,i*j),end="\t")
while i == j:
#print(" " *(50-5*i))
print('\t')
break
j += 1
i += 1
#此处分隔
i = 9
while (0 < i) and (i <= 9):
j = 1
print(" " * (50 - 4 * i), end="\t")
while j <= i:
print("%d*%d=%d" %(j,i,i*j),end="\t")
while i == j:
print('\t')
break
j += 1
i -= 1
好好看,好好学哈,是不是很有意思。
继续学习,人生苦短,我用python。