################################################
# Task Name: 三级菜单 #
# Description:打印省、市、县三级菜单 #
# 可返回上一级 #
# 可随时退出程序 #
#----------------------------------------------#
# Author:Oliver Lee #
################################################ zone = {
'山东' : {
'青岛' : ['四方','黄岛','崂山','李沧','城阳'],
'济南' : ['历城','槐荫','高新','长青','章丘'],
'烟台' : ['龙口','莱山','牟平','蓬莱','招远']
},
'江苏' : {
'苏州' : ['沧浪','相城','平江','吴中','昆山'],
'南京' : ['白下','秦淮','浦口','栖霞','江宁'],
'无锡' : ['崇安','南长','北塘','锡山','江阴']
},
'浙江' : {
'杭州' : ['西湖','江干','下城','上城','滨江'],
'宁波' : ['海曙','江东','江北','镇海','余姚'],
'温州' : ['鹿城','龙湾','乐清','瑞安','永嘉']
},
'安徽' : {
'合肥' : ['蜀山','庐阳','包河','经开','新站'],
'芜湖' : ['镜湖','鸠江','无为','三山','南陵'],
'蚌埠' : ['蚌山','龙子湖','淮上','怀远','固镇']
},
'广东' : {
'深圳' : ['罗湖','福田','南山','宝安','布吉'],
'广州' : ['天河','珠海','越秀','白云','黄埔'],
'东莞' : ['莞城','长安','虎门','万江','大朗']
}
}
province_list = list(zone.keys()) #省列表
# flag = False
# flag1 = False
while True:
print(" 省 ".center(50,'*'))
for i in province_list:
print(province_list.index(i)+1,i) #打印省列表
pro_id = input("请输入省编号,或输入q(quit)退出:") #省ID
if pro_id.isdigit():
pro_id = int(pro_id)
if pro_id > 0 and pro_id <= len(province_list):
pro_name = province_list[pro_id-1] #根据省ID获取省名称
city_list = list(zone[pro_name].keys()) #根据省名称获取对应的值,从新字典中获取key,即市列表
while True:
print(" 市 ".center(50,'*'))
for v in city_list:
print(city_list.index(v)+1,v) #打印市列表
city_id = input("请输入市编号,或输入b(back)返回上级菜单,或输入q(quit)退出:")
if city_id.isdigit():
city_id = int(city_id)
if city_id > 0 and city_id <= len(city_list):
city_name = city_list[city_id-1] #根据市ID获取市名称
town_list = zone[pro_name][city_name] #根据省名称获取对应的值,从新字典中获取值,即县列表
while True:
print(" 县 ".center(50,'*'))
for j in town_list:
print(town_list.index(j)+1,j)
back_or_quit = input("输入b(back)返回上级菜单,或输入q(quit)退出:")
if back_or_quit == 'b':
break #终止此层while循环,跳转到上一层While。
elif back_or_quit == 'q':
# flag1 = True
# break #根据标志位结束程序。
exit()
else:
print("输入非法!")
else:
print("编号%d不存在。"%city_id)
elif city_id == 'b':
break
elif city_id == 'q':
# flag = True
# break
exit()
else:
print("输入非法!")
# if flag1:
# break
else:
print("编号%d不存在。"%pro_id)
elif pro_id == 'q':
break
else:
print("输入非法!")
# if flag or flag1:
# break

Python字典实现三级菜单的更多相关文章

  1. (转)Python字典实现三级菜单

    Python字典实现三级菜单 原文:https://www.cnblogs.com/pyramid1001/p/5803294.html 1 ############################# ...

  2. python 字典实现三级菜单

    简介:1.用字典建立一个省市县的三级菜单 2.开始显示所有的省份,输入要进入的省份之后,显示该省份下的所有市,输入市显示该市下的所有县 3.在每一级菜单下都可以返回到上一层菜单 4.随时可以退出 me ...

  3. Python学习之三级菜单

    Python经典练习题 - 三级菜单 需求: 可依次选择进入各子菜单 可从任意一层往回退到上一层 可从任意一层退出程序 示例代码: # -*- coding: utf-8 -*- menu = { ' ...

  4. python练习_三级菜单

    python练习_三级菜单 需求: 做一个地区查询三级菜单,输入一级能够打印下一级 在第三级个第二级输入e可以返回上一级 在任意一级输入q则退出程序 以下代码实现的功能与思路: 功能: (1)通过In ...

  5. python 小程序—三级菜单—循环和字典练习

    程序中利用多级字典来存储三级菜单, 通过一系列while循环和for循环,实现了三级菜单的查询,选择,退回上级菜单,退出程序几个功能. 缺点:程序语句过于重复,效率低. #-*-coding:utf- ...

  6. Python学习笔记五:字符串常用操作,字典,三级菜单实例

    字符串常用操作 7月19日,7月20日 ,7月22日,7月29日,8月29日,2月29日 首字母大写:a_str.capitalize() 统计字符串个数:a_str.count(“x”) 输出字符, ...

  7. python day1 之三级菜单的正确姿势

    看了几个同学有关三级菜单的实现,都是通过一级一级输出,是较为过程的实现.另外如果菜单(树形结构)更多级这样处理起来就比较麻烦了. 可以使用python强大的列表和字典,实现的更优美或简洁一些: 注:复 ...

  8. python作业:三级菜单(第一周)

    一.作业需求: 1. 运行程序输出第一级菜单 2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单 3. 菜单数据保存在文件中 4. 让用户选择是否要退出 5. 有返回上一级菜单的功能 二.三级菜单 ...

  9. python 购物车和三级菜单

    程序:购物车程序 需求: 启动程序后,让用户输入工资,然后打印商品列表 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 可随时退出,退出时,打印已购买商品和余额 ...

随机推荐

  1. 【转】Vim十大必备插件

    [转]Vim十大必备插件 转自:http://my.oschina.net/zhoukuo/blog/336315 Taglist taglist是一个用于显示定位程序中各种符号的插件,例如宏定义.变 ...

  2. Delphi名站以及高手Blog

    以前知道的: http://cnblogs.com/del (万一兄的,这个不用解释了) http://www.cnblogs.com/del/archive/2010/04/25/1720750.h ...

  3. [SoapUI] SoapUI JDBC REST 连接 Netezza

    How to Connect to Server 1. Apply accounts that has permission to access Netezza system for host acc ...

  4. mysqlbinlog flashback 5.6完全使用手册与原理

    版本更新 2016/3/7 首次发布      2016/3/9  修复update无效问题      2016/4/8  修复带有秒级别以下的日期数据bug 下载地址 http://pan.baid ...

  5. Mac下安装Node.js

    今天介绍一下Mac下Node.js的下载安装方法,后面我们安装Bootstrap.Angurlar和jQuery等都是通过Node.js的npm方式的. 1.在必应中搜索“node.js mac”,第 ...

  6. 20169212《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...

  7. [双连通分量] POJ 3177 Redundant Paths

    Redundant Paths Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13712   Accepted: 5821 ...

  8. linux 实战使用,上传git 解决冲突

    Last login: Fri Dec 18 09:48:55 on ttys000lidongxiaodeiMac:~ lidongxiao$ cd /Users/lidongxiao/Docume ...

  9. 使用WinINet和WinHTTP实现Http访问

    使用WinINet和WinHTTP实现Http访问 Http访问有两种方式,GET和POST,就编程来说GET方式相对简单点,它不用向服务器提交数据,在这个例程中我使用POST方式,提交数据value ...

  10. HDU 4939 Stupid Tower Defense (2014 Multi-University Training Contest 7)

    思路:首先红色肯定要放在最后面.前面蓝色和绿色dp求解. dp[i][j]  表示前面(i+j) 个 有 i 个蓝色塔  j个绿色塔 能造成最大伤害. //====================== ...