三级列表:

  1. menu = {
  2. '北京':{
  3. '海淀':{
  4. '五道口':{
  5. 'soho':{},
  6. '网易':{},
  7. 'google':{}
  8. },
  9. '中关村':{
  10. '爱奇艺':{},
  11. '汽车之家':{},
  12. 'youku':{},
  13. },
  14. '上地':{
  15. '百度':{},
  16. },
  17. },
  18. '昌平':{
  19. '沙河':{
  20. '地铁':{},
  21. '北航':{},
  22. },
  23. '天通苑':{},
  24. '回龙观':{},
  25. },
  26. '朝阳':{},
  27. '东城':{},
  28. },
  29. '上海':{
  30. '闵行':{
  31. "人民广场":{
  32. '炸鸡店':{}
  33. }
  34. },
  35. '闸北':{
  36. '火车站':{
  37. '携程':{}
  38. }
  39. },
  40. }

基础版本:

  1. #首先要有个死循环,能够一直的输入
  2. while True:
  3. #打印第一层的数据
  4. for key in menu:
  5. print(key)
  6. #然后叫用户选择
  7. choice = input(">>:").strip()#去掉空格
  8. #判断是否是回车
  9. if choice == 'b':break
  10. if choice == 'q':exit("欢迎下次再来")
  11. if len(choice) ==0:continue#避免输入空格
  12.  
  13. print("------进入下一级------".center(50))
  14. #第一,确保北京在字典里,有一个key,有,直接调这个key,进入下一级
  15.  
  16. #判断字典有没有这个值,有get和in两种方法
  17. if choice not in menu:continue#如果不在里面继续往里输,跳过这次选择
  18.  
  19. #为下一层循环单独加一个循环
  20. while True:
  21. #先把下一层取到
  22. for key2 in menu[choice]:
  23. print(key2)
  24.  
  25. choice2 = input(">>:").strip()
  26. if choice2 == 'b': break
  27. if choice2 == 'q': exit("欢迎下次再来{name}".format(name=choice2))
  28. if len(choice2) ==0:continue
  29. if choice2 not in menu[choice]:continue#判断用户输入的选项如果没在第这层菜单中,跳出
  30.  
  31. # 为下一层循环单独加一个循环
  32. while True:
  33. # 先把下一层取到
  34. for key3 in menu[choice][choice2]:
  35. print(key3)
  36.  
  37. choice3 = input(">>:").strip()
  38. if choice3 == 'b': break
  39. if choice3 == 'q': exit("欢迎下次再来")
  40. if len(choice3) == 0: continue
  41. if choice3 not in menu[choice][choice2]: continue # 判断用户输入的选项如果没在第这层菜单中,跳出
  42.  
  43. while True:
  44. # 先把下一层取到
  45. for key4 in menu[choice][choice2][choice3]:
  46. print(key4)
  47.  
  48. choice4 = input(">>:").strip()
  49. if choice4 == 'b': break
  50. if choice4 == 'q': exit("欢迎下次再来")
  51. if len(choice4) == 0: continue
  52. if choice4 not in menu[choice][choice2][choice3]: continue # 判断用户输入的选项如果没在第这层菜单中,跳出

优化之后,高级版本:

  1. current_level = menu #当前层 #初始变量
  2. last_level = [] #定义空列表,返回上一级用的,每进入一层就存一层
  3. while True:
  4. for key in current_level:#循环每一层
  5. print(key)
  6. choice = input(">>:").strip()
  7. if len(choice) == 0:continue
  8.  
  9. # 返回上一层
  10. # 自己记住每层的上一层,每次在进入下一层之前,我当前层就相当于下一层的父集
  11. if choice == 'b':
  12. # current_level = last_level#把当前层的变量改成上一层[把当前层改成父亲层,这样下一次循环就回到上一层]
  13. if not last_level :break #if len(last_level) == 0:break
  14. current_level = last_level[-1]#每退出一层取列表最后一个值
  15. last_level.pop()#删一层
  16. if choice not in current_level:continue
  17. #choice在里面进入下一层
  18. last_level.append(current_level)#每进一层存一层
  19. current_level = current_level[choice]#给current_level重新赋值,进入下一层,每换一个变量,下一次就到了for key in current_level

完毕。

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

  1. python三级菜单实例(傻瓜版和进阶版)

    程序: python三级菜单 要求: : 1.打印省.市.县三级菜单 2.可返回上一级 3.可随时退出程序 方案一:傻瓜版(其实傻瓜版考察的主要是思路!思路清楚了,那才不是傻瓜!O(∩_∩)O哈哈~) ...

  2. python(5)- 简单练习:python三级菜单优化

    python三级菜单优化,菜鸟版链接:http://www.cnblogs.com/xuyaping/p/6648170.html menu = { '北京':{ '海淀':{ '五道口':{ 'so ...

  3. python三级菜单的实现

    一.作业要求 1.使用字典实现三级菜单功能 2.直接输入前面数字进入下一级菜单 3.按B返回上一级,按Q退出 二.需要知识点 1.if循环 2.for循环,enumerate的用法 3.while循环 ...

  4. python 三级菜单 while循环三次,湖北省市-县-街道的选择,3个while的循环 -day2

    python编写一个三级while的循环菜单 1.定义字典,字典里面嵌套字典,内嵌字典的值为列表. 思路: 湖北省的市:字典中的定义3个字典,用于存储{序列-键:市名} shiqu_dir = {} ...

  5. Python 三级菜单 增强版

    需要实现的功能是:三级菜单1.从文本内读出选项2.查询每一级的选项,并能对选项进行增/删/改功能3.每一级可以退出程序或者返回上一层 2018-5-14 更新内容 思路 实现过程中的BUG及解决方案: ...

  6. python三级菜单

    #-*- coding:utf-8 -*-#Author:gxli #一级菜单项def menu(): #遍历字典dic一级菜单 print('-----------一级菜单------------- ...

  7. Python 三级菜单与优化(一层循环嵌套)

    优化的思路是使用单层循环嵌套完成三级菜单,这个优化思路我非常喜欢,我喜欢在编程的时候用最少的东西写出同样的效果,通常这样会绕来绕去,但非常有趣!!! 需求: 1.运行程序输出第一级菜单: 2.选择一级 ...

  8. Python——三级菜单

    #三级菜单函数 menu = { '北京':{ 海淀:{ '五道口':{} '中关村':{} '上帝':{} } '昌平':{} '朝阳':{} '东城':{} }, '上海':{} '山东':{} ...

  9. 4th,Python三级菜单

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

  10. [terry笔记]python三级菜单

    把三级菜单输出,选择后逐层显示,”b“返回上一级菜单. menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村': ...

随机推荐

  1. Atitti 图像处理 图像混合 图像叠加 blend 原理与实现

    Atitti 图像处理 图像混合 图像叠加 blend 原理与实现 混合模式 编辑 本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 混合模式是图像处理技术中的一个技术名词,不 ...

  2. 发现一个百度的密码。。。记最近一段时间的php感想

    请看图. 突然想看一下百度的cookie. 最近百度一年真是多攒多难,我一直挺百度啊.百度文化就是程序员文化,但是收到中国其他文化的侵蚀,不得不变, 任何人重构系统,都会有大概百分三十左右的性能提升. ...

  3. 【JMS】JMS之ActiveMQ的使用

    这篇文章主要是简单介绍一下JMS和ActiveMQ,以及使用ActiveMQ来写两个demo. 1. JMS是啥 百度百科的解释: JMS即Java消息服务(Java Message Service) ...

  4. TypeScript实例

    interface Person { firstName: string, lastName: string } function greeter(person: Person) { return p ...

  5. 接触LLBL Gen Pro 对象关系映射框架后 前途变的一片光明

    时间回到2010年,那时候还是熟悉代码生成+基础框架这种模式,基本的开发思路是通过代码生成器生成实体,再生成接口与实现类,最后拖拉控件,写界面数据绑定代码.基本上就是动软代码生成器给出的模式,或是微软 ...

  6. JSP网站开发基础总结《十一》

    继上一篇关于过滤器连总结后,本篇为大家详细介绍一下过滤器中过滤规则的dispatcher属性的使用,在servlet2.5中dispatcher的属性有四种,其中上一篇已经为大家介绍了error属性的 ...

  7. java接口中多继承的问题

    java中支撑多继承吗? 支持->接口啊 为什么接口支持多继承呢?因为接口中没有方法体!即使可能两个接口中有一样的抽象方法,但是 只会调用子类中覆盖该同样抽象方法的具体方法!不会引起调用的歧义! ...

  8. Linux - 终端语言设置

    查看当前终端用户的语言设置 locale - get locale-specific information : locale |grep LANG 改变当前终端用户的语言设置(临时生效) 中文UTF ...

  9. WTF Forms – 使用 CSS 实现用户体验更好的表单

    WTF forms 借助 CSS 提供友好的 HTML 表单控件,专为 IE9+ 以及最新的 Chrome.Safari 和 Firefox 浏览器.以文件输入控件的改进,使用 label 包裹在 i ...

  10. MyBaits学习

    一:配置MyBaits的开发环境 1.1.核心配置文件 正如hibernate一样,MyBaits也有一个核心的配置文件,它包含着数据源地址,用户名,密码等,还有着各个实体类的配置文件,配置文件是xm ...