在金字塔内创建金字塔

时间:2019-09-21 14:50:07

标签: python

我进行了编程练习,我们必须创建一个程序,该程序根据迷你三角形之一的给定高度(用户输入)在金字塔图形内生成金字塔。

我设法创建了顶层金字塔,但是在后续图层上遇到困难时,金字塔变得不合适了。

这是我到目前为止一直在努力的事情:

h = int(input())
for r in range (1, h+1):
    for i in range(1,h+1):
        if r == 1:
            print (((" " * ((((h * 2) - 1) * h) - h - i + 1))  + ("*" * (i * 2 - 1)))*(r*2-1))
        else:
            print (((" " * ((((h * 2) - 1) * h) - h - i + 1 - (r*2-1)))  + ("*" * (i * 2 - 1)))*(r*2-1))

这应该是'h'为3时的预期输出

            *
           ***
          *****
       *    *    *
      ***  ***  ***
     ***************
  *    *    *    *    *
 ***  ***  ***  ***  ***
*************************

但是我得到的却是这个:

            *
           ***
          *****
         *         *         *
        ***        ***        ***
       *****       *****       *****
       *       *       *       *       *
      ***      ***      ***      ***      ***
     *****     *****     *****     *****     *****

2 个答案:

答案 0 :(得分:2)

这是您可以使用的功能。定义构成金字塔的各个组成部分有助于找出使用的正确公式。

def pyramid(h = 1): 
    pyr = ['']*h
    base = 2*h - 1
    for i in range(h):
        pyr[i] = " " * (h-i-1) + "*"*(2*i+1) + " " * (h-i-1)
    for i in range(h):
        for j in range(h):
            print(" " * base * (h-i-1) + pyr[j]*(2*i+1) + " " * base * (h-i-1))

带有h = 4

的示例
>>> pyramid(4)
                        *                        
                       ***                       
                      *****                      
                     *******                     
                 *      *      *                 
                ***    ***    ***                
               *****  *****  *****               
              *********************              
          *      *      *      *      *          
         ***    ***    ***    ***    ***         
        *****  *****  *****  *****  *****        
       ***********************************       
   *      *      *      *      *      *      *   
  ***    ***    ***    ***    ***    ***    ***  
 *****  *****  *****  *****  *****  *****  ***** 
*************************************************

答案 1 :(得分:0)

我使用了字符串和列表,而不是使用复杂的方法。

def pyramid(h):
    rows = ["  *  ", " *** ", "*****"]
    for i in range(h):
        out = []
        for x in range(1,len(rows)+1):
            temp = ""
            for _ in range(i+1):temp += rows[x-1]
            for _ in range(i, 0, -1):temp += rows[x-1]
            out.append(temp+"\n")
        print("".join([("     "*(h-1-i))+val for val in out]), end = "")

使用h = 3进行以下测试时:

pyramid(3)

输出符合预期:

            *  
           *** 
          *****
       *    *    *  
      ***  ***  *** 
     ***************
  *    *    *    *    *  
 ***  ***  ***  ***  *** 
*************************