如何 "升级 "沙漏图案发生器?

0 人关注

我在做一个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)
    
python
hourglass
Arttech
Arttech
发布于 2021-02-28
1 个回答
python_user
python_user
发布于 2021-02-28
已采纳
0 人赞同

这不是对你所做工作的精确升级,你可以使用递归来获得你想要的东西。但是,如果 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)

Output

hour_glass(7, 'X')
XXXXXXX
 XXXXX 
 XXXXX 
XXXXXXX
hour_glass(5, 'X')
XXXXX