python L2 编程 超级圣诞树

题目:
今天是圣诞节,牛牛要打印一个漂亮的圣诞树送给想象中的女朋友,请你帮助他实现梦想。

输入描述:
输入圣诞树的大小n
1<=n<=8
输出描述:
输出对应的圣诞树
示例:

#输入1
#输出:
  *
 * *
* * *
  *
#输入2
#输出:
     *
    * *
   * * *
  *     *
 * *   * *
* * * * * *
     *
     *
#输入3
输出:
           *
          * *
         * * *
        *     *
       * *   * *
      * * * * * *
     *           *
    * *         * *
   * * *       * * *
  *     *     *     *
 * *   * *   * *   * *
* * * * * * * * * * * *
           *
           *
           *

解题思路:按前面推算出4时,图案如下 :

python L2 编程 超级圣诞树_第1张图片

 故代码如下:

n=int(input())

if n<1 or n>8:
    quit()

def double(x):
    x=2*x
    return x

def add2(col,row):
    col=col+row
    return col

#创建矩阵
def createarr(rows,cols):
    arr_rows=[]
    for i in range(rows):
        arr_cols=[]
        for j in range(cols):
            arr_cols.append(' ')
        arr_rows.append(arr_cols)
    return arr_rows

#打印矩阵
def printarr(arrs):
    for i in range(len(arrs)):
        s=""
        for j in range(len(arrs[0])):
            s=s+arrs[i][j]
        print(s)
    
#画三角
def draw(x,arr):
   stars=1
   c1=x
   for i in range(3):
       c1=c1-1
       c2=c1
       for j in range(stars):
           arr[i][c2]='*'
           c2=c2+2
       stars+=1
   return arr

#将之前的矩阵复制到新矩阵
def copyarr3(star_y,s_arr,d_arr):
    #star起始点
    star_x=0
    star_y1=star_y
    for s_x in range(len(s_arr)):
        star_y1=star_y
        for s_y in range(len(s_arr[0])):
            d_arr[star_x][star_y1]=s_arr[s_x][s_y]
            star_y1+=1
        star_x+=1

    star_x=len(s_arr)
    for s_x in range(len(s_arr)):
        star_y1=0
        for s_y in range(len(s_arr[0])):
            d_arr[star_x][star_y1]=s_arr[s_x][s_y]
            star_y1+=1
        star_x+=1
        
    star_x=len(s_arr)
    for s_x in range(len(s_arr)):
        star_y1=len(s_arr[0])+1
        for s_y in range(len(s_arr[0])):
            d_arr[star_x][star_y1]=s_arr[s_x][s_y]
            star_y1+=1
        star_x+=1    
    return d_arr

#树顶位置
x=3
#列数
col=add2(2,x)
base_arr=createarr(x,col)
arr1=draw(x,base_arr)

#star_y=起始位置y
for i in range(n-1):
    star_y=x
    x=double(x)
    col=add2(col,x)
    arr2=createarr(x,col)
    arr2=copyarr3(star_y,arr1,arr2)
    arr1=arr2

#如果一个显示
if n==1:
    printarr(arr1)
else:
    printarr(arr2)

#输出树干
for i in range(n):
    print(' '*(x-1) + '*')

你可能感兴趣的:(python,python)