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网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
Apr 25 Python
python将MongoDB里的ObjectId转换为时间戳的方法
Mar 13 Python
Python编程实现二叉树及七种遍历方法详解
Jun 02 Python
Django视图之ORM数据库查询操作API的实例
Oct 27 Python
Python中GIL的使用详解
Oct 03 Python
PyQtGraph在pyqt中的应用及安装过程
Aug 04 Python
Python迭代器Iterable判断方法解析
Mar 16 Python
python实现126邮箱发送邮件
May 20 Python
利用Vscode进行Python开发环境配置的步骤
Jun 22 Python
浅析PyCharm 的初始设置(知道)
Oct 12 Python
Python调用ffmpeg开源视频处理库,批量处理视频
Nov 16 Python
paramiko使用tail实时获取服务器的日志输出详解
Dec 06 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
教你如何解密 “ PHP 神盾解密工具 ”
2014/06/20 PHP
smarty内置函数{loteral}、{ldelim}和{rdelim}用法实例
2015/01/22 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作示例
2019/10/12 PHP
node.js中的buffer.Buffer.isBuffer方法使用说明
2014/12/14 Javascript
JQuery给网页更换皮肤的方法
2015/05/30 Javascript
JS实现黑色大气的二级导航菜单效果
2015/09/18 Javascript
JS实现图片高亮展示效果实例
2015/11/24 Javascript
详解javascript实现自定义事件
2016/01/19 Javascript
原生js实现网页顶部自动下拉/收缩广告效果
2017/01/20 Javascript
详解vue组件化开发-vuex状态管理库
2017/04/10 Javascript
微信小程序 新建登录页并实现tabBar隐藏
2017/06/13 Javascript
AngularJS实用基础知识_入门必备篇(推荐)
2017/07/10 Javascript
js封装成插件_Canvas统计图插件编写实例
2017/09/12 Javascript
关于Vue单页面骨架屏实践记录
2017/12/13 Javascript
js中事件对象和事件委托的介绍
2019/01/21 Javascript
Vue向后台传数组数据,springboot接收vue传的数组数据实例
2020/11/12 Javascript
仅用50行Python代码实现一个简单的代理服务器
2015/04/08 Python
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
python调用matplotlib模块绘制柱状图
2019/10/18 Python
Python3 把一个列表按指定数目分成多个列表的方式
2019/12/25 Python
使用keras实现Precise, Recall, F1-socre方式
2020/06/15 Python
企业面试题试卷附带答案
2015/12/20 面试题
会计专业毕业生自我评价
2013/09/25 职场文书
网络程序员自荐信
2014/01/25 职场文书
医药个人求职信范文
2014/01/29 职场文书
公司寄语大全
2014/04/10 职场文书
教研活动总结
2014/04/28 职场文书
新疆民族团结演讲稿
2014/08/27 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
市委常委会班子党的群众路线教育实践活动整改方案
2014/10/25 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书
Pytorch中的学习率衰减及其用法详解
2021/06/05 Python
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL
MySQL查询日期时间
2022/05/15 MySQL
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
2022/06/01 Java/Android