标签:全局 方便 choice lag div 最好 代码 == als
要求:
1.可以进入子菜单
2.可以返回上一级
3.可以从任意一级直接退出
基础版:(主要运用到了字典的读取)
#以字典的格式存放,方便调用 data={ ‘河北‘:{ ‘保定‘:{ ‘曲阳‘:[‘燕赵‘,‘党城‘], ‘阜平‘:[‘平阳‘,‘山子头‘] }, ‘邢台‘:{ ‘桥东区‘:[‘邢台学院‘,‘天一广场‘], ‘桥西区‘:[‘北国商城‘,‘科技大厦‘] }, ‘石家庄‘:{ ‘裕华区‘:[‘河北科技大学‘,‘河北师范大学‘], ‘长安区‘:[‘河北医科大学‘,‘河北地址大学‘] } }, ‘北京‘:{ ‘海淀‘:{ ‘清华‘:[‘荷塘月色‘,‘牡丹园‘], ‘北京大学‘:[‘博雅塔‘,‘未名湖‘] }, ‘朝阳‘:{ ‘中国传媒大学‘:[‘新闻‘,‘播音‘], ‘北京工业大学‘:[‘计算机‘,‘软件工程‘] }, ‘延庆‘:{ ‘八达岭长城‘:[‘北长城‘,‘南长城‘], ‘野生动物园‘:[‘老虎‘,‘狮子‘] } } } exit_flag=False #设置全局变量,用来退出循环,实现任意一级菜单都可以退出 while not exit_flag: for i1 in data:#读取第一级菜单 print(i1) choice=input(‘选择进入1,第一级,按q退出‘) if choice in data: while not exit_flag: for i2 in data[choice]:#读取第二级菜单 print(i2) choice2 = input(‘选择进入2,按b返回上一级,按q退出‘) if choice2 in data[choice]: while not exit_flag: for i3 in data[choice][choice2]:#读取第三级菜单 print(i3) choice3 = input(‘选择进入3,按b返回上一级,按q退出‘) if choice3 in data[choice][choice2]: for i4 in data[choice][choice2][choice3]: print(i4) choice4 = input(‘最后一层,按b返回上一级,按q退出‘) if choice4==‘b‘: pass #占位符 if choice4 == ‘q‘: exit_flag = True if choice3==‘b‘: break if choice3 == ‘q‘: exit_flag = True if choice2==‘b‘: break if choice2 == ‘q‘: exit_flag = True if choice==‘q‘: exit_flag=True
瑕疵版(主要运用了函数的递归调用,使用了global定义局部变量,这样定义的局部变量可以修改全局变量。不到万不得已,不可使用global)
exit_flag=False #以字典的格式存放,方便调用 data={ ‘河北‘:{ ‘保定‘:{ ‘曲阳‘:[‘燕赵‘,‘党城‘], ‘阜平‘:[‘平阳‘,‘山子头‘] }, ‘邢台‘:{ ‘桥东区‘:[‘邢台学院‘,‘天一广场‘], ‘桥西区‘:[‘北国商城‘,‘科技大厦‘] }, ‘石家庄‘:{ ‘裕华区‘:[‘河北科技大学‘,‘河北师范大学‘], ‘长安区‘:[‘河北医科大学‘,‘河北地址大学‘] } }, ‘北京‘:{ ‘海淀‘:{ ‘清华‘:[‘荷塘月色‘,‘牡丹园‘], ‘北京大学‘:[‘博雅塔‘,‘未名湖‘] }, ‘朝阳‘:{ ‘中国传媒大学‘:[‘新闻‘,‘播音‘], ‘北京工业大学‘:[‘计算机‘,‘软件工程‘] }, ‘延庆‘:{ ‘八达岭长城‘:[‘北长城‘,‘南长城‘], ‘野生动物园‘:[‘老虎‘,‘狮子‘] } } } def func_choice(kwargs): ‘‘‘函数说明‘‘‘ global exit_flag #定义一个可以修改全局变量的局部变量,以便程序可以随时退出 while not exit_flag: for i in kwargs: print(i) choice=input("选择进入,按b返回上一级,按q退出") if choice in kwargs: func_choice(kwargs[choice])#递归调用 if choice==‘q‘: exit_flag=True if choice==‘b‘: break func_choice(data)
此版本中还要说明一点,虽然data的存储类型为字典,但是此字典中还嵌套了列表,所以在定义参数时,不能定义为(**kwargs),否则会出现以下错误:
成熟版(主要运用了列表。个人认为这个版本最好,代码简洁,利于理解)
exit_flag=False #以字典的格式存放,方便调用 data={ ‘河北‘:{ ‘保定‘:{ ‘曲阳‘:[‘燕赵‘,‘党城‘], ‘阜平‘:[‘平阳‘,‘山子头‘] }, ‘邢台‘:{ ‘桥东区‘:[‘邢台学院‘,‘天一广场‘], ‘桥西区‘:[‘北国商城‘,‘科技大厦‘] }, ‘石家庄‘:{ ‘裕华区‘:[‘河北科技大学‘,‘河北师范大学‘], ‘长安区‘:[‘河北医科大学‘,‘河北地址大学‘] } }, ‘北京‘:{ ‘海淀‘:{ ‘清华‘:[‘荷塘月色‘,‘牡丹园‘], ‘北京大学‘:[‘博雅塔‘,‘未名湖‘] }, ‘朝阳‘:{ ‘中国传媒大学‘:[‘新闻‘,‘播音‘], ‘北京工业大学‘:[‘计算机‘,‘软件工程‘] }, ‘延庆‘:{ ‘八达岭长城‘:[‘北长城‘,‘南长城‘], ‘野生动物园‘:[‘老虎‘,‘狮子‘] } } } count=0 last_rank = [] while not exit_flag: for i in data: print(i) if count==3: print("到达最后一层,按q退出,按b返回") elif count==0: print("当前是第一层,按q退出") else: print("当前为第%s层" % (count+1)) choice = input(‘>:‘).strip() count+=1 if choice in data: last_rank.append(data) # 将当前菜单添加到列表(列表中的每一个元素为一个字典) data = data[choice] # 进入下一层菜单 elif choice == ‘b‘: if len(last_rank) != 0: data = last_rank.pop() # 删除列表最后一位元素,从而返回上一层 elif choice == ‘q‘: exit_flag = True
执行结果如下图所示:
欢迎各位大神测试并指正,谢谢!
标签:全局 方便 choice lag div 最好 代码 == als
原文地址:https://www.cnblogs.com/come-on-baby/p/9381753.html