python 打印三级菜单
要求:
1、用户选择城市菜单编号显示对应的下级菜单
2、可以返回上级菜单,只有在用户确定正常退出时才退出
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# __author__:cjx
import sys china_map = {
'山东': {
'青岛': ['四方', '黄岛', '崂山', '李沧', '城阳'],
'济南': ['历城', '槐荫', '高新', '长青', '章丘'],
'烟台': ['龙口', '莱山', '牟平', '蓬莱', '招远']
},
'江苏': {
'苏州': ['沧浪', '相城', '平江', '吴中', '昆山'],
'南京': ['白下', '秦淮', '浦口', '栖霞', '江宁'],
'无锡': ['崇安', '南长', '北塘', '锡山', '江阴']
},
'浙江': {
'杭州': ['西湖', '江干', '下城', '上城', '滨江'],
'宁波': ['海曙', '江东', '江北', '镇海', '余姚'],
'温州': ['鹿城', '龙湾', '乐清', '瑞安', '永嘉']
},
'安徽': {
'合肥': ['蜀山', '庐阳', '包河', '经开', '新站'],
'芜湖': ['镜湖', '鸠江', '无为', '三山', '南陵'],
'蚌埠': ['蚌山', '龙子湖', '淮上', '怀远', '固镇']
},
'广东': {
'深圳': ['罗湖', '福田', '南山', '宝安', '布吉'],
'广州': ['天河', '珠海', '越秀', '白云', '黄埔'],
'东莞': ['莞城', '长安', '虎门', '万江', '大朗']
}
} province_list = list(china_map.keys()) # 用list函数把字典的key生成列表并赋值 while True: # 最外层死循环
print(' 省 '.center(50, '*')) # 利用字符串类型的方法打印提示符
for i,p in enumerate(province_list): # 利用enumerate函数取出元素对应的索引及元素
print(i+1,p) # 由于列表的索引是从0开始计数的,因此要 +1 展示更好合适
p_id = input('请输入要查看的省名称编号,退出请输入 q:')
if p_id.isdigit():
p_id = int(p_id) # 把输入的编号转换成int型
if p_id > 0 and p_id <= len(province_list): # 判断是否输入的是有效的
pro_name = province_list[p_id - 1] # 用用户输入的编号取出对应的城市名,索引从0开始的,因此要 -1 才是对应的值
city_list = list(china_map[pro_name].keys()) # 根据用户输入,获取二级菜单列表
while True: # 进入二级菜单死循环
print(' 市 '.center(50, '*'))
for i, c in enumerate(city_list):
print(i+1, c)
c_id = input('请输入你要查看的市名称编号,返回上一级请输入 b,退出请输入 q :')
if c_id.isdigit():
c_id = int(c_id)
if 0 < c_id <= len(city_list):
city_name = city_list[c_id-1]
town_list = china_map[pro_name][city_name]
while True:
print(' 县 '.center(50, '*'))
for i, t in enumerate(town_list):
print(i+1, t)
b_or_q = input('已经到最后一层,返回上一级请输入 b,退出请输入 q :')
if b_or_q == 'b':
break # 跳出循环,即回到第一级循环
elif b_or_q == 'q':
exit(0)
else:
print('输入有误!')
else:
print('您输入的ID %d 不存在!' % c_id)
elif c_id == 'b':
break # 跳出循环,即回到第二级循环
elif c_id == 'q':
sys.exit('正在退出 ......')
else:
print('无效输入') else:
print('您输入的ID %d 不存在!' % p_id) # 如果输入的不是正确的范围提示输入的不存在
elif p_id == 'q':
exit()
else:
print('无法识别您的输入') # 如果输入的不是可以转换成数字的字符就提示非法输入
运行效果演示:
*********************** 省 ************************
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
python 打印三级菜单的更多相关文章
- python打怪之路【第三篇】:利用Python实现三级菜单
程序: 利用Python实现三级菜单 要求: 打印省.市.县三级菜单 可返回上一级 可随时退出程序 coding: menu = { '北京':{ '朝阳':{ '国贸':{ 'CICC':{}, ' ...
- 【python】——三级菜单
作业需求: 打印三级菜单 可返回上一级 可随时退出程序 #!/usr/bin/env python # -*- coding:utf-8 -*- #Author: __Json.Zzgx__ menu ...
- python实现三级菜单间的前后跳转
#录入菜单def createMenu(): Menu = {} provinces = ["陕西","四川","江苏"] sh ...
- python之三级菜单
python之三级菜单 要求: 1. 运行程序输出第一级菜单 2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单 3. 菜单数据保存在文件中 4. 让用户选择是否要退出 5. 有返回上一级菜单的功 ...
- Python学习-------------------三级菜单简单版
题目: 多级菜单 1.三级菜单 2.可依次选择进入的各子菜单 3.所需新知识点:列表.字典 ReadMe: 这个做循环,比较绕脑子 点开运行即可 Min ...
- python实现三级菜单源代码
8月4号早晨天气晴,继续学习‘Alex’的python视频,写了用字典实现三级菜单的代码,都是循环和判断比较lower,废话不多说直接贴码: #!/user/bin/env python #-*-co ...
- python作业三级菜单day1(第一周)
一.作业需求: 1. 运行程序输出第一级菜单 2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单 3. 菜单数据保存在文件中 4. 让用户选择是否要退出 5. 有返回上一级菜单的功能 二三级菜单文 ...
- python 实现三级菜单
要求: 可选择进入各级子菜单 在各级菜单下可以选择退出 在子菜单下可以返回上一级菜单 Readme: 运行程序,输入菜单选项,进入对应的子菜单 # Joe Young data = { '山东':{ ...
- Python入门-三级菜单
作业题目: 三级菜单 作业需求: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, ...
随机推荐
- 浅谈javascript中的call与apply方法
call方法与apply方法都是为了改变函数体内部this的指向. call方法与apply方法,这二者的作用完全一样,只是接受参数的方式不太一样. apply()方法: Function.apply ...
- 一步一步学Vue (一)
vue应该是前端主流框架中的集成大成者,它吸取了knockout,angular,react设置avalon的经验,支持各种模式写法,入门很简单,从本章开始,会记录学习vue中的点点滴滴,以笔记的形式 ...
- [补] 如何在windows下用IDA优雅调试ELF
在windows下如何用IDA优雅调试ELF brief: 构建一个IDA-linux_server-docker镜像,优雅地IDA远程调试 使用传统虚拟机来运行一个linux程序就得跑一个完整的li ...
- pwnable.kr bof之write up
这一题与前两题不同,用到了静态调试工具ida 首先题中给出了源码: #include <stdio.h> #include <string.h> #include <st ...
- 再起航,我的学习笔记之JavaScript设计模式01
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 在通 ...
- 配置SSH隧道访问Ubuntu服务器上的MongoDB
为了数据安全,在MongoDB的配置文件里,一般会把默认的27017端口port改为自定义的端口号,然后把允许访问的IP设为127.0.0.1(即主机本身).但是这样就会在开发的过程查看数据时带来麻烦 ...
- MySQL系列(五)---总结MySQL中的锁
MySQL中的锁 目录 MySQL系列(一):基础知识大总结 MySQL系列(二):MySQL事务 MySQL系列(三):索引 MySQL系列(四):引擎 概述 MyISAM支持表锁,InnoDB支持 ...
- 虚拟机下克隆3个centos系统并配置IP访问网络(转载)
此文是保证linux系统能够上网 先查看本机的IP 打开虚拟机,更改虚拟机为桥接方式 在第一个虚拟机上打开终端,在命令行输入setup,选择NETWORK CONFIGRATION 回车后, 配置IP ...
- 尝试在CentOS7.2上编译安装Swift
苹果提供 Ubuntu上构建Swift 的教程,通过这个教程我尝试使用CentOS7.2上玩儿一把.目前已经成功在CentOS7.2上班成功安装 swift 4.0 https://github.co ...
- Quartus16.0如何使用TCL脚本
前言 TCL脚本语言在EDA工具中使用频繁,本文主要介绍使用TCL脚本文件进行引脚分配,避免手动分配以及分配出错: 流程 1.准备好你的TCL脚本文件,举个栗子(脚本文件内容): 2.在Quartus ...