初学 python 之 多级菜单实现原理
要求实现多级菜单:1,实现4级菜单
2,每一级都可以选择进入下一级或者返回上一级,或者退出
所需知识:
一,字典
字典可以嵌套字典,也可以嵌套列表
1 >>> data = {'name' : {'a': [1,2,3]}, 2 'age' : [11,33,36], 3 'hob' : 'body-building' 4 } 5 >>> print(data) 6 {'name': {'a': [1, 2, 3]}, 'age': [11, 33, 36], 'hob': 'body-building'}
查找
1 ... 2 >>> 'name' in data #标准用法 3 True 4 >>> data.get('name') # 获取 5 {'a': [1, 2, 3]} 6 >>> data['name'] # 同上,如果一个key不存在,就报错,get不会,不存在只返回None 7 {'a': [1, 2, 3]} 8 >>>
二, while loop
在多层循环中给break,continue无法满足需求时,设置一个标签来控制结束循环.
1 count = 0 2 exit_flag = False 3 while not exit_flag: 4 print("你是风儿我是沙,缠缠绵绵到天涯...", count) 5 count += 1 6 if count == 5: 7 print("去你妈的风和沙,你们这些脱了裤子是人,穿上裤子是鬼的臭男人..") 8 exit_flag = True
三, eval 用法
eval这一内置函数,可以把字符串当作可执行代码
把{'a':'1','b':'2'}直接保存成txt文件,用eval直接转成代码
1 >>> open('file1','w').write("{'a':'1','b':'2'}") 2 17 3 >>> f = open('file1','r') 4 >>> data = f.readline() #读取file1把值赋给data 5 >>> print(data) 6 {'a':'1','b':'2'} 7 >>> dict = eval(data) # 把data转成代码 8 >>> print(dict.keys()) 9 dict_keys(['a', 'b']) 10 >>> type(data) #data 是字符串 11 <class 'str'> 12 >>> type(dict) #dict 是字典 13 <class 'dict'> 14 >>>
优化方向:
1.在保证程序功能的前提下,增加重复代码的重用,减少代码量
代码
1 f = open('menu', 'r', encoding='utf-8') 2 data = eval(f.readline()) 3 4 def menu1(): # 定义打印目录1函数 5 for i in data: 6 print(i) 7 def menu2(x): # 定义打印目录2函数 8 for i in data[x]: 9 print('\t', i) 10 def menu3(x,y): # 定义打印目录3函数 11 for i in data[x][y]: 12 print('\t\t', i) 13 14 while True: 15 exit_flag = False 16 # 设置标签,用于最后一层直接跳到顶层,(必须在循环里面进行重置,不然无法进入下一层循环) 17 menu1() # 打印第一层目录 18 choice = input('请选择目录进入,退出请按q>>') 19 while not exit_flag: 20 if choice in data: 21 menu2(choice) # 打印第二层目录 22 choice2 = input('请选择录进入,返回上面请按b,退出请按q>>') 23 if choice2 in data[choice]: 24 while not exit_flag: 25 menu3(choice, choice2) # 打印第三层目录 26 choice3 = input('返回上面请按b,退回顶层请按t,退出请按q>>') 27 if choice3 == 'b': 28 break # 跳出本层至上一层 29 elif choice3 == 't': 30 exit_flag = True # 改变标签,跳至顶层 31 elif choice3 == 'q': 32 print("谢谢使用,再见!") 33 exit() # 直接退出程序 34 else: 35 print('选择错误!') 36 continue 37 # 输入错误时,提醒然后重新输入(本层循环打印目录三),不能用break跳出 38 elif choice2 == 'b': 39 break # 跳出本层至上一层 40 elif choice2 == 'q': 41 print("谢谢使用,再见!") 42 exit() # 直接退出程序 43 else: 44 print('选择错误!') 45 continue 46 # 输入错误时,提醒然后重新输入(本层循环打印目录二),不能用break跳出 47 elif choice == 'q': 48 print("谢谢使用,再见!") 49 exit() # 直接退出程序 50 else: 51 print('选择错误!') 52 break # 和第一层循环用while True 关系,这里需要跳出循环 否则死循环
____author___JayeHe