Python 在金字塔中创建金字塔

Python 在金字塔中创建金字塔,python,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 = 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时的预期输出

            *
           ***
          *****
       *    *    *
      ***  ***  ***
     ***************
  *    *    *    *    *
 ***  ***  ***  ***  ***
*************************
但我得到的却是:

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

这里有一个你可以使用的函数。定义构成金字塔的各个组件有助于找出正确的使用公式

def棱锥体(h=1): pyr=['']*h 基准=2*h-1 对于范围(h)内的i: pyr[i]=“*(h-i-1)+”“*”*(2*i+1)+”“*(h-i-1) 对于范围(h)内的i: 对于范围(h)内的j: 打印(“*base*(h-i-1)+pyr[j]*(2*i+1)+”“*base*(h-i-1))
h=4的示例

>>> pyramid(4)
                        *                        
                       ***                       
                      *****                      
                     *******                     
                 *      *      *                 
                ***    ***    ***                
               *****  *****  *****               
              *********************              
          *      *      *      *      *          
         ***    ***    ***    ***    ***         
        *****  *****  *****  *****  *****        
       ***********************************       
   *      *      *      *      *      *      *   
  ***    ***    ***    ***    ***    ***    ***  
 *****  *****  *****  *****  *****  *****  ***** 
*************************************************

我没有使用复杂的方法,而是采用了另一种方法,即使用字符串和列表

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
as进行测试时:

pyramid(3)
正如预期的那样,输出为:


很抱歉,我输入了错误的输出,应该是三个金字塔堆栈,其中金字塔的基本堆栈由5个金字塔组成。从您的打印输出可以清楚地看出问题所在。告诉我们您认为问题是什么,解决方案是什么。这与预期的结果完全不同。基数由5个星号组成,而输出包含7个星号。您添加了一个额外的stackRight,我给出的示例是针对
h=4
。它将在
h=3
上显示5个星号。OP并没有说所有的金字塔都应该有5底。
            *  
           *** 
          *****
       *    *    *  
      ***  ***  *** 
     ***************
  *    *    *    *    *  
 ***  ***  ***  ***  *** 
*************************