python打印圣诞树思路+详解简单粗暴实现

一、打印一个简单版圣诞树

实现如下:

#     *
#    ***
#   *****
#  *******
# *********
#     *
#     *
#     *

代码:

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)。

        其他部分:

                实现方法太简单了,自行理解。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值