#!/usr/bin/env python3#coding:utf-8

'''Created on: 2015年12月30日

@author: 张晓宇

Email: 61411916@qq.com

Version: 1.0

Description: 三层菜单

1、菜单一共三级即:省,市,区县

2、每一级菜单输入的如果输入的是菜单里的选项则进入下级菜单

3、第1级菜单输入q退出系统

4、第2、3级菜单输入q退出系统,输入b返回上级菜单

5、三级菜单全部正确打印最后的全部选择结果,否则继续循环该机菜单

Help:'''

if __name__ == '__main__':'''@parameters:

provinces:定义省一级菜单,格式为字典,{"菜单序号":"省名称", ...}

citys:定义省一级菜单,格式为二级嵌套字典{"省名称":{"菜单序号":"市名称"}, ...}

area:定义区县一级菜单,格式为二级嵌套字典{"市名称":{"菜单序号":"区县名称"}, ...}

app_info:系统信息,主要用于显示'''provinces={"1":"北京","2":"上海","3":"河北省",

}

citys={"北京":{"1":"北京市区","2":"北京市郊区"},"上海":{"1":"上海市区"},"河北省":{"1":"石家庄市", "2":"秦皇岛市", "3":"保定市"}

}

areas={"北京市区":{"1":"东城区", "2":"西城区", "3":"海淀区", "4":"朝阳区", "5":"丰台区", "6":"石景山区"},"北京市郊区":{ "1":"通州区", "2":"顺义区", "3":"房山区", "4":"大兴区", "5":"昌平区", "6":"怀柔区", "7":"平谷区", "8":"门头沟区", "9":"密云县", "10":"延庆县"},"上海市区":{"1":"黄浦区", "2":"卢湾区", "3":"徐汇区", "4":"长宁区", "6":"静安区", "7":"普陀区", "8":"闸北区", "9":"虹口区", "11":"杨浦区", "12":"宝山区"},"石家庄市":{"1":"鹿泉", "2":"正定", "3":"藁城", "4":"栾城", "5":"高邑", "6":"新乐", "7":"辛集", "8":"赵县", "9":"深泽", "10":"晋州"},"保定市":{"1":"南市区", "2":"北市区", "3":"新市区", "4":"白沟新城区", "5":"顺平县"},"秦皇岛市":{"1":"海港区", "2":"山海关区", "3":"北戴河区", "4":"抚宁区", "5":"昌黎县", "6":"卢龙县", "7":"青龙满族自治县"}

}

app_info= '''+-----------------------------------+

| Welcome to 65brother system |

| Version: 1.0 |

| Author: zhangxiaoyu |

+-----------------------------------+'''

#初始化菜单列表,主要是做了一次排序,解决字典无序的问题,这里的d[0]表示对key做排序,int表示先转换成整数,也就是按照整数的顺序进行排序否则如果序号超过10,会出现1后面的是10而不是2

province_list = sorted(provinces.items(), key = lambdad:int(d[0]))#初始化省一级菜单循环开关

province_flag =True#省一级菜单循环

whileprovince_flag:#初始化市一级菜单的循环开关

city_flag =Trueprint(app_info)#打印当前用户的位置

print("home>")#打印省一级菜单

print("+-----------------------------------+")for province_item inprovince_list:print("%s、%s" %province_item)print("+-----------------------------------+")#获取用户输入的选项

province = input("请输入你的省份(输入'q'退出系统):").strip()#判断用户的输入

if province == 'q':#如果用户输入的是q关闭省一级菜单循环开关,也就是退出系统

province_flag =Falseelif province inprovinces:#如果输入的是菜单的序号执行

#获取省的名称

province_name =provinces[province]#初始化市一级菜单,同省一样对key进行排序

city_list = sorted(citys[province_name].items(), key = lambdad:int(d[0]))#市一级菜单循环

whilecity_flag:#打印用户位置

print("home>%s>" %province_name)#打印市一级菜单

print("+-----------------------------------+")for city_item incity_list:print("%s、%s" %city_item)print("+-----------------------------------+")#获取用户输入

city = input("请输入你的城市(输入'q'退出系统,输入'b'返回上一级菜单):").strip()#判断用户输入

if city == 'q':#如果输入q关闭省一级和市一级循环开关,也就是退出系统

province_flag =False

city_flag=Falseelif city == 'b':#如果用户输入的是b,关闭市一级循环开关,继续省一级循环

city_flag =Falseelif city incitys[province_name]:#如果用户输入的是正确的菜单项

#初始化区县一级循环开关

area_flag =True#获取市的名称

city_name =citys[province_name][city]#初始户区县菜单

area_list = sorted(areas[city_name].items(), key = lambdad:int(d[0]))#区县一级循环

whilearea_flag:#打印用户位置

print("home>%s>%s>" %(province_name,city_name))#打印区县菜单

print("+-----------------------------------+")for area_item inarea_list:print("%s、%s" %area_item)print("+-----------------------------------+")#获取用户输入

area = input("请输入你的区/县(输入'q'退出系统,输入'b'返回上一级菜单):").strip()#判断用户输入

if area == 'q':#如果是q,关闭省、市、区县一级循环开关,也就是退出系统

area_flag =False

city_flag=False

province_flag=Falseelif area == 'b':#如果是b,关闭县一级循环开关,继续市循环

area_flag =Falseelif area inareas[city_name]:#如果输入正确

#获取区县名称

area_name =areas[city_name][area]#输出完整的三级菜单选择信息

input('您选择的是%s,%s,%s。选择任意键退出系统' %(province_name, city_name, area_name))#关闭省、市、区县循环开关,退出系统

area_flag =False

city_flag=False

province_flag=Falseelse:#如果区县选项输入错误提示错误

input("输入错误请重新输入,输入任意键继续")else:#如果市选项输入错误提示错误

input("输入错误请重新输入,输入任意键继续")else:#如果省选项输入错误提示错误

input("输入错误请重新输入,输入任意键继续")

python入门之玩转列表我的菜单_我的Python成长之路---第一天---Python基础(作业2:三级菜单)---2015年12月26日(雾霾)...相关推荐

  1. 我的Python成长之路---第一天---Python基础(5)---2015年12月26日(雾霾)

    六.流程控制 与C语言不通的事Python的流程控制的代码块不是用{}花括号表示的,而是用强制缩进来,而且缩进必须一致,官方推荐是使用4个空格,不建议使用使用tab(制表符)做缩进,一是不同的系统ta ...

  2. Python入门之玩转列表-第4关:列表切片:你的菜单和我的菜单

    任务描述 我们在前三关中学习了如何处理单个列表元素和所有列表元素,在这一关中我们还将学习如何处理部分列表元素--Python中称为切片. 例如,当我们去餐馆吃饭点菜时,你的菜单和我的菜单有些时候是一模 ...

  3. python入门之玩转列表我的菜单_python入门到放弃(五)-基本数据类型之list列表

    1.概述列表是python的基本数据类型之一,是一个可变的数据类型,用[]方括号表示,每一项元素使用逗号隔开,可以装大量的数据 #先来看看list列表的源码写了什么,方法:按ctrl+鼠标左键点lis ...

  4. 12月26日二周二次【Python基础语法】

    2.2 流程控制-for序列 2.3 流程控制-for字典 2.2 流程控制-for序列 循环 循环是一个结构, 导致程序要重复一定的次数 条件循环也是如此, 当条件变为假, 循环结束 for 循环 ...

  5. python生成20个随机数列表偶数下标排列_编写程序,生成一个包含 20 个随机整数的列表,然后对其中偶数下标的元素进行降序排列,奇数下标的元素不变。(提示:使用切片。)_学小易找答案...

    [简答题]编写程序,输出所有由 1 . 2 . 3 . 4 这 4 个数字组成的素数,并且在每个素数中每个数字只使用 1 次. [填空题]表达式 [x for x in [1,2,3,4,5] if ...

  6. Python学习_2015年12月14日

    2015年12月14日 1.Python代码中有成片代码需要加缩进?(比如少加了一个if,后面的代码块都要缩进) 解决方法:选择要缩进的一片代码,然后按Tab,所有行一起缩进.如果要取消缩进,Shif ...

  7. 盘丝洞服务器维护,5月26日维护公告 多项玩法更新

    亲爱的玩家朋友: 为保证服务器的运行稳定和服务质量,<梦幻西游2>所有服务器将于2015年5月26日上午8:00停机,进行每周例行的维护工作.预计维护时间为上午8:00-9:00.如果在预 ...

  8. Python学习——复习5次课(12月2日)

    任务: 复习5次课(12月2日) 1.8 递归列出目录里的文件 1.9 匿名函数 2.0-2.4 内建函数 笔记: 递归的注意事项 必须有最后的默认结果 if n == 0 递归参数必须向默认结果收敛 ...

  9. 12月17日云栖精选夜读 | 用PrettyPrinter,让Python输出更漂亮,你值得拥有

    PrettyPrinter是Python 3.6 及以上版本中的一个功能强大.支持语法高亮.描述性的美化打印包.它使用了改进的Wadler-Leijen布局算法,和Haskell打印美化库中的pret ...

最新文章

  1. 验证码识别,发票编号识别(转)
  2. 通过eclipse调试MapReduce任务
  3. 【Linux 内核】调度器 ⑤ ( put_prev_task、set_next_task 函数 | select_task_rq 函数 | migrate_task_rq 函数 )
  4. libmemcached安装报错
  5. 开发者必备Docker命令
  6. java培训第一阶段测试总结,达内学员Java培训阶段总结:反躬自省,愈渐完美
  7. 采购订单接收备注为必输项
  8. [C++11]通过using定义基础类型和函数指针别名
  9. Java-异常01 Error和Exception
  10. HPU 1476: 括号括号
  11. Illustrator 教程,如何在 Illustrator 中添加文本段落?
  12. CAD建模软件:BricsCAD 22 for Mac
  13. android电商组件化分配,android电商组件化设计(含源码):MVP+dagger+组件化
  14. 使用GoKart对Go代码进行静态安全分析
  15. [转]将H264与AAC打包Ipad可播放的TS流的总结
  16. 吴文俊人工智能科学技术奖十周年颁奖盛典揭晓,100个项目成果摘得中国智能科学技术奖励最高殊荣
  17. excel 公式 单引号 concat_Recovery for Excel(Excel文件修复工具)下载 v6.0官方版-
  18. 计算机硬盘 半导体存储器 相关概念
  19. 1553B为什么要加耦合器?
  20. vx开发|JSON配置文件

热门文章

  1. 这篇 Linux 总结得很棒啊!
  2. 告诉你,为什么要娶物理系御姐?
  3. 单身狗救星!电子科大校长为理工科男脱单提建议
  4. 26岁的她,成为深圳大学史上最年轻正教授!
  5. 解析得了数学,写得了诗书,这是个有趣的灵魂
  6. On the coexistence of transport protocols in data centers
  7. sparkStreaming连接kafka整合hbase和redis
  8. SimpleDateFormat(线程不安全)与DateTimeFormatter(线程安全)
  9. 阿里科学家再获世界级荣誉,平头哥首席科学家谢源当选AAASFellow
  10. 浅析基于 Serverless 的前后端一体化框架