一、要求: 1、一开始打印出所有省份和提示 

      2、用户输入省份以此查询城市

      3、在按照输出的城市名提示用户输入,最后输出用户所查询的区县名

      4、随时输入“back”可以返回上一级菜单

      5、输入“Q”可以结束整个程序

      6、若输入的内容无效则重新输入

二、流程图:

三、步骤:

1、先将所需的数据存储。(利用字典和列表的嵌套)

2、获取到所有的省份名

3、获取到所有的城市名

4、判断用户输入是否有效,并执行相应功能

四、代码如下

import os
region = {
'山东' : {
'青岛' : ['四方','黄岛','崂山','李沧','城阳'],
'济南' : ['历城','槐荫','高新','长青','章丘'],
'烟台' : ['龙口','莱山','牟平','蓬莱','招远']
},
'江苏' : {
'苏州' : ['沧浪','相城','平江','吴中','昆山'],
'南京' : ['白下','秦淮','浦口','栖霞','江宁'],
'无锡' : ['崇安','南长','北塘','锡山','江阴']
},
'浙江' : {
'杭州' : ['西湖','江干','下城','上城','滨江'],
'宁波' : ['海曙','江东','江北','镇海','余姚'],
'温州' : ['鹿城','龙湾','乐清','瑞安','永嘉']
},
'安徽' : {
'合肥' : ['蜀山','庐阳','包河','经开','新站'],
'芜湖' : ['镜湖','鸠江','无为','三山','南陵'],
'蚌埠' : ['蚌山','龙子湖','淮上','怀远','固镇']
},
'广东' : {
'深圳' : ['罗湖','福田','南山','宝安','布吉'],
'广州' : ['天河','珠海','越秀','白云','黄埔'],
'东莞' : ['莞城','长安','虎门','万江','大朗']
}
}
print("'back'--返回上一级 'Q'--结束程序") #获取省份列表
province_list = list(region.keys())
print(province_list) #获取城市列表
city_list = []
for i in range(province_list.__len__()):
tem = list(region[province_list[i]].keys())
city_list.append(tem)
while 1:
#省份查询
cinprovince = input("请输入所要查询的省名: ")
if cinprovince in province_list:
city_index = province_list.index(cinprovince)
print('''%s : %s'''%(cinprovince,city_list[city_index]))
#城市查询
while 1:
cincity = input("请输入所要查询的城市名: ")
if cincity in city_list[city_index]:
print('''%s : %s'''%(cincity,region[cinprovince][cincity]))
sign = input("请输入命令: ")
if sign == "Q":
os._exit(0)
elif sign == 'back':
print('''%s : %s'''%(cinprovince,city_list[city_index]))
break
elif cincity == 'Q':
os._exit(0)
elif cincity == 'back':
break elif cinprovince == 'Q':
os._exit(0)
else:
print(province_list)
continue

五、心得:

1、os._exit()可以结束整个程序的执行,exit()也可以结束程序的执行,不过如果放在if或者for中,则只结束当前域内的程序,类似于break的功能

2、list(列表名.keys())与列表名.keys()的区别在于:前者打印出来之后没有dict.keys声明

3、listname.index(n)可以返回n所在listname中的下标

python实现三级菜单的更多相关文章

  1. python打怪之路【第三篇】:利用Python实现三级菜单

    程序: 利用Python实现三级菜单 要求: 打印省.市.县三级菜单 可返回上一级 可随时退出程序 coding: menu = { '北京':{ '朝阳':{ '国贸':{ 'CICC':{}, ' ...

  2. python之三级菜单

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

  3. 【python】——三级菜单

    作业需求: 打印三级菜单 可返回上一级 可随时退出程序 #!/usr/bin/env python # -*- coding:utf-8 -*- #Author: __Json.Zzgx__ menu ...

  4. Python学习-------------------三级菜单简单版

    题目: 多级菜单         1.三级菜单         2.可依次选择进入的各子菜单         3.所需新知识点:列表.字典 ReadMe: 这个做循环,比较绕脑子 点开运行即可 Min ...

  5. python作业三级菜单day1(第一周)

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

  6. python实现三级菜单源代码

    8月4号早晨天气晴,继续学习‘Alex’的python视频,写了用字典实现三级菜单的代码,都是循环和判断比较lower,废话不多说直接贴码: #!/user/bin/env python #-*-co ...

  7. python 实现三级菜单

    要求: 可选择进入各级子菜单 在各级菜单下可以选择退出 在子菜单下可以返回上一级菜单 Readme: 运行程序,输入菜单选项,进入对应的子菜单 # Joe Young data = { '山东':{ ...

  8. python实现三级菜单间的前后跳转

    #录入菜单def createMenu():    Menu = {}    provinces = ["陕西","四川","江苏"] sh ...

  9. Python入门-三级菜单

    作业题目: 三级菜单 作业需求: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, ...

  10. python 打印三级菜单

    要求: 1.用户选择城市菜单编号显示对应的下级菜单 2.可以返回上级菜单,只有在用户确定正常退出时才退出 #!/usr/bin/env python3 # -*- coding: utf-8 -*- ...

随机推荐

  1. 关于富文本在Android中的应用以及遇到的坑

    富文本可以为用户提供更加多样化的文本展示形式,但由于其使用了H5标签的特殊性,一般都需要第三方框架的支持.这里推荐一款合适的第三方富文本框架,richeditor. 首先我们要使用该功能需要引入相关j ...

  2. rpm包

    rpm包有什么命名规则与依赖? 命令规则: 包名-版本号.发布次数-linux平台.l.硬件平台.rpm 依赖: 树型依赖:a --> b --> c 安装a包需要安装b包,安装b包需要安 ...

  3. JavaWeb项目架构之Redis分布式日志队列

    架构.分布式.日志队列,标题自己都看着唬人,其实就是一个日志收集的功能,只不过中间加了一个Redis做消息队列罢了. 前言 为什么需要消息队列? 当系统中出现"生产"和" ...

  4. 渲染引擎(The rendering engine)

    渲染引擎的职责就是渲染,即在浏览器窗口中显示所请求的内容.这是每一个浏览器的核心部分,所以渲染引擎也称为浏览器内核. 渲染引擎一开始会从网络层获取请求文档的内容. 获取文档后,渲染引擎开始解析 htm ...

  5. 什么是Servlet,Servlet的作用,生命周期,如何创建、配置Servlet

    什么是Servlet,作用是? servlet是一个基于java技术的WEB组件,运行在服务器端,我们利用 sevlet可以很轻松的扩展WEB服务器的功能,使它满足特定的应用需要.servlet由se ...

  6. linux 搭建PPTP

    pptp简介 PPTP,Point to Point Tunneling Protocol,点对点隧道协议,这是一种支持多协议虚拟专用网络(VPN)技术.远程用户能够通过装有点对点协议的系统安全访问公 ...

  7. JDK8 HashMap 源码解析

    HashMap中数据结构 在jdk1.7中,HashMap采用数组+链表(拉链法).因为数组是一组连续的内存空间,易查询,不易增删,而链表是不连续的内存空间,通过节点相互连接,易删除,不易查询.Has ...

  8. java 对象、集合的非空判断

    自我总结,有什么不到位的地方,请各位纠正补充,感激不尽! 目的:使程序更严谨 ***对象验证是否不为空:  if( null != obj ) ***List验证不为空:if( null != lis ...

  9. 浅析调用JSR303的validate方法, 验证失败时抛出ConstraintViolationException

    废话不多说,直接进入正题:如何使用JSR303的validate,进行数据校验,失败后直接抛出异常加入流转信息中,并在form页面提示出来. 首先我们为了启用验证,需要向 项目中添加Bean验证的实现 ...

  10. maven项目引入sqljdbc4 找不到包的完美 解决方案。

    今天碰到了这个问题,解决了,顺便做一下记录.首先来 重现 一下这个问题,maven install报错,说 找不到这个包,但是其实 我已经安装了. 我们 再来 看看 maven本地仓库里面有 什么,这 ...