python循环判断应用二(三级实现菜单)

作业要求:

多级菜单
  • 三级菜单
  • 可依次选择进入各子菜单
  • 所需新知识点:列表、字典

1.需要建立数据字典列表如下,例子如下。

 1 dcit = {
 2               '北京':{'西城区':{'西直门':['肯德基','麦当劳'],'动物园':['公园','服装市场']},
 3                         '东城区':{'东单':['DQ冰淇凌','八喜'],'三里屯':['酒吧','工体']},
 4                         '朝阳区':{'北辰':['鸟巢','水立方'],'国展':['CBD','大型商场']}},
 5               '上海':{'黄浦区':{'城隍庙':['书店','水煎包'],'黄埔一路':['赛百味','成都小吃']},
 6                         '长宁区':{'一街':['豪宅','服装店'],'二街':['肯德基','和路雪']},
 7                         '宝山区':{'101路':['乐器店','篮球场'],'202路':['酒吧','书店']}},
 8               '广州':{'天河区':{'一桥':['足球场','球衣店'],'二桥':['大型商场','酒吧']},
 9                         '越秀区':{'1区':['公园','中学'],'2q区':['链家','我爱我家']}}
10               }  

 

2.根据开启字典列表形式来实现多级内容显示。循环出一记列表,

 

1     for cy in enumerate(f_city.keys()): #打印第一层城市(循环出来)用enumerate来标记数字次序
2         print("%s:%s" %cy) #依照数字方式打印城市

 3.根据选择循环出二级菜单,【】里面的值是选在的数值,二级和三级如下:

for aa in enumerate(f_city[mm[num]].keys()):# 打印二级城市或区,用enumerate来标记数字次序
         print("%s;%s" %aa)


for st in enumerate(f_city[mm[num]][mmm[numm]].keys()):
         print("%s;%s" %st)



#其中mm mum mmm mumm 都是变量值

4.本次使用了数据类型判断格式,.isdigit()参数,当一个值为数字时给出值为真,否则不为真。案例如下:

num= input('请选择:').strip()    #让其输入选择 strip()内容去除空格  
nums = num.isdigit()            # 值得判断结果给于定义
print (nums)                    #当输入的为数字类型数据时候打印出来的值为真,否则不为真。

流程图:

  

 

不多说具体看代码

 1 #! /usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 # Author: Delong Wang
 4 import  sys
 5 f_city = {'深圳':{'罗湖区':{'黄贝':['黄贝岭','新秀','水库'],'东门':['商业街','步行街']},
 6                     '福田区':{'南园':['南园村','滨河大道'],'梅林':['上梅林','下梅林']},
 7                    '龙华新区':{'龙华':['清湖','万众城'],'观澜':['汽车车站','富士康']}},
 8               '菏泽':{'牡丹区':{'三角花园':['东方广场','牡丹园'],'东区':['火车站','瓜子长']},
 9                     '巨野县':{'巨野镇':['师范','永丰'],'柳林镇':['一中学','胜利村']},
10                     '新区城区':{'定陶':['万福河','机场'],'沙土集':['食品厂','沙土城']}},
11               '青岛':{'崂山区':{'五四大街':['五四广场','海边捞'],'崂山镇':['啤酒广场','农配市场']},
12                         '黄岛区':{'黄岛弯':['海滩广场','发电厂'],'开发街':['汽车站','大学城']},
13                         '市北区':{'渔场':['批发市场','天然养殖'],'啤酒厂':['供水站','压花站']}},
14               '武汉':{'汉阳区':{'五里墩':['五里墩街道办','汉阳大道385号'],'江汉二桥':['摆渡','靶场']},
15                         '武昌区':{'杨园':['街道办','永发厂'],'积玉桥':['肯德基','玉桥城']},
16                         '江汉区':{'林业厂':['中山公园','解放公园'],'大湖城':['西湖','东湖']}},
17               '广州':{'黄埔区':{'南海神庙':['庙会站','牌坊'],'黄埔军校':['旧址','旅游路']},
18                         '越秀区':{'洪桥':['洪桥小学','洪桥餐馆'],'东风':['东风路','东风街道']},
19                     '天河区':{'新塘':['信盈城','大丰大厦'],'猎德':['海风路','广西银行']}},
20               }
21 bj = 1  #定义一个标签
22 while True: #使用while循环!!!
23     if bj == 0: #判断标签值 与相等时退出
24         break
25     for cy in enumerate(f_city.keys()): #打印第一层城市(循环出来)用enumerate来标记数字次序
26         print("%s:%s" %cy) #依照数字方式打印城市
27     print('选择q退出当前窗口!!!')  #提示用户退出选择
28     s_numb = input('请输入选择:').strip() #提示输出框
29     s_numbs = s_numb.isdigit() #值得判断结果给于定义
30     if s_numb == 'q': #判断为q时
31         print('你选在了退出') #打印提示符
32         break #跳出循环
33     elif s_numb == '' or s_numbs == False: #and int(s_numb) :#为空时或非数字时
34         print('输入错误!!!')
35         continue #跳出本次循环
36     elif int(s_numb) >= len(f_city.keys()): #当输入的值大于或等于对列数量(城市数量)时打印下面的信息并退出本次循环
37         print('选在错误请在有效范围内选择')
38         continue
39     else:         #以上条件都不满足时候
40         num = int(s_numb) #转换输入的内容为数字
41         mm = list(f_city.keys()) #转换列表
42         print(mm[num]) #打印出城市
43         
44     while True:  # 使用while循环 做二次循环!!!
45         if bj == 0:  # 判断标签值 与相等时退出
46           break
47         for aa in enumerate(f_city[mm[num]].keys()):# 打印二级城市或区,用enumerate来标记数字次序
48             print("%s;%s" %aa)
49         print("q退出,b返回上一级") #提示选择
50         ss_numb = input('请选择:').strip() #让其输入选择 strip()内容去除空格
51         ss_numbs = ss_numb.isdigit()  # 值得判断结果给于定义
52         if ss_numb == 'q': #选择q 打印下面的东西并退出本次循环
53             print('选择了退出!')
54             bj = 0  # 等一标签值
55             break
56         elif ss_numb == 'b': #选择b打印返回上级
57             print("返回上级菜单")
58             break #退出本次循环
59         elif ss_numb == ''or ss_numbs == False : #判断为空时
60             print("输入错误!!!")
61             continue
62         elif int(ss_numb) >= len(f_city[mm[num]].keys()): # 输入大于数量时
63             print("超出选择范围")
64             continue
65         else:
66             numm = int(ss_numb) #转换输入变量
67             mmm = list(f_city[mm[num]].keys()) #转换列表
68             print(mm[num],">>",mmm[numm]) #列出结果
69 
70         while True:  # 使用while循环 做二次循环!!!
71             if bj == 0:  # 判断标签值 与相等时退出
72                 break
73             for st in enumerate(f_city[mm[num]][mmm[numm]].keys()):
74                 print("%s;%s" %st)
75             print("q退出,b返回上一级")
76             sss_numb = input('请选择:').strip()
77             sss_numbs = sss_numb.isdigit()  # 值得判断结果给于定义
78             if sss_numb == 'q':
79                 print('选择了退出!')
80                 bj = 0  # 等一标签值
81                 break
82             elif sss_numb == 'b':
83                 print("返回上级菜单")
84                 break  # 退出本次循环
85             elif sss_numb == ''or sss_numbs == False:
86                 print("输入错误!!!")
87                 continue
88             elif int(sss_numb) >= len(f_city[mm[num]][mmm[numm]].keys()):
89                 print("超出选择范围")
90                 continue
91             else:
92                 nummm = int(sss_numb)
93                 mmmm = list(f_city[mm[num]][mmm[numm]].keys())
94                 print(mm[num],">>",mmm[numm],">>>",mmmm[nummm])
95                 print("      >>>>>",f_city[mm[num]][mmm[numm]][mmmm[nummm]])
96                 sys.exit()
具体代码

 

posted @ 2016-08-28 11:37  DelongWang  阅读(212)  评论(0)    收藏  举报