作业
一、三级菜单
数据结构:

menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, 'youku':{}, }, '上地':{ '百度':{}, }, }, '昌平':{ '沙河':{ '老男孩':{}, '北航':{}, }, '天通苑':{}, '回龙观':{}, }, '朝阳':{}, '东城':{}, }, '上海':{ '闵行':{ "人民广场":{ '炸鸡店':{} } }, '闸北':{ '火车站':{ '携程':{} } }, '浦东':{}, }, '山东':{}, }
需求:
- 可依次选择进入各子菜单
- 可从任意一层往回退到上一层
- 可从任意一层退出程序
所需新知识点:列表、字典
#!/usr/bin/env python # -*- coding:utf-8 -*- # 输入省份、城市、县名称 China = { '河南省': { '焦作市': ['武陟', '温县', '博爱'], '郑州市': ['新郑', '荥阳', '中牟'], '开封市': ['兰考', '尉氏', '杞县'], }, '广东省': { '广州市': ['越秀', '荔湾', '番禺'], '深圳市': ['福田', '罗湖', '龙岗'], '东莞市': ['莞城', '南城', '东城'], }, } exit_flag = False while not exit_flag: # 第1层循环 print("33[31;1m---------------------------------33[1m") print(" 33[31;1m欢迎您来到中国33[1m ") print("33[31;1m---------------------------------33[1m") for Province in China: print(Province) print() choice_province = input("1.请输入您要前往的 省份 (输入q退出,输入b返回上级):") print() if choice_province == "q": exit_flag = True elif choice_province == "b": continue # 跳出第1层循环的剩下语句,继续进行下一次循环(选择省份) elif choice_province in China: while not exit_flag: # 第2层循环 for City in China[choice_province]: print(City) print() choice_city = input("2.请输入您要前往的 市区 (输入q退出,输入b返回上级):") print() if choice_city == "q": exit_flag = True elif choice_city == "b": break # 跳出整个第2层循环,重新进行第1层循环(选择省份) elif choice_city in China[choice_province]: while not exit_flag: # 第3层循环 for County in China[choice_province][choice_city]: print(County) print() choice_county = input("3.请输入您要前往的 县 (输入q退出,输入b返回上级):") print() if choice_county == "q": exit_flag = True elif choice_county == "b": break # 跳出整个第3层循环,重新进行第2层循环(选择市区) elif choice_county in China[choice_province][choice_city]: print("---------------------------------") print("您现在的位置是:", choice_province, choice_city, choice_county) print("---------------------------------") exit_flag = True else: print("您输入的县不存在") print() continue else: print("您输入的市区不存在") print() continue else: print("您输入的省份不存在") print() continue
#!/usr/bin/env python # -*- coding:utf-8 -*- # 输入省份、城市、县序号 China = { '河南省': { '焦作市': ['武陟', '温县', '博爱'], '郑州市': ['新郑', '荥阳', '中牟'], '开封市': ['兰考', '尉氏', '杞县'], }, '广东省': { '广州市': ['越秀', '荔湾', '番禺'], '深圳市': ['福田', '罗湖', '龙岗'], '东莞市': ['莞城', '南城', '东城'], }, } exit_flag = False while not exit_flag: # 第1层循环 province_list = [] # 定义一个省份列表 city_list = [] # 定义一个城市列表 print("33[31;1m---------------------------------33[1m") print(" 33[31;1m欢迎您来到中国33[1m ") print("33[31;1m---------------------------------33[1m") for index,Province in enumerate(China,1): print("%s. %s" % (index,Province)) province_list.append(Province) # 添加所有省份到省份列表中 print() choice_province = input("一.请输入您要前往的省份序号 (输入q退出,输入b返回上级):") print() if choice_province == "q" or choice_province == "Q": exit_flag = True elif choice_province == "b" or choice_province == "B": continue # 跳出第1层循环的剩下语句,继续进行下一次循环(选择省份) elif choice_province.isdigit(): choice_province = int(choice_province) if choice_province >= 1 and choice_province <= len(province_list): while not exit_flag: # 第2层循环 for index,City in enumerate(China[province_list[choice_province-1]],1): print("%s. %s" % (index,City)) city_list.append(City) # 添加所有城市到城市列表中 print() choice_city = input("二.请输入您要前往的城市序号 (输入q退出,输入b返回上级):") print() if choice_city == "q" or choice_city == "Q": exit_flag = True elif choice_city == "b" or choice_city == "B": break # 跳出整个第2层循环,重新进行第1层循环(选择省份) elif choice_city.isdigit(): choice_city = int(choice_city) if choice_city >=1 and choice_city <= len(city_list): while not exit_flag: # 第3层循环 for index,County in enumerate(China[province_list[choice_province-1]][city_list[choice_city-1]],1): print("%s. %s" % (index, County)) print() choice_county = input("三.请输入您要前往的县序号 (输入q退出,输入b返回上级):") print() if choice_county == "q" or choice_county == "Q": exit_flag = True elif choice_county == "b" or choice_county == "b": break # 跳出整个第3层循环,重新进行第2层循环(选择城市) elif choice_county.isdigit(): choice_county = int(choice_county) county_list = China[province_list[choice_province - 1]][city_list[choice_city - 1]] # 县列表 if choice_county >= 1 and choice_county <= len(county_list): print("---------------------------------") print("您现在的位置是:", province_list[choice_province-1],city_list[choice_city-1],county_list[choice_county-1]) print("---------------------------------") exit_flag = True else: print("您输入的县序号不存在") print() else: print("您输入的县序号不存在") print() continue else: print("您输入的城市序号不存在") print() continue else: print("您输入的城市序号不存在") print() continue else: print("您输入的省份序号不存在") print() else: print("您输入的省份序号不存在") print() continue
最终版本:

#!/usr/bin/env python # -*- coding:utf-8 -*- # 三级菜单 menu = { '北京': { '海淀': { '五道口': { 'soho': {}, '网易': {}, 'google': {} }, '中关村': { '爱奇艺': {}, '汽车之家': {}, 'youku': {}, }, '上地': { '百度': {}, }, }, '昌平': { '沙河': { '老男孩': {}, '北航': {}, }, '天通苑': {}, '回龙观': {}, }, '朝阳': {}, '东城': {}, }, '上海': { '闵行': { "人民广场": { '炸鸡店': {} } }, '闸北': { '火车站': { '携程': {} } }, '浦东': {}, }, '山东': {}, } current_layer = menu # 最高层次为menu(是一个字典) layer_list = [] # 存放每次进入的层次,用于退回上层 while True: for k in current_layer: # 遍历字典key print(" ", k) choice = input(" 33[34;1m请输入您要前往的地址(输入q退出,输入b返回上级)>>>