一、打印一个简单版圣诞树
实现如下:
# *
# ***
# *****
# *******
# *********
# *
# *
# *
代码:
for i in range(1,9):
# 小于六层时
if i<6:
# 根据层数变化打印空格
for j in range(1,7-i):
print(" ",end='')
# 根据层数变化打印星号
for k in range(1,i*2):
print("*",end='')
# 大于六层时
else:
print(" *",end="")
print()
详解:
一共八层,最外层循环 [1,9)。
里面分为两种情况,一种是小于6的情况,另一种是大于6的情况。
小于6时,输出树上部分。树上部分,每加一层,空格少一个,星号则是加两个;树干部分就是足够的空格+ 星号
二、打印一个稍复杂的圣诞树
实现如下:
# *
# ***
# *****
# *******
# ***
# *******
# ***********
# ***************
# *********
# ***************
# *********************
# ***************************
# |||
# |||
# |||
# ———————————————————————————
代码:
# 打印树上部分
# 外三层
for i in range(1,4):
t=3**(i-1)+1
# 根据星号个数,算出打印空格的个数
for space in range(1, floor(14 - t / 2)):
print(" ", end='')
# 打印第一行的 * 号
for j in range(1,t):
print("*",end='')
print()
# 循环实现剩下三行
for k in range(1, 4):
# 根据星号个数,算出打印空格的个数
for space in range(1,floor(14- (t + (i*2)*k)/2)):
print(" ",end='')
# 根据第一行,打印剩下行的 * 号
for n in range(1, t + (i*2)*k):
print("*", end="")
print()
# 树干
for i in range(1,4):
for j in range(1,14-floor(3/2)):
print(" ",end='')
print("|||")
# 泥土
for i in range(1,28):
print('-',end='')
详解:
一步步分解拆开,使得思路清晰。
分三大部分:树上部分、树干、泥土。
树上部分:
先分成三层,每层按顺序打印第一行空格(根据第一行星号数量,找出空格规律)、第一行星号,根据第一行打印出剩下几行的空格(根据第几行星号数量,找出空格规律)、剩下几行星号。
第一层的第一行是1个星号,第二层的第一行是3个星号,第三层的第一行是9个星号。
规律是 [1,3**(i-1)+1) 。空格则是总数14-floor( (3**(i-1)+1) /2)。
剩下几行规律是:
第一行星号数+层数*行数*2=行的星号数。即 (3**(i-1)+1)+i*k*2 个星号。
空格则是总数14-floor( ((3**(i-1)+1)+i*k*2) /2)。
其他部分:
实现方法太简单了,自行理解。