python第四天 三级菜单新思路

今天是一个坎,在做三级菜单时卡住了,因为想要简洁的代码,就要用到递归函数,卡的不要不要的!不过最后在同学老师的提点帮助下,还是解决了!

2017-5-10发现之前的代码有BUG今天 修改了!

作业要求:

三级菜单:
1. 运行程序输出第一级菜单
2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单
3. 菜单数据保存在文件中

文件操作还没有学到,暂时做到1,2两点,第3点明后天补上!

照旧,先上一下流程图:

详细代码: 

 

 1 #!usr/bin/env python
 2 #-*-coding:utf-8-*-
 3 # Author calmyan
 4 menu_file=open("menu.txt",'r',encoding='utf-8')#打开菜单文件
 5 info=eval(menu_file.readline())#转换菜单文件中的字符串
 6 global conut,_tab,exit_flag
 7 
 8 _tab='\t\t'
 9 
10 exit_flag = True
11 def menu_open(info):#递归函数 传入下一层菜单
12     global exit_flag,conut#声明全局变量
13     exit_flag=True#先为真
14     while exit_flag:
15         conut+=1
16         _tab2=_tab.expandtabs(tabsize=(conut*3))#为了增加菜单的可读性,按层级来加tab键
17         for i in info:
18             print(_tab2,i)
19         if conut==4:
20             name=input("当前为第\033[35;1m%s\033[0m是最后一层 按B/b返回<<<  按Q/q退出:"%conut)
21             name=name.strip()
22             if name=='b' or name=='B':
23                 conut-=2#因数进行循环就加一,所以需要减2
24                 break
25             elif name=='Q' or name=='q':
26                 print("你已经退出菜单!")
27                 exit_flag=False
28                 break
29             else:
30                 conut-=1
31                 print("你输入的目录不存在!")
32                 continue
33         if conut<4:#判断菜单层级不是最底层加一
34             name=input("当前为第 \033[32;1m%s\033[0m 层,请输入名称进入下一层>>> 按B/b返回<<<  按Q/q退出:"% conut)
35             name=name.strip()
36             if name=='b' or name=='B':
37                 conut-=2#因数进行循环就加一,所以需要减2
38                 break
39             elif name=='Q' or name=='q':
40                 print("你已经退出菜单!")
41                 exit_flag=False
42                 break
43             elif name in info:#如果存在并不是最后一层则调用函数
44                 menu_open(info[name])
45             else:
46                 conut-=1
47                 print("你输入的目录不存在!")
48                 continue
49 
50 while exit_flag:
51     for  i in info:
52         print(i)
53     conut=1
54     name=input("当前为第\033[32;1m %s\033[0m 层,请输入名称进入下一层>>>  按Q/q退出:"%conut)
55     name=name.strip()
56     if name=='Q' or name=='q':
57         print("你已经退出菜单!")
58         exit_flag=False
59     elif name in info:
60 
61         menu_open(info[name])
62     else:
63         print("你输入的目录不存在!")
64         continue
View Code

 

 

 

菜单内容比较少,将就着吧,回头有空再让它丰满起来!

 

 

 1 #以下代码复制到python(3.6.2rc2)下 按F5 可以正常执行,对比学习。#QQ:124111294欢迎交流py
 2 #三级菜单
 3 menu = {
 4     '北京':{
 5         '海淀':{
 6             '五道口':{
 7                 'soho':{},
 8                 '网易':{},
 9                 'google':{}
10             },
11             '中关村':{
12                 '爱奇艺':{},
13                 '汽车之家':{},
14                 'youku':{},
15             },
16             '上地':{
17                 '百度':{},
18             },
19         },
20         '昌平':{
21             '沙河':{
22                 '老男孩':{},
23                 '北航':{},
24             },
25             '天通苑':{},
26             '回龙观':{},
27         },
28         '朝阳':{},
29         '东城':{},
30     },
31     '上海':{
32         '闵行':{
33             "人民广场":{
34                 '炸鸡店':{}
35             }
36         },
37         '闸北':{
38             '火车战':{
39                 '携程':{}
40             }
41         },
42         '浦东':{},
43     },
44     '山东':{},
45 }
46 
47 # while not  exit_flag    <如果条件为假执行循环>
48 # for k in current_layer  <条件循环>
49 #        print(k)        <打印>
50 # input<输入>
51 # .strip()#strip([chars]) <删除字符串前边和后边所有的空格,chars参数可以指定删除的字符,可选>
52 # if <条件判断>
53 # layers.pop()  <删除>
54 # elif choice not  in  <条件判断>
55 # continue <跳出本次循环,重新循环>
56 # else <否则,当if条件不成立时执行>
57 # .append<附加>
58 # choice<选择>
59 
60 exit_flag = False
61 current_layer = menu
62 
63 layers = [menu]
64 
65 while not  exit_flag:
66     for k in current_layer:
67         print(k)
68     choice = input(">>:").strip()
69     if choice == "b":
70         current_layer = layers[-1]
71         #print("change to laster", current_layer)
72         layers.pop()
73     elif choice not  in current_layer:continue
74     else:
75         layers.append(current_layer)
76         current_layer = current_layer[choice]
77 
78 #以下代码复制到python(3.6.2rc2)下 按F5 可以正常执行,对比学习。QQ:124111294欢迎交流py
三级菜单新思路

 

posted @ 2017-05-06 13:28  莫柔落切  阅读(687)  评论(0编辑  收藏  举报