要求实现多级菜单: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 关系,这里需要跳出循环 否则死循环
View Code