如何"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
我正在使用 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