如何打印完整金字塔的金字塔?



我是一个新手程序员,最近我们的任务是打印一个完整的星号金字塔,根据输入的行数,然后打印这些金字塔的金字塔。

当用户输入Number of Rows: 4时,我期望的输出基本上是:

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

这是我使用循环所能做的最好的。

rowInput = int(input("Number of Rows: "))
rowCount = 0
min = rowInput
max = rowInput
while (rowCount < rowInput):
digit = 1
while (digit < min): 
print(end=" ")
digit += 1
while (digit >= min and digit <= max):
print(end="*")
digit += 1

print()
min -= 1
max += 1
rowCount += 1

输入:

Number of Rows: 4

输出:

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

我认为它可以与顶部的另一个循环工作,但我想不出一个可行的方法来增加两个三角形之间的空间。还有其他选择吗?

您可以使用嵌套的列表推导来构建要打印的行列表,但这有点复杂。

rows = 4
lines = [" "*(rows-r//2-1)*(2*rows-1) +  f"{'*'*i:^{2*rows-1}}"*r
for r in range(1,2*rows+1,2)
for i in range(1,2*rows+1,2)]
print(*lines,sep='n')
*   
***  
***** 
*******
*      *      *   
***    ***    ***  
*****  *****  ***** 
*********************
*      *      *      *      *   
***    ***    ***    ***    ***  
*****  *****  *****  *****  ***** 
***********************************
*      *      *      *      *      *      *   
***    ***    ***    ***    ***    ***    ***  
*****  *****  *****  *****  *****  *****  ***** 
*************************************************

为了更容易理解代码,For循环可能更好:

rows = 4
width = 2*rows-1                          # width of one pyramid
for r in range(1,rows+1):                 # row with r pyramids
indent = " "*(rows-r)*width           # indent pyramids
for p in range(rows):                 # pyramid lines 
fill = "*"*(2*p+1)                # filled width/stars for line
print(indent+(2*r-1)*f"{fill:^{width}}") # repeated pyramid stars

解决这个问题的另一个好方法是将问题分解成更小的部分,然后在单独的函数中实现。将执行小任务的功能组合起来,可以更容易地实现和测试您的解决方案:

# produce lines for one pyramid
def pyramid(n):
return [f"{'*'*r:^{2*n-1}}" for r in range(1,2*n+1,2)]
# combine pyramids horizontally
def pyramidRow(count,n): 
return [count*line for line in pyramid(n)]
width = 2*rows-1                          # width of one pyramid
for r in range(1,rows+1):                 # row of r pyramids
indent = " "*width*(rows-r)           # indent pyramids 
for line in pyramidRow(2*r-1,rows):   # print repeated pyramids
print(indent+line)

测试:

for line in pyramid(4): print(line)
*   
***  
***** 
*******
for line in pyramidRow(3,4): print(line)
*      *      *   
***    ***    ***  
*****  *****  ***** 
*********************

相关内容

  • 没有找到相关文章

最新更新