如何"upgrade" 沙漏模式生成器?

How to "upgrade" hourglass pattern generator?

我正在使用 Python 中的模式进行练习,我为 n=5 做了一个沙漏模式,但是当我尝试使用其他奇数时,例如n==7,毁了。有什么关于如何升级我的代码的建议吗?

def hourglass(num_of_rows):
    #upper piece
    for i in range(num_of_rows-(num_of_rows//2)):
        print(' '*i+ character*(num_of_rows-2*i))
    #lower piece without the middle one
    for j in range(num_of_rows-1-(num_of_rows//2), -1, -2):
        print(' '*(j-1) +character*(num_of_rows-j))

num_of_rows=5
character = 'x'
hourglass(num_of_rows)

不是对你所做的精确升级,你可以使用递归来获得你想要的。但是,如果 n 是偶数,这将不起作用,我不知道偶数的沙漏如何,如果您指定,我可以相应地更改它。 str.center 可用于填充而不进行任何这些数学计算。如果需要任何解释,请告诉我。

def hour_glass(n, character, width=None):
    if width is None:
        width = n
    if n == 1:
        print(character.center(width))
        return
    to_print = (character * n).center(width)
    print(to_print)
    hour_glass(n - 2, character, width)
    print(to_print)

输出

hour_glass(7, 'X')

XXXXXXX
 XXXXX 
  XXX  
   X   
  XXX  
 XXXXX 
XXXXXXX

hour_glass(5, 'X')

XXXXX
 XXX 
  X  
 XXX 
XXXXX