初学 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 关系,这里需要跳出循环 否则死循环
View Code

 

 

 

 

    

posted on 2017-03-01 21:10  JayeHe  阅读(1296)  评论(0编辑  收藏  举报

导航