圣诞树,Python输出(笔试题)

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)
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Champion.XL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值