上一篇内容,我们打印了各种三角形,今天我们一起看看如何打印出菱形?其实我们可以对菱形进行一个拆分,如下图所示:
上半部分是一个等腰三角形,下半部分是一个倒着的等腰三角形的前面再有一个空白三角形。这样分解开来,我们不难发现,有两部分都是我们写过的,只有倒三角没有写过,但是也不难,接下来请看代码。
# 打印上半部分等腰三角形 for i in range(1,6): for j in range(1,6-i): print(" ",end=" ") for k in range(1,2*i): print("*",end=" ") print() #打印下半部分 for i in range(1,5): for j in range(i): print(" ",end=" ")#打印空格直三角 for k in range(1,2*(5-i)): print("*",end=" ")#打印倒三角 print()
这里打印倒三角时为什么范围是2*(5-i)呢?
蓝色三角形部分“*”的数量是从7、5、3、1依次递减的,当我们外层循环的i=1时,2*(5-i)为8,range()函数不取后边界,刚好为7,这就是2*(5-i)的由来。
当然这是我们固定了菱形的行数的情况,如果需要根据自己的需求改变菱形的大小,则需要从键盘输入菱形的行数。但是在输入的时候,我们必须注意一个问题,因为菱形都是单数行,所以输入的数字必须是单数才可以。这里便需要用到判断,那如果输入的是双数就结束程序吗?显然这不是我们想要得到的结果,所以还会加入循环的内容。将判断作为循环的条件即可实现这一内容。
row=eval(input("请输入菱形的行数:(必须为奇数)"))
while(row%2==0):
print("请重新输入菱形的行数")
row = eval(input("请输入菱形的行数:(必须为奇数)"))
接下来根据我们刚才对菱形的拆分可以发现,菱形的上半部分的计算方式为(row//2+1),所以上半部分代码调整后为:
top_row=row//2+1
for i in range(1,top_row+1):
for j in range(1,top_row+1-i):
print(" ",end=" ")
for k in range(1,2*i):
print("*",end=" ")
print()
下半部分的行数的计算方式为(row//2),下半部分代码调整为:
bottom_row=row//2
for i in range(1,bottom_row+1):
for j in range(i):
print(" ",end=" ")#打印空格直三角
for k in range(1,2*(bottom_row+1-i)):
print("*",end=" ")#打印倒三角
print()
这样我们不需要去修改代码内容,从键盘输入菱形的行数便可以打印出相对应大小的菱形。运行效果如图所示: