Python输出圣诞树
Description
本题要求你写程序把给定的符号打印成圣诞树森林的形状。
每颗圣诞树有两部分组成,分别是上面的树冠和下面的树干,两部分的高度分别输入决定。
树冠每行由奇数个符号组成,各行符号中心对齐,相邻两行符号数相差2,第1行由1个符号组成,然后每行的符号数从小到大顺序递增。
树干第行由1个符号组成,位于树冠的中心位置。
圣诞树森林,共由K颗圣诞树组成,每颗树的树冠高度为N,树干高度为M,每行排列输出3颗圣诞树,每颗圣诞树之间空一格,不够3颗的向左对齐输出
其中,1<=M<=N<=20,1<=K<=20
每行的结尾都不能有任何多余的字符,包括空格
Input
输入第一行给出3个正整数N,M和K,中间以空格分隔
输入第二行给出一个符号
Output
输出由给定符号组成的圣诞树森林,共由K颗圣诞树组成,每颗树的树冠高度为N,树干高度为M,每行输出3颗圣诞树,每颗圣诞树之间空一格,不够3颗的向左对齐输出
def print_three(N,M,icon):# 一排输出三棵树
stars = 1 #初始星星数
for j in range(N):#先输出所有的树冠
print(' '*(N-j-1)+icon*stars+' '*((N-j-1)*2+1)+icon*stars+' '*((N-j-1)*2+1)+icon*stars)
stars +=2
for i in range(M): #输出所有的树干
print(' '*int(((2*N-1)/2))+icon+' '*((int((2*N-1)/2))*2+1)+icon+' '*((int((2*N-1)/2))*2+1)+icon)
def print_two(N,M,icon):# 一排输出两颗棵树
stars = 1
for j in range(N):#先输出所有的树冠
print(' '*(N-j-1)+icon*stars+' '*((N-j-1)*2+1)+icon*stars)
stars +=2
for i in range(M): #输出所有的树干
print(' '*int(((2*N-1)/2))+icon+' '*((int((2*N-1)/2))*2+1)+icon)
def print_one(N,M,icon):# 一排输出一颗棵树
stars = 1
for j in range(N):#先输出所有的树冠
print(' '*(N-j-1)+icon*stars)
stars +=2
for i in range(M): #输出所有的树干
print(' '*int(((2*N-1)/2))+icon)
if __name__ == "__main__":
# N = 4 树冠高度
# M = 2 树干高度
# K = 5 圣诞树棵树
# a, b = map(int, input('输入a,b空格隔开:').split())
'''
主要想法:
将圣诞树分为三类:
1. 一排输出 三棵圣诞树
2. 一排输出 两课圣诞树
3. 一排输出 一棵圣诞树
根据给定的圣诞棵树 K ,判断输出的方式
圣诞树的输出想法:
一次性输出所有的圣诞树,即:
---*-------*-------*
--***-----***-----***
-*****---*****---*****
*******-*******-*******
---*-------*-------*
---*-------*-------*
关键是 根据 N M 判断 - 的个数
'''
N,M,K= map(int,input().split())
icon = input()
three = int(K/3) # 一排输出三棵圣诞树的要输几排
other = K%3 # 剩余的是一排输出两棵还是一排输出一棵
for i in range(three):
print_three(N, M, icon)
if(other == 1):
print_one(N, M, icon)
else:
print_two(N, M, icon)