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使用PyGreSQL操作PostgreSQL数据库教程
Jul 30 Python
python 读取excel文件生成sql文件实例详解
May 12 Python
python多线程之事件Event的使用详解
Apr 27 Python
Flask实现图片的上传、下载及展示示例代码
Aug 03 Python
python环形单链表的约瑟夫问题详解
Sep 27 Python
对Python 3.5拼接列表的新语法详解
Nov 08 Python
python pandas 时间日期的处理实现
Jul 30 Python
python matplotlib饼状图参数及用法解析
Nov 04 Python
python实现XML解析的方法解析
Nov 16 Python
python3 tkinter实现添加图片和文本
Nov 26 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
Jan 08 Python
pytorch--之halfTensor的使用详解
May 24 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 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
PHP命名空间(namespace)的使用基础及示例
2014/08/18 PHP
浅谈PHP中output_buffering
2015/07/13 PHP
php getcwd与dirname(__FILE__)区别详解
2016/09/24 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
flash调用js中的方法,让js传递变量给flash的办法及思路
2013/08/07 Javascript
jquery中的$(document).ready()使用小结
2014/02/14 Javascript
Egret引擎开发指南之运行项目
2014/09/03 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
Node.js+Express+MySql实现用户登录注册功能
2017/07/10 Javascript
Angular2关于@angular/cli默认端口号配置的问题
2017/07/15 Javascript
对vue中v-if的常见使用方法详解
2018/09/28 Javascript
JS如何生成动态列表
2020/09/22 Javascript
vue实现拖拽进度条
2021/03/01 Vue.js
[56:42]VP vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
[49:08]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.27
2020/12/01 DOTA
python 全局变量的import机制介绍
2017/09/07 Python
python 检查文件mime类型的方法
2018/12/08 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
2019/04/30 Python
Python数据类型之Tuple元组实例详解
2019/05/08 Python
详解python播放音频的三种方法
2019/09/23 Python
浅谈django 重载str 方法
2020/05/19 Python
python实现经典排序算法的示例代码
2021/02/07 Python
荷兰最大的鞋子、服装和运动折扣店:Bristol
2021/01/07 全球购物
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
放飞蜻蜓反思
2014/02/05 职场文书
安全生产管理合理化建议书
2014/03/12 职场文书
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
金融与证券专业求职信
2014/06/22 职场文书
甲午大海战观后感
2015/06/02 职场文书
初中英语教学反思范文
2016/02/15 职场文书
SpringBoot工程下使用OpenFeign的坑及解决
2021/07/02 Java/Android
python开发人人对战的五子棋小游戏
2022/05/02 Python