k=0
kaiguan=1
def shengdanshu(n):
global k
global z
if 2*z1+1>20: #是2*z1+1最后一个三角形最后一行星号*的总个数
h=int((2*z1+1)/20)
else:
h=1 #最后一个三角形最后一行星号*的总个数不大于20则树干为 3个星号
for i in range(0,n): #绘制第一行
if i==0 and b==1:
print(z*' '+30*' '+'*')
z=z-2 #z是空白部分,绘制一行,空白部分就往左退2格
k+=2 #k是星号部分,绘制一行,星号就往右增2格
else: #绘制第一行下面的行数
print(z*' '+30*' '+'*'*k,end="")
print('*',end="")
print('*'*k,end="\n")
z=z-2
k+=2
if d==n: #到最后肯定是d==n,即执行到shengdanshu(n)的部分,也就是开始树干位置的绘制
for u in range(d-1): #d-1是随意设置的,即树干的层数
print(30*' '+(z1-h)*' '+'*'*h+'*'+'*'*h) #始终保持树干居中
z=z1 #将z1赋值给z,使z又变为原始的最后一行左半边星号个数,
#即一棵圣诞树的第二个三角形的尖顶又跟第一个三角形的尖顶对齐
k=0 #初始化k,为重新开始绘制下一个三角形的星号*作准备
while kaiguan==1:
b=1
n=int(input("请输入圣诞树最后一棵的层数:"))
if n<4:
print("\n\t\t圣诞树太小,无法表现出其状态,请重新输入大于等于4的数字\n")
else:
z=2*n-2 #z为最后一行左半边星号个数,同时也是第一行左半边空格的个数
z1=z #因为上面已有z=z-2,故用z1来保存原始的z即最后一行左半边星号个数
d=n #用d来保存输入的原始的n的层数
shengdanshu(n-2)
b=b-1
shengdanshu(n-1)
shengdanshu(n)
print("\n")
圣诞树绘制
于 2022-12-01 17:51:12 首次发布