我试图以递归方式打印出一个空心方块。我无法弄清楚如何重新编写函数def hollowSquare()
来进行递归调用
注意:我必须在hollowSquare函数中有3个参数用于此赋值,count用于跟踪我绘制的位置。
def validateInput():
n =True
while n != False:
height = int(input("Please enter the height of you square (must be > 0): "))
if height < 0:
validateInput()
else:
symb = input("Please enter a character for your square:")
return(height,symb)
def hollowSquare(height,symb,count):
innerSquare = height -2
print ('*' * height)
for i in range(innerSquare):
print ('*' + ' ' * innerSquare + '*')
print ('*' * height)
def main():
height,symb = validateInput()
count =0
hollowSquare(height,symb,count)
main()
答案 0 :(得分:1)
count
变量未在循环版本中使用,因此我要说的是&#34;循环计数器&#34;&#34;对于递归版本。您可以将其设置为默认参数并从0开始,这样就不必使用显式0调用它,如下所示。为函数提供一种方法来确定它是应该停止还是继续重复,请在if count < height-1: .. else:
下面显示。如果没有时间停止,它会检查它是否是第一行,在这种情况下它会打印起始行。否则,它会打印其中一个中间行。然后是递归调用,它将再次执行该过程。当count < height-1
不再为真时,它将打印结束行并停止重复。请注意,我已使用'*'
替换了您的硬编码symb
。
我已经调用了每个函数进行测试。
def hollowSquare(height, symb, count=0):
if count < height-1:
if not count:
print (symb * height)
else:
print (symb + ' ' * (height-2) + symb)
hollowSquare(height, symb, count+1)
else:
print (symb * height)
hollowSquare(5, '*')
print('-----')
def hollowSquare(height,symb,count):
innerSquare = height -2
print ('*' * height)
for i in range(innerSquare):
print ('*' + ' ' * innerSquare + '*')
print ('*' * height)
hollowSquare(5, '*', 0)