zoukankan      html  css  js  c++  java
  • Python练习_三级菜单

    打印省、市、县三级菜单

    可返回上一级

    可随时退出程序

    用递归实现:
    
    menu = {
        '北京': {
            '海淀': {
                '五道口': {
                    'soho': {},
                    '网易': {},
                    'google': {}
                },
                '中关村': {
                    '爱奇艺': {},
                    '汽车之家': {},
                    'youku': {},
                },
                '上地': {
                    '百度': {},
                },
            },
            '昌平': {
                '沙河': {
                    '老男孩': {},
                    '北航': {},
                },
                '天通苑': {},
                '回龙观': {},
            },
            '朝阳': {},
            '东城': {},
        },
        '上海': {
            '闵行': {
                "人民广场": {
                    '炸鸡店': {}
                }
            },
            '闸北': {
                '火车战': {
                    '携程': {}
                }
            },
            '浦东': {},
        },
        '山东': {},
    }
    def threeMenu(dic):
        while 1:
            for k in dic:
                print(k)
            key = input('输入城市(按b返回上一层,按q退出):')
            if key == 'b' or key == 'q': return key
            elif key in dic.keys() and dic[key]:
                ret = threeMenu(dic[key])
                if ret == 'q': return ret
            elif (not dic.get(key)) or (not dic[key]):
                continue

    -

    用堆栈实现
    menu = {
        '北京': {
            '海淀': {
                '五道口': {
                    'soho': {},
                    '网易': {},
                    'google': {}
                },
                '中关村': {
                    '爱奇艺': {},
                    '汽车之家': {},
                    'youku': {},
                },
                '上地': {
                    '百度': {},
                },
            },
            '昌平': {
                '沙河': {
                    '老男孩': {},
                    '北航': {},
                },
                '天通苑': {},
                '回龙观': {},
            },
            '朝阳': {},
            '东城': {},
        },
        '上海': {
            '闵行': {
                "人民广场": {
                    '炸鸡店': {}
                }
            },
            '闸北': {
                '火车战': {
                    '携程': {}
                }
            },
            '浦东': {},
        },
        '山东': {},
    }
    
    l = [menu]
    while l:
        for k in l[-1]:
            print(k)
        key = input('输入城市(按b返回上一层,按q退出):')
        if key in l[-1].keys() and l[-1][key]:
            l.append(l[-1][key])
        elif key == 'b':
            l.pop()
        elif key == 'q':
            break
        else:
            continue
    #!/user/bin/env python
    #-*-coding:utf-8 -*-
    #Author: qinjiaxi
    '''需求:
    1.设计一个三级菜单
    2.在任意时候可以返回上级菜单
    3.在任何一级菜单里面可以随时退出程序
     
     
    思路:设计一个嵌套字典用于存储菜单内容
            --->利用嵌套循环打印每一级的内容
                --->然后判断输入条件根据输入条件选择是否退出和返回上级
    '''
    data = {
        "武汉":
            {
            "光谷":{
                "关山":['文华','华科','湖科']
            },
            "江夏":{
                "郊外":['湖经','楚天','纺大']
            }
            },
     
        "北京":{
            '朝阳':{
                'a':[1,2,3]
            }
        },
        "上海":{
            "市内":{
                'b':[2,3,4]
            }
        }
    }
    print(data)
    exit_flag = False#设置一个退出标志
    while not exit_flag:
        for i in data:
            print(i)#第一层
        choice = input('选择进入1>>>:')
        if choice in data:
            while not exit_flag:
                for i2 in data[choice]:
                    print('	', i2)#第二层
                choice2 = input('选择进入2>>>:')
                if choice2 in data[choice]:
                    while not exit_flag:
                        for i3 in data[choice][choice2]:
                            print('		', i3)#第三层
                        choice3 = input('选择进入3>>>:')
                        if choice3 in data[choice][choice2]:
                                for i4 in data[choice][choice2][choice3]:
                                    print('		', i4)
                                choice4 = input('最后一层,按b返回>>>:')
                                if choice4 == 'b':
                                    pass
                                elif choice4 == 'q':
                                    exit_flag = True
                        if choice3 == 'b':
                            break
                        elif choice3 == 'q':
                            exit_flag = True
                if choice2 == 'b':
                    break
                elif choice2 == 'q':
                    exit_flag = True
        elif choice == 'q':
            exit_flag = True

    -

    # _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('输入错误!')

    -

    # _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('请在下方输入查询地址
    >>>:').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('输入错误!')
  • 相关阅读:
    ChartControl第一课简短的控件初步设计
    DevExpress中ChartControl柱状图(Bar)用法
    devexpress中用ChartControl生成柱状图
    ChartControl一个小Demo
    初识Devexpress ChartControl 之 动态添加stepline及TextAnnotation
    DEV控件之ChartControl用法
    DevExpress]ChartControl 创建Drill-Down样式的Title
    winform CheckedListBox实现全选/全不选
    winform 配置文件的加密解密
    Winform自定义窗体样式,实现标题栏可灵活自定义
  • 原文地址:https://www.cnblogs.com/dongye95/p/10193479.html
Copyright © 2011-2022 走看看