介绍:

利用函数递归实现

理论上可生成N级

支持返回上级



原创作品,转载注明出处。

#!-*-coding:utf-8-*-__author__='David'classCreateMenu(object):def__init__(self):self.temp_menu={}#临时菜单,存储每级菜单的字典。defrun(self,menu_dict,initial=0):''':parammenu_dict:原始菜单字典,格式:{1:{2:{3:{4:{5:'value'}}}}},可以返回5的值:paraminitial:菜单等级控制参数,默认0级,最上层菜单:return:返回值是字典中最小参数值,字符串格式。'''self.temp_menu[initial]=menu_dictiftype(menu_dict)isdict:temp={}i=1#菜单标号数字#生成选择菜单fork,vinmenu_dict.items():t=str(i)temp[t]=kprint('{}:{}'.format(i,k))i+=1print('0','back')choose=input('-->:').strip()ifchoose.isdigit():#判断如果输入的是数字,继续判断选择的是哪一项ifchoose=='0'andinitial==0:#等于0,并且和初始菜单一样,不做任何操作returnself.run(menu_dict,initial)elifchoose=='0':#等于0,不和初始菜单一样,则返回delself.temp_menu[initial]#从临时层级列表里删除本级initial-=1#修改完上一级参数returnself.run(self.temp_menu[initial],initial)elifint(choose)>iorint(choose)<1:#如果选择的数字超出选项值,报错,重新运行当前菜单print('InputError!')returnself.run(menu_dict,initial)else:#正常进入下级菜单print(temp[choose])initial+=1#菜单层级加1menu_dict=menu_dict[temp[choose]]#获取选择的选项值iftype(menu_dict)isdict:#如果选择的值是字典,则判断为有子菜单returnself.run(menu_dict,initial)#显示子菜单选项else:#如果不是字典,则返回选项对应的值returnmenu_dictelse:#如果不是数字,再运行一遍函数,参数都是和之前一样的print('InputError!')returnself.run(menu_dict,initial)else:#如果输入的参数不是字典则报错。print('DatatypeisError!')if__name__=='__main__':teacher_menu={'管理班级':{'创建班级':'create_grade','添加学员':'add_stu'},'上课':'create_record','管理成绩':'mgr_grade','退出':'exit'}menu=CreateMenu()value=menu.run(teacher_menu)print('<value:{}>'.format(value))