在学习python的循环语句时,老师经常会要求我们用循环语句打印出三角形或菱形,今天俺就来演示演示如何用*打印出图形。

1、首先来看看如何打印出等腰三角形(如图):

layer = int(input("请输入HANG数:"))    #输入行数
for i in range(1,layer+1):             #用i表示每一行
	num1 = layer - i                   #num1表示每一行中空格的数量
	for j in range(num1):              #通过for循环语句打印空格
		print(" ",end="")

	num2 = i*2-1                       #num2表示每一行中的星号的数量
	for j in range(num2):              #通过for循环语句打印星号
		print("*",end="")
	print("")                          #这个语句表示换行

解释:打印等腰三角形需要理解它的图形规律,设i表示行数,每一行星号的个数就等于(i*2-1),每一行星号前面空格的个数就等于总行数减去i。知道了等腰三角形怎么打印,菱形也就很相似了。

2、打印出菱形(如图):

layer = int(input("请输入打印的奇数行数:"))
while layer%2==0:                          #因为打印菱形要上下对称,所以行数要单数
	layer = int(input("必须是奇数,请输入重新打印的行数:"))

for i in range(1,(layer//2+2)):
	num1 = layer//2+1 - i
	for j in range(num1):
		print(" ",end="")

	num2 = 2*i-1
	for j in range(num2):
		print("*",end="")
	print("")

for i in range((layer//2),0,-1)	:
	num1 = layer//2+1 - i
	for j in range(num1):
		print(" ",end="")

	num2 = 2*i-1
	for j in range(num2):
		print("*",end="")
	print("")

 解释:以打印9行为例,前面5行和打印等腰三角形是一样的,后面四行与前面原理相同,只不过在range函数中是反着来的,数从大到小排。

3、打印出空心菱形(如图):

layer = int(input("请输入奇数行数:"))
while layer%2==0:
	layer = int(input("不是奇数,请重新输入:"))

for i in range(1,layer//2+2):
	num1 = layer//2+1-i
	for j in range(num1):
		print(" ",end="")
	num2 = i*2-1
	for j in range(num2):
		if j==0 or j == num2-1:        #判断是否打印第一个或最后一个星号
			print("*",end= "")
		else:
			print(" ",end = "")
	print("")
for i in range(layer//2,0,-1):
	num1 = layer//2+1-i
	for j in range(num1):
		print(" ",end="")
	num2 = i*2-1
	for j in range(num2):
		if j==0 or j == num2-1:
			print("*",end="")
		else:
			print(" ",end = "")
	print("")

 解释:要打印空心菱形,只需在打印星号时进行判断,如果是本行中第一个和最后一个星号就打印星号,否则就打印空格。

4、空心菱形中加入一行星号(如图):

layer = int(input("请输入奇数行数:"))
while layer%2==0:
	layer = int(input("不是奇数,请重新输入:"))

for i in range(1,layer//2+2):
	num1 = layer//2+1-i
	for j in range(num1):
		print(" ",end="")
	num2 = i*2-1
	for j in range(num2):
		if j==0 or j == num2-1 or i == layer//2+1:    #如果i的行数是中间那一行就全打印星号
			print("*",end= "")
		else:
			print(" ",end = "")
	print("")
for i in range(layer//2,0,-1):
	num1 = layer//2+1-i
	for j in range(num1):
		print(" ",end="")
	num2 = i*2-1
	for j in range(num2):
		if j==0 or j == num2-1:
			print("*",end="")
		else:
			print(" ",end = "")
	print("")

 5、空心菱形中加入十字架(如图):

layer = int(input("请输入奇数行数:"))
while layer%2==0:
	layer = int(input("不是奇数,请重新输入:"))

for i in range(1,layer//2+2):
	num1 = layer//2+1-i
	for j in range(num1):
		print(" ",end="")
	num2 = i*2-1
	for j in range(num2):
		if j==0 or j == num2-1 or i == layer//2+1 or j == num2//2:
			print("*",end= "")
		else:
			print(" ",end = "")
	print("")
for i in range(layer//2,0,-1):
	num1 = layer//2+1-i
	for j in range(num1):
		print(" ",end="")
	num2 = i*2-1
	for j in range(num2):
		if j==0 or j == num2-1 or j == num2//2:
			print("*",end="")
		else:
			print(" ",end = "")
	print("")

 6、打印一棵树(如图):

layer = int(input("请输入奇数行数:"))
while layer%2==0:
	layer = int(input("不是奇数,请重新输入:"))

for i in range(1,layer//2+2):
	num1 = layer//2+1-i
	for j in range(num1):
		print(" ",end="")
	num2 = i*2-1
	for j in range(num2):
		if j==0 or j == num2-1 or i == layer//2+1 or j == num2//2:
			print("*",end= "")
		else:
			print(" ",end = "")
	print("")
for i in range(layer//2,0,-1):
	num1 = layer//2+1-i
	for j in range(num1):
		print(" ",end="")
	num2 = i*2-1
	for j in range(num2):
		if j == num2//2:
			print("*",end="")
		else:
			print(" ",end = "")
	print("")

Logo

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

更多推荐