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')
x = input('What option do you choose: ')
print('\n')
if x == 'Q':
break
else:
Help(x)
如果它进入else语句,它将如何继续循环? 例如:
“可用选项包括:
意图
清单
键入Q退出
您选择了什么选项:“< - 这将继续出现以及我选择的功能。
答案 0 :(得分:1)
你甚至不需要一个while循环来检查你的内容。请改用:
def Help(string):
if string == 'Manifest':
return Manifest()
elif string == 'Intent':
return Intent()
else:
print('The options available are:\n%s\nType Q to Quit\n' % '\n'.join(andHelp))
x = input('What option do you choose: ')
print('\n')
if x != 'Q':
Help(x)
注意:我稍微修改了你的打印件以减少真正的,不需要在那里的额外线条。
note2:正如您在评论中看到的那样,在没有限制的情况下递归执行此操作可能会有危险,因为您可能会达到最大深度级别。
答案 1 :(得分:1)
您的实际问题是由于您的递归实际上没有返回内部框架的值,但是消除递归似乎是一种更直接的解决方案。
关于这一点的愚蠢是在循环内进行递归。递归和循环都有相同的目的:使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