python 三级菜单
三级列表:
- menu = {
- '北京':{
- '海淀':{
- '五道口':{
- 'soho':{},
- '网易':{},
- 'google':{}
- },
- '中关村':{
- '爱奇艺':{},
- '汽车之家':{},
- 'youku':{},
- },
- '上地':{
- '百度':{},
- },
- },
- '昌平':{
- '沙河':{
- '地铁':{},
- '北航':{},
- },
- '天通苑':{},
- '回龙观':{},
- },
- '朝阳':{},
- '东城':{},
- },
- '上海':{
- '闵行':{
- "人民广场":{
- '炸鸡店':{}
- }
- },
- '闸北':{
- '火车站':{
- '携程':{}
- }
- },
- }
基础版本:
- #首先要有个死循环,能够一直的输入
- while True:
- #打印第一层的数据
- for key in menu:
- print(key)
- #然后叫用户选择
- choice = input(">>:").strip()#去掉空格
- #判断是否是回车
- if choice == 'b':break
- if choice == 'q':exit("欢迎下次再来")
- if len(choice) ==0:continue#避免输入空格
- print("------进入下一级------".center(50))
- #第一,确保北京在字典里,有一个key,有,直接调这个key,进入下一级
- #判断字典有没有这个值,有get和in两种方法
- if choice not in menu:continue#如果不在里面继续往里输,跳过这次选择
- #为下一层循环单独加一个循环
- while True:
- #先把下一层取到
- for key2 in menu[choice]:
- print(key2)
- choice2 = input(">>:").strip()
- if choice2 == 'b': break
- if choice2 == 'q': exit("欢迎下次再来{name}".format(name=choice2))
- if len(choice2) ==0:continue
- if choice2 not in menu[choice]:continue#判断用户输入的选项如果没在第这层菜单中,跳出
- # 为下一层循环单独加一个循环
- while True:
- # 先把下一层取到
- for key3 in menu[choice][choice2]:
- print(key3)
- choice3 = input(">>:").strip()
- if choice3 == 'b': break
- if choice3 == 'q': exit("欢迎下次再来")
- if len(choice3) == 0: continue
- if choice3 not in menu[choice][choice2]: continue # 判断用户输入的选项如果没在第这层菜单中,跳出
- while True:
- # 先把下一层取到
- for key4 in menu[choice][choice2][choice3]:
- print(key4)
- choice4 = input(">>:").strip()
- if choice4 == 'b': break
- if choice4 == 'q': exit("欢迎下次再来")
- if len(choice4) == 0: continue
- if choice4 not in menu[choice][choice2][choice3]: continue # 判断用户输入的选项如果没在第这层菜单中,跳出
优化之后,高级版本:
- current_level = menu #当前层 #初始变量
- last_level = [] #定义空列表,返回上一级用的,每进入一层就存一层
- while True:
- for key in current_level:#循环每一层
- print(key)
- choice = input(">>:").strip()
- if len(choice) == 0:continue
- # 返回上一层
- # 自己记住每层的上一层,每次在进入下一层之前,我当前层就相当于下一层的父集
- if choice == 'b':
- # current_level = last_level#把当前层的变量改成上一层[把当前层改成父亲层,这样下一次循环就回到上一层]
- if not last_level :break #if len(last_level) == 0:break
- current_level = last_level[-1]#每退出一层取列表最后一个值
- last_level.pop()#删一层
- if choice not in current_level:continue
- #choice在里面进入下一层
- last_level.append(current_level)#每进一层存一层
- current_level = current_level[choice]#给current_level重新赋值,进入下一层,每换一个变量,下一次就到了for key in current_level层
完毕。
python 三级菜单的更多相关文章
- python三级菜单实例(傻瓜版和进阶版)
程序: python三级菜单 要求: : 1.打印省.市.县三级菜单 2.可返回上一级 3.可随时退出程序 方案一:傻瓜版(其实傻瓜版考察的主要是思路!思路清楚了,那才不是傻瓜!O(∩_∩)O哈哈~) ...
- python(5)- 简单练习:python三级菜单优化
python三级菜单优化,菜鸟版链接:http://www.cnblogs.com/xuyaping/p/6648170.html menu = { '北京':{ '海淀':{ '五道口':{ 'so ...
- python三级菜单的实现
一.作业要求 1.使用字典实现三级菜单功能 2.直接输入前面数字进入下一级菜单 3.按B返回上一级,按Q退出 二.需要知识点 1.if循环 2.for循环,enumerate的用法 3.while循环 ...
- python 三级菜单 while循环三次,湖北省市-县-街道的选择,3个while的循环 -day2
python编写一个三级while的循环菜单 1.定义字典,字典里面嵌套字典,内嵌字典的值为列表. 思路: 湖北省的市:字典中的定义3个字典,用于存储{序列-键:市名} shiqu_dir = {} ...
- Python 三级菜单 增强版
需要实现的功能是:三级菜单1.从文本内读出选项2.查询每一级的选项,并能对选项进行增/删/改功能3.每一级可以退出程序或者返回上一层 2018-5-14 更新内容 思路 实现过程中的BUG及解决方案: ...
- python三级菜单
#-*- coding:utf-8 -*-#Author:gxli #一级菜单项def menu(): #遍历字典dic一级菜单 print('-----------一级菜单------------- ...
- Python 三级菜单与优化(一层循环嵌套)
优化的思路是使用单层循环嵌套完成三级菜单,这个优化思路我非常喜欢,我喜欢在编程的时候用最少的东西写出同样的效果,通常这样会绕来绕去,但非常有趣!!! 需求: 1.运行程序输出第一级菜单: 2.选择一级 ...
- Python——三级菜单
#三级菜单函数 menu = { '北京':{ 海淀:{ '五道口':{} '中关村':{} '上帝':{} } '昌平':{} '朝阳':{} '东城':{} }, '上海':{} '山东':{} ...
- 4th,Python三级菜单
1. 运行程序输出第一级菜单 2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单 3. 菜单数据保存在文件中 4. 让用户选择是否要退出 5. 有返回上一级菜单的功能 data = { '北京': ...
- [terry笔记]python三级菜单
把三级菜单输出,选择后逐层显示,”b“返回上一级菜单. menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村': ...
随机推荐
- Atitti 图像处理 图像混合 图像叠加 blend 原理与实现
Atitti 图像处理 图像混合 图像叠加 blend 原理与实现 混合模式 编辑 本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 混合模式是图像处理技术中的一个技术名词,不 ...
- 发现一个百度的密码。。。记最近一段时间的php感想
请看图. 突然想看一下百度的cookie. 最近百度一年真是多攒多难,我一直挺百度啊.百度文化就是程序员文化,但是收到中国其他文化的侵蚀,不得不变, 任何人重构系统,都会有大概百分三十左右的性能提升. ...
- 【JMS】JMS之ActiveMQ的使用
这篇文章主要是简单介绍一下JMS和ActiveMQ,以及使用ActiveMQ来写两个demo. 1. JMS是啥 百度百科的解释: JMS即Java消息服务(Java Message Service) ...
- TypeScript实例
interface Person { firstName: string, lastName: string } function greeter(person: Person) { return p ...
- 接触LLBL Gen Pro 对象关系映射框架后 前途变的一片光明
时间回到2010年,那时候还是熟悉代码生成+基础框架这种模式,基本的开发思路是通过代码生成器生成实体,再生成接口与实现类,最后拖拉控件,写界面数据绑定代码.基本上就是动软代码生成器给出的模式,或是微软 ...
- JSP网站开发基础总结《十一》
继上一篇关于过滤器连总结后,本篇为大家详细介绍一下过滤器中过滤规则的dispatcher属性的使用,在servlet2.5中dispatcher的属性有四种,其中上一篇已经为大家介绍了error属性的 ...
- java接口中多继承的问题
java中支撑多继承吗? 支持->接口啊 为什么接口支持多继承呢?因为接口中没有方法体!即使可能两个接口中有一样的抽象方法,但是 只会调用子类中覆盖该同样抽象方法的具体方法!不会引起调用的歧义! ...
- Linux - 终端语言设置
查看当前终端用户的语言设置 locale - get locale-specific information : locale |grep LANG 改变当前终端用户的语言设置(临时生效) 中文UTF ...
- WTF Forms – 使用 CSS 实现用户体验更好的表单
WTF forms 借助 CSS 提供友好的 HTML 表单控件,专为 IE9+ 以及最新的 Chrome.Safari 和 Firefox 浏览器.以文件输入控件的改进,使用 label 包裹在 i ...
- MyBaits学习
一:配置MyBaits的开发环境 1.1.核心配置文件 正如hibernate一样,MyBaits也有一个核心的配置文件,它包含着数据源地址,用户名,密码等,还有着各个实体类的配置文件,配置文件是xm ...