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中使用Mako模版库的简单教程
Apr 08 Python
Python函数中*args和**kwargs来传递变长参数的用法
Jan 26 Python
Linux中安装Python的交互式解释器IPython的教程
Jun 13 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
Jan 12 Python
PyQt 线程类 QThread使用详解
Jul 16 Python
python读取中文txt文本的方法
Apr 12 Python
django DRF图片路径问题的解决方法
Sep 10 Python
Python SELENIUM上传文件或图片实现过程
Oct 28 Python
详解opencv中画圆circle函数和椭圆ellipse函数
Dec 27 Python
python编写俄罗斯方块
Mar 13 Python
Pycharm如何自动生成头文件注释
Nov 14 Python
python爬虫多次请求超时的几种重试方法(6种)
Dec 01 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
Laravel框架数据库CURD操作、连贯操作总结
2014/09/03 PHP
CodeIgniter删除和设置Cookie的方法
2015/04/07 PHP
jQuery 表格工具集
2010/04/25 Javascript
jquery ajax例子返回值详解
2012/09/11 Javascript
聊一聊jQuery插件uploadify使用方法
2016/08/24 Javascript
Vue.js创建Calendar日历效果
2016/11/03 Javascript
给easyui的datebox控件添加清空按钮的实现方法
2016/11/09 Javascript
Nodejs 搭建简单的Web服务器详解及实例
2016/11/30 NodeJs
浅谈Vue的基本应用
2016/12/27 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
[40:16]TFT vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python追加元素到列表的方法
2015/07/28 Python
基于Python的接口测试框架实例
2016/11/04 Python
Python的IDEL增加清屏功能实例
2017/06/19 Python
Python中input与raw_input 之间的比较
2017/08/20 Python
微信跳一跳python辅助软件思路及图像识别源码解析
2018/01/04 Python
python中不能连接超时的问题及解决方法
2018/06/10 Python
python2与python3的print及字符串格式化小结
2018/11/30 Python
django实现模型字段动态choice的操作
2020/04/01 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
Django中的AutoField字段使用
2020/05/18 Python
Python和Bash结合在一起的方法
2020/11/13 Python
python 自动识别并连接串口的实现
2021/01/19 Python
基于CSS3的CSS 多栏(Multi-column)实现瀑布流源码分享
2014/06/11 HTML / CSS
美国最大的团购网站:Groupon
2016/07/23 全球购物
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
迟到早退检讨书
2014/02/10 职场文书
优秀大学生自荐信
2014/06/09 职场文书
机械制造专业大学生自我鉴定
2014/09/19 职场文书
2014年学生工作总结
2014/11/20 职场文书
一般纳税人申请报告
2015/05/18 职场文书
Python基础之数据结构详解
2021/04/28 Python
如何使用Tkinter进行窗口的管理与设置
2021/06/30 Python
Redis keys命令的具体使用
2022/06/05 Redis