Python三级菜单的实例


Posted in Python onSeptember 13, 2017

要求:

打印省、市、县三级菜单

可返回上一级

可随时退出程序

版本1

# _author : Ahern Li
# @_date : 2017/9/12

menu = {
  '浙江省':{
    '杭州市':{
      '余杭区':{'中泰':{},'临平':{}},
      '西湖区':{'西湖':{},'留下':{}}
      },
    '温州市':{
      '苍南县':{'灵溪':{},'龙港':{}},
      '瑞安县':{'安阳':{},'锦湖':{}}
      }
    },
  '广东省':{
    '广州市':{
      '越秀区':{'人民路':{},'北京路':{}},
      '荔湾区':{'沙面':{},'龙津':{}}
      },
    '珠海市':{
      '香洲区':{'拱北':{},'吉大':{}},
      '金湾区':{'红旗镇':{},'平沙镇':{}}
      }
    }
  }

# 返回标记
q_flag = True
# 退出标记
Q_flag = True
# 返回,退出标记出现False退出循环
while q_flag and Q_flag:
  # 遍历打印省份
  for i in menu:
    print(i)
  province = input('请输入要查找的省份(Q,退出):').strip()
  if province in menu:
    while q_flag and Q_flag:
      for i in menu[province]:
        print(i)
      city = input('请输入要查找的市(q,返回 或 Q,退出):').strip()
      if city in menu[province]:
        while q_flag and Q_flag:
          for i in menu[province][city]:
            print(i)
          county = input('请输入要查找的区或县(q,返回 或 Q,退出):').strip()
          if county in menu[province][city]:
            while q_flag and Q_flag:
              for i in menu[province][city][county]:
                print(i)
              # 提示最后一页,输入格式
              choice = input('最后一页! q,返回 或 Q,退出:').strip()
              if choice == 'q':
                # 配合 else: q_flag = True 退出该层循环,返回上层循环
                q_flag = False
              elif choice == 'Q':
                # 退出大循环
                Q_flag = False
              else:
                # 提示输入不合法
                print('输入错误!')
            # 改回 q_flag 的值,实现只退出一层循环
            else:
              q_flag = True
          elif county == 'q':
            q_flag = False
          elif county == 'Q':
            Q_flag = False
          else:
            print('输入错误!')
        else:
          q_flag = True
      elif city == 'q':
        q_flag = False
      elif city == 'Q':
        Q_flag = False
      else:
        print('输入错误!')
    else:
      q_flag = True
  elif province == 'Q':
    Q_flag = False
  else:
    print('输入错误!')

版本2

# _author : Ahern Li
# @_date : 2017/9/12

menu = {
  '浙江省':{
    '杭州市':{
      '余杭区':{'中泰':{},'临平':{}},
      '西湖区':{'西湖':{},'留下':{}}
      },
    '温州市':{
      '苍南县':{'灵溪':{},'龙港':{}},
      '瑞安县':{'安阳':{},'锦湖':{}}
      }
    },
  '广东省':{
    '广州市':{
      '越秀区':{'人民路':{},'北京路':{}},
      '荔湾区':{'沙面':{},'龙津':{}}
      },
    '珠海市':{
      '香洲区':{'拱北':{},'吉大':{}},
      '金湾区':{'红旗镇':{},'平沙镇':{}}
      }
    }
  }

current_layer = menu  # 实现动态循环
parent_layer = []  # 保留所有父层,最后一个元素永远为父层

while True:
  print() # 仅为了打印美观
  for i in current_layer:   # 遍历打印地址
    print(i)
  choice = input('请在下方输入查询地址\n>>>:').strip()
  if choice in current_layer:
    if current_layer[choice]:  # 判断是否为末层
      parent_layer.append(current_layer) # 进入子层前,添加当前层作为父层
      current_layer = current_layer[choice]  # 修改子层
    else:
      print('当前是最后一页')
  elif choice == '':
    continue
  elif choice == 'q':   # 返回上层
    if parent_layer:  # 判断 parent_layer 是否为空
      current_layer = parent_layer.pop() # 取出当前层父层
  # 退出循环
  elif choice == 'Q':
    break
  else:
    print('输入错误!')

以上这篇Python三级菜单的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python文本操作相关模块
Jun 22 Python
Tornado 多进程实现分析详解
Jan 12 Python
20个常用Python运维库和模块
Feb 12 Python
Python的numpy库中将矩阵转换为列表等函数的方法
Apr 04 Python
Python for循环生成列表的实例
Jun 15 Python
Python初学者需要注意的事项小结(python2与python3)
Sep 26 Python
python读取word 中指定位置的表格及表格数据
Oct 23 Python
Python 中使用 PyMySQL模块操作数据库的方法
Nov 10 Python
如何在Python对Excel进行读取
Jun 04 Python
Django Model层F,Q对象和聚合函数原理解析
Nov 12 Python
python tkinter Entry控件的焦点移动操作
May 22 Python
python如何读取和存储dict()与.json格式文件
Jun 25 Python
基于Python代码编辑器的选用(详解)
Sep 13 #Python
python多线程socket编程之多客户端接入
Sep 12 #Python
python数据结构之链表详解
Sep 12 #Python
Python数据结构之单链表详解
Sep 12 #Python
python处理Excel xlrd的简单使用
Sep 12 #Python
Python3.6简单操作Mysql数据库
Sep 12 #Python
Python文件和流(实例讲解)
Sep 12 #Python
You might like
WINDOWS 2000下使用ISAPI方式安装PHP
2006/09/05 PHP
基于PHP文件操作的详细诠释
2013/06/21 PHP
PHP如何将XML转成数组
2016/04/04 PHP
Chrome Form多次提交表单问题的解决方法
2011/05/09 Javascript
基于jQuery.Validate验证库知识点的详解
2013/04/26 Javascript
javascript比较两个日期相差天数的方法
2015/07/24 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
2015/11/16 Javascript
JavaScript字符串常用的方法
2016/03/10 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
AngularJS入门教程二:在路由中传递参数的方法分析
2017/05/27 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
layui获取选中行数据的实例讲解
2018/08/19 Javascript
webpack开发环境和生产环境的深入理解
2018/11/08 Javascript
前端vue+elementUI如何实现记住密码功能
2020/09/20 Javascript
[11:27]《一刀刀一天》之DOTA全时刻20:TI4总奖金突破920W TS赛事分析
2014/06/18 DOTA
[01:29:42]Liquid vs VP Supermajor决赛 BO 第一场 6.10
2018/07/05 DOTA
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
使用Python的PIL模块来进行图片对比
2016/02/18 Python
Python 专题六 局部变量、全局变量global、导入模块变量
2017/03/20 Python
和孩子一起学习python之变量命名规则
2018/05/27 Python
Python面向对象程序设计示例小结
2019/01/30 Python
Python enumerate函数功能与用法示例
2019/03/01 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
2019/06/26 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
python处理document文档保留原样式
2019/09/23 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
HTML5实现QQ聊天气泡效果
2017/06/26 HTML / CSS
HTML5之SVG 2D入门2—图形绘制(基本形状)介绍及使用
2013/01/30 HTML / CSS
联想德国官网:Lenovo Germany
2018/07/04 全球购物
英国领先的在线高尔夫商店:Gamola Golf
2019/11/16 全球购物
运动会入场式解说词
2014/02/18 职场文书
书法兴趣小组活动总结
2014/07/07 职场文书
六一儿童节活动总结
2014/08/27 职场文书
JavaScript分页组件使用方法详解
2021/07/26 Javascript