python 打印三级菜单


 

要求:

1、用户选择城市菜单编号显示对应的下级菜单

2、可以返回上级菜单,只有在用户确定正常退出时才退出

 

 1 #!/usr/bin/env python3
 2 # -*- coding: utf-8 -*-
 3 # __author__:cjx
 4 import sys
 5 
 6 china_map = {
 7     '山东': {
 8         '青岛': ['四方', '黄岛', '崂山', '李沧', '城阳'],
 9         '济南': ['历城', '槐荫', '高新', '长青', '章丘'],
10         '烟台': ['龙口', '莱山', '牟平', '蓬莱', '招远']
11     },
12     '江苏': {
13         '苏州': ['沧浪', '相城', '平江', '吴中', '昆山'],
14         '南京': ['白下', '秦淮', '浦口', '栖霞', '江宁'],
15         '无锡': ['崇安', '南长', '北塘', '锡山', '江阴']
16     },
17     '浙江': {
18         '杭州': ['西湖', '江干', '下城', '上城', '滨江'],
19         '宁波': ['海曙', '江东', '江北', '镇海', '余姚'],
20         '温州': ['鹿城', '龙湾', '乐清', '瑞安', '永嘉']
21     },
22     '安徽': {
23         '合肥': ['蜀山', '庐阳', '包河', '经开', '新站'],
24         '芜湖': ['镜湖', '鸠江', '无为', '三山', '南陵'],
25         '蚌埠': ['蚌山', '龙子湖', '淮上', '怀远', '固镇']
26     },
27     '广东': {
28         '深圳': ['罗湖', '福田', '南山', '宝安', '布吉'],
29         '广州': ['天河', '珠海', '越秀', '白云', '黄埔'],
30         '东莞': ['莞城', '长安', '虎门', '万江', '大朗']
31     }
32 }
33 
34 province_list = list(china_map.keys())    # 用list函数把字典的key生成列表并赋值
35 
36 while True:            # 最外层死循环
37     print(''.center(50, '*'))            # 利用字符串类型的方法打印提示符
38     for i,p in enumerate(province_list):    # 利用enumerate函数取出元素对应的索引及元素
39         print(i+1,p)            # 由于列表的索引是从0开始计数的,因此要 +1 展示更好合适
40     p_id = input('请输入要查看的省名称编号,退出请输入 q:')
41     if p_id.isdigit():
42         p_id = int(p_id)       # 把输入的编号转换成int型
43         if p_id > 0 and p_id <= len(province_list):   # 判断是否输入的是有效的
44             pro_name = province_list[p_id - 1]       # 用用户输入的编号取出对应的城市名,索引从0开始的,因此要 -1 才是对应的值
45             city_list = list(china_map[pro_name].keys())      # 根据用户输入,获取二级菜单列表
46             while True:                # 进入二级菜单死循环
47                 print(''.center(50, '*'))
48                 for i, c in enumerate(city_list):
49                     print(i+1, c)
50                 c_id = input('请输入你要查看的市名称编号,返回上一级请输入 b,退出请输入 q :')
51                 if c_id.isdigit():
52                     c_id = int(c_id)
53                     if 0 < c_id <= len(city_list):
54                         city_name = city_list[c_id-1]
55                         town_list = china_map[pro_name][city_name]
56                         while True:
57                             print(''.center(50, '*'))
58                             for i, t in enumerate(town_list):
59                                 print(i+1, t)
60                             b_or_q = input('已经到最后一层,返回上一级请输入 b,退出请输入 q :')
61                             if b_or_q == 'b':
62                                 break          # 跳出循环,即回到第一级循环
63                             elif b_or_q == 'q':
64                                 exit(0)
65                             else:
66                                 print('输入有误!')
67                     else:
68                         print('您输入的ID %d 不存在!' % c_id)
69                 elif c_id == 'b':
70                     break              # 跳出循环,即回到第二级循环
71                 elif c_id == 'q':
72                     sys.exit('正在退出 ......')
73                 else:
74                     print('无效输入')
75 
76         else:
77             print('您输入的ID %d 不存在!' % p_id)     # 如果输入的不是正确的范围提示输入的不存在
78     elif p_id == 'q':
79         exit()
80     else:
81         print('无法识别您的输入')       # 如果输入的不是可以转换成数字的字符就提示非法输入
View Code

 

 

运行效果演示:

*********************** 省 ************************
1 山东
2 江苏
3 浙江
4 安徽
5 广东
请输入要查看的省名称编号,退出请输入 q:5
*********************** 市 ************************
1 深圳
2 广州
3 东莞
请输入你要查看的市名称编号,返回上一级请输入 b,退出请输入 q :2
*********************** 县 ************************
1 天河
2 珠海
3 越秀
4 白云
5 黄埔
已经到最后一层,返回上一级请输入 b,退出请输入 q :b
*********************** 市 ************************
1 深圳
2 广州
3 东莞
请输入你要查看的市名称编号,返回上一级请输入 b,退出请输入 q :b
*********************** 省 ************************
1 山东
2 江苏
3 浙江
4 安徽
5 广东
请输入要查看的省名称编号,退出请输入 q:3
*********************** 市 ************************
1 杭州
2 宁波
3 温州
请输入你要查看的市名称编号,返回上一级请输入 b,退出请输入 q :q
正在退出 ......

 

原文:http://www.cnblogs.com/pyramid1001/p/5803294.html


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM