您的实际问题是由于您的递归实际上并未返回内部框架的值,但消除递归似乎是更直接的解决方案。
这是什么愚蠢的是做一个循环内的递归。递归和循环都用于相同的目的:使option
选择继续发生,直到给出有效的选项。所以,你绝对可以消除一个:
def Help(string):
while True:
if string == 'Manifest':
return Manifest()
break
elif string == 'Intent':
return Intent()
break
else:
print('The options available are: \n')
for i in andHelp:
print(i)
print('Type Q to Quit \n')
string = input('What option do you choose: ') # Change `x` to `string` so next iteration will change behavior
print('\n')
if string == 'Q':
break
由于Inbar Rose's answer指出,可以缩短这个颇有几分递归,但因为Python需要一个递归限制,你可以迫使它再次出现超出使程序崩溃限制。所以或许坚持循环更好。无论如何,您可以通过验证string
作为回路本身的条件来进一步清理它:
def Help(string):
validOptions = ('Manifest', 'Intent', 'Q')
while string not in validOptions:
print('The options available are: \n')
for i in andHelp:
print(i)
print('Type Q to Quit \n')
string = input('What option do you choose: ')
print('\n')
# Now you have a guaranteed-valid string, so you don't need this part in the loop.
if string == 'Manifest':
return Manifest() # No need for a 'break' after a return. It's [dead code](http://en.wikipedia.org/wiki/Dead_code)
elif string == 'Intent':
return Intent()
elif string == 'Q':
return
方法是如何进入的? – 2013-02-24 15:21:09
因为它是一个常数,无限循环。 – Linuxios 2013-02-24 15:21:12
会不会让它停止? – Dobz 2013-02-24 15:23:03