我的主菜单有以下代码:
>>> def mainmenu ():
d = ''
while d == '':
print ('\nM A I N M E N U')
print ('1. Settings')
print ('q. Quit')
option = input ('Select an option: ')
if option.lower () == 'q':
sys.exit ()
elif option == '1':
d = submenu ()
else:
print ('Invalid selection!')
return d
>>>
子菜单代码:
>>> def submenu ():
p = ''
while p == '':
print ('\nS U B M E N U')
print ('1. Perform an action')
print ('b. Back')
print ('q. Quit')
option = input ('Select an option: ')
if option.lower () == 'q':
sys.exit ()
elif option.lower () == 'b':
mainmenu ()
return
elif option == '1':
p = 'Do something'
else:
print ('Invalid selection!')
return p
>>>
每当我从子菜单发出“返回”命令返回主菜单时,整个菜单系统就会崩溃。似乎父菜单继续停止调用另一个子菜单实例
p = ''
导致值为空。
以下是所述错误的示例:
>>> value = mainmenu ()
M A I N M E N U
1. Settings
q. Quit
Select an option: 1
S U B M E N U
1. Perform an action
b. Back
q. Quit
Select an option: b
M A I N M E N U
1. Settings
q. Quit
Select an option: 1
S U B M E N U
1. Perform an action
b. Back
q. Quit
Select an option: 1
>>>
>>> value
>>>
但是,如果我从子菜单中选择“选项1”并且不使用“后退”选项,则一切都按预期工作。
>>> value = mainmenu ()
M A I N M E N U
1. Settings
q. Quit
Select an option: 1
S U B M E N U
1. Perform an action
b. Back
q. Quit
Select an option: 1
>>>
>>> value
'Do something'
>>>
如何修复“后退”选项功能?
我试图在主菜单的选项1下面插入一个return语句,以及我能想到的每个地方,但它没有用。我缺乏一些逻辑,非常感谢任何解释或帮助。
...
elif option == '1':
d = submenu ()
return
...
更新1
- 在option =='1'下为mainmenu添加了一个变量“msg”并返回一个元组。
def mainmenu ():
d = ''
msg = '' # Added in Update #1
while d == '':
print ('\nM A I N M E N U')
print ('1. Settings')
print ('q. Quit')
option = input ('Select an option: ')
if option.lower () == 'q':
sys.exit ()
elif option == '1':
msg = 'Option 1' # Added in Update #1
d = submenu ()
else:
print ('Invalid selection!')
return msg, d # Modified in Update #1
- 在main()
中解压缩并打印元组message, action = mainmenu ()
print ('\nMessage: ', message)
print ('Action: ', action)
以下答案有效,但在选择选项'b'时引入了另一个问题。
M A I N M E N U
1. Settings
q. Quit
Select an option: 1
S U B M E N U
1. Perform an action
b. Back
q. Quit
Select an option: b
M A I N M E N U
1. Settings
q. Quit
Select an option: 1
S U B M E N U
1. Perform an action
b. Back
q. Quit
Select an option: 1
Message: Option 1
Action: ('Option 1', 'Do something') # <<<<<< Return a Tuple?
该语句返回一个元组,我已经从main()中解压缩了它。这是一个未选择选项'b'的工作示例。
M A I N M E N U
1. Settings
q. Quit
Select an option: 1
S U B M E N U
1. Perform an action
b. Back
q. Quit
Select an option: 1
Message: Option 1
Action: Do something
答案 0 :(得分:0)
这种情况正在发生,因为您正在返回None
。
elif option.lower () == 'b':
mainmenu ()
return
您的代码是递归调用mainmenu()
,因此当您按1时,所有返回值都会爬回“top”,并且在该过程中您引入了NoneType
。
只需返回该功能即可。
elif option.lower () == 'b':
return mainmenu ()
答案 1 :(得分:0)
如上所述,问题是子菜单中主菜单的递归调用。换句话说,子菜单每次创建主菜单的新实例,然后返回&#34;键是按下的。要解决它,只需返回主菜单而不调用另一个主菜单。
来自子菜单:
elif option.lower () == 'b':
return
此方法将返回&#34;无&#34;对于主菜单,while循环将需要考虑到这一点。
def mainmenu ():
d = None
msg = ''
while d is None:
....