您的實際問題是由於您的遞歸實際上並未返回內部框架的值,但消除遞歸似乎是更直接的解決方案。
這是什麼愚蠢的是做一個循環內的遞歸。遞歸和循環都用於相同的目的:使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