使用python实现省市三级菜单效果


Posted in Python onJanuary 20, 2016

地区分三层结构例如:

大中华地区一级划分:

华东

华中

华北

西南

特别行政区

华南

-------------------------------------------------

请输入你要查看的大中华地区名字:华中

------------------包含的省名字二级:-----------------

湖北

湖南

河南

-------------------------------------------------

请输入你要查看的省名字:湖北

--------------包含的城市名三级:-------------------

 程序大概的思路和逻辑:

1 将大中华地区划用字典列表来构造,用key取省或者地市列表,用for遍历显示字典或者列表的元素

2 根据整个字典的key,得到省列表,遍历打印省的名字列表

3 设置用于跳出外循环的flag(跳出嵌套循环)

4 两层嵌套循环,外循环for指定3次固定循环,3次输入省名字错误,程序退出(在外循环for后,通过else来实现)

内循环while True是死循环,不指定次数(地市名字输入错误后,会一直要求输入,直到输入正确为止),通过break退出内循环

5 通过整个字典的key得到省列表,通过省字典的key得到地市列表,遍历打印地市的名字列表

6 判断输入的地市是否在省字典中,在的话,通过省字典的key,for遍历打印城市的名字列表不在的话,提示"输入的省名字不对,请重新输入",continue跳出当次迭代(循环),继续输入省名字还在内循环while中

7 打印城市表后,2个选择,1是退出整个程序(2个嵌套循环都退出),2是回到上一级别菜单(只需要退出内循环的当前迭代)

8 回到上一级别菜单(只退出内循环while) 判断用户输入的是否是"b",是的话,continnue 退出内循环的当前迭代,开始内循环下次迭代

9 退出整个程序(2个嵌套循环都退出) 判断用户输入的是否是"q",是的话,先将flag变成True,然后break退出while内循环

10 再做一个判断,判断flag是否是True,如果是的话,break退出for外循环,至此,退出整个程序(2个嵌套循环都退出)

流程图:

使用python实现省市三级菜单效果

代码:

#!/user/binenv python3
# -*- coding:utf-8 -*-
 
'''
Created on: 2015年1月16日
 
@author: 吕毅
 
Email: 371725153@qq.com
 
Version: 1.0
 
'''
 
 
china_map ={
 "华南":{
  "广东":["广州市","佛山市","深圳市","东莞市"],
 
  "广西":["南宁市","柳州市","桂林市","北海市"],
 
 
  "海南":["海口市","三亚市","三沙市","儋州市"]
 
 },
 "华东":{
  "上海":["黄浦区","卢湾区","徐汇区","长宁区","普陀区"],
 
  "安徽":["合肥市","芜湖市","淮南市","马鞍山市"],
 
  "江苏":["南京市","无锡市","徐州市","常州市","苏州市"]
 
 },
 "华北":{
  "北京":["东城区","西城区","朝阳区","丰台区","石景山区","海淀区"],
 
  "山西":["太原市","大同市","阳泉市","长治市"],
 
  "河北":["石家庄市","唐山市","秦皇岛市","邢台市"]
 
 },
 "华中":{
  "湖北":["武汉市","黄石市","十堰市","十堰市"],
 
  "河南":["郑州市","开封市","洛阳市","平顶山市"],
 
  "湖南":["长沙市","株洲市","衡阳市","邵阳市"]
 
 },
 "西南":{
  "重庆":["万州区","涪陵区","渝中区","大渡口区"],
  "四川":["成都市","自贡市","攀枝花市","德阳市"],
  "贵州":["贵阳市","六盘水市","遵义市","安顺市"],
 
 
 },
 "特别行政区":{
  "香港":["屯门","弯仔","北角","西贡"],
  "澳门":["花地玛堂区","圣安多尼堂区","大堂区","望德堂区"],
 
 },
 
 
}
 
 
print ("-------------------------------------------------")
print ("+            +")
print ("+            +")
print ("+   欢迎来到大中华地区查询系统地   +")
print ("+            +")
print ("+            +")
print ("-------------------------------------------------")
print ("大中华地区一级划分:")
for i in china_map: #遍历字典的key,列出大中华地区的名字
 
 print (i)
print ("-------------------------------------------------")
jump_flag = False #用于跳出外循环
for i in range(3): #外循环,指定循环3次,3次外循环完了,就退出程序
 greater_china_name = input("请输入你要查看的大中华地区名字:")
 if greater_china_name in china_map: #检查输入的地区是否在地图中,如果地区名字3次输入错误,程序退出
  gc_name = china_map[greater_china_name]
  province_name = gc_name.keys()#使用输入的信息作为key,取出省信息,存在字典中
  while True: #内循环,死循环,不指定循环次数,通过break或者flag跳出
   print ("------------------包含的省名字二级:-----------------") #分隔线
   for i in province_name: #遍历列表,取出省名字,打印出来
    print (i)
   print ("-------------------------------------------------") #分隔线
   sheng_name_input = input("请输入你要查看的省名字:")
 
   if sheng_name_input in province_name: #判断输入的省名字是否在地区列表中
    shi_name = china_map[greater_china_name][sheng_name_input] #取出省中有哪些市,存在列表中
    print ("--------------包含的城市名三级:-------------------") #分隔线
    for i in shi_name: #遍历列表,取出地区市名字,打印出来
     print (i)
    print ("------------------------------------------------") #分隔线
 
   if sheng_name_input not in province_name: #如果输入的省名字不在在地区列表中
    print ("输入的省名字不对,请重新输入")
    continue #跳出当次迭代,开始下一次迭代循环,直到地市名字输入正确为止(不停的要求输入)
   back_or_quit = input("请问是否退出?按b:Back是返回上一级菜单;按q:Exit是退出整个程序")
   #显示完地区市后,就要退出程序了,一个是全部退出,一个是返回上一级菜单
   if back_or_quit == "q":
    jump_flag = True #用于跳出外循环
    break #跳出while内循环
   if back_or_quit == "b":
    continue # 跳出当次迭代,开始下一次迭代循环,重新输入省处,返回上一步
   print ("你输入的信息有误,请重新输入")
  if jump_flag: #跳出外循环的条件满足
   break #跳出外循环
else:#上面的3次for循环正常执行完毕,else才会执行,如果是不正常退出(break),else不会执行
 print ("3次输入错误,程序退出")
Python 相关文章推荐
下载给定网页上图片的方法
Feb 18 Python
python获取指定时间差的时间实例详解
Apr 11 Python
Python中使用haystack实现django全文检索搜索引擎功能
Aug 26 Python
python中logging包的使用总结
Feb 28 Python
Java与Python两大幸存者谁更胜一筹呢
Apr 12 Python
python实现简单名片管理系统
Nov 30 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
Dec 17 Python
python中的print()输出
Apr 12 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
Aug 17 Python
Django中自定义模型管理器(Manager)及方法
Sep 23 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
Mar 10 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
Dec 08 Python
八大排序算法的Python实现
Jan 28 #Python
详解C++编程中一元运算符的重载
Jan 19 #Python
Python中使用Queue和Condition进行线程同步的方法
Jan 19 #Python
简单总结Python中序列与字典的相同和不同之处
Jan 19 #Python
举例讲解如何在Python编程中进行迭代和遍历
Jan 19 #Python
Python的自动化部署模块Fabric的安装及使用指南
Jan 19 #Python
Python编程中time模块的一些关键用法解析
Jan 19 #Python
You might like
Yii结合CKEditor实现图片上传功能
2014/06/13 PHP
YII2框架中使用yii.js实现的post请求
2017/04/09 PHP
php如何修改SESSION的生存存储时间的实例代码
2017/07/05 PHP
php中pcntl_fork创建子进程的方法实例
2019/03/14 PHP
JQuery的一些小应用收集
2010/03/27 Javascript
容易被忽略的JS脚本特性
2011/09/13 Javascript
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
jquery插件制作 手风琴Panel效果实现
2012/08/17 Javascript
Javascript实现带关闭按钮的网页漂浮广告代码
2014/01/12 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
2015/02/05 Javascript
探讨JavaScript语句的执行过程
2016/01/28 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
2016/06/01 Javascript
js事件驱动机制 浏览器兼容处理方法
2016/07/23 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
Bootstrap 轮播(Carousel)插件
2016/12/26 Javascript
jQuery密码强度验证控件使用详解
2017/01/05 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
angularjs实现搜索的关键字在正文中高亮出来
2017/06/13 Javascript
详解React Native网络请求fetch简单封装
2017/08/10 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
Nuxt.js实战和配置详解
2019/08/05 Javascript
JS实现的碰撞检测与周期移动完整示例
2019/09/02 Javascript
JS实现页面鼠标点击出现图片特效
2020/08/19 Javascript
vue 计算属性和侦听器的使用小结
2021/01/25 Vue.js
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
python采集博客中上传的QQ截图文件
2014/07/18 Python
详解python里使用正则表达式的全匹配功能
2017/10/19 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
Python3 Tkinkter + SQLite实现登录和注册界面
2019/11/19 Python
torch 中各种图像格式转换的实现方法
2019/12/26 Python
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
Jdbc数据访问技术面试题
2012/03/30 面试题
《雪地里的小画家》教学反思
2014/02/22 职场文书
高一军训感想
2015/08/07 职场文书
导游词之京东大峡谷旅游区
2019/10/29 职场文书
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js