Ваша фактическая проблема связана с тем, что ваша рекурсия фактически не возвращает значение внутреннего фрейма, но устранение рекурсии кажется более простым решением.
То, что об этом говорит, это рекурсия внутри цикла. Как рекурсия, так и цикл служат той же цели: сделать выбор 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
Как метод вошел в первую очередь? –
Потому что это постоянный, бесконечный цикл. – Linuxios
перерыв не заставит его остановиться? – Dobz