1. 程式人生 > >Python練習_三級選單

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('\t', i2)#第二層
            choice2 = input('選擇進入2>>>:')
            if choice2 in data[choice]:
                while not exit_flag:
                    for i3 in data[choice][choice2]:
                        print('\t\t', i3)#第三層
                    choice3 = input('選擇進入3>>>:')
                    if choice3 in data[choice][choice2]:
                            for i4 in data[choice][choice2][choice3]:
                                print('\t\t', 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('請在下方輸入查詢地址\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('輸入錯誤!')