Home  >  Article  >  Backend Development  >  Detailed explanation of Python three-level menu examples

Detailed explanation of Python three-level menu examples

巴扎黑
巴扎黑Original
2017-09-15 10:51:382381browse

The editor below will bring you an example of a Python three-level menu. The editor thinks it’s pretty good, so I’ll share it with you now and give it as a reference. Let’s follow the editor and take a look.

Requirements:

Print the provincial, city and county three-level menu

You can return to the previous level

You can exit the program at any time

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

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

The above is the detailed content of Detailed explanation of Python three-level menu examples. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn