Python的字典练习-三级菜单 发表于 2019-03-08 更新于 2019-07-13 阅读次数: 需求说明 打印省、市、县三级菜单 可返回上一级 可随时退出程序 参考的字典样例: 123456789101112131415161718province_city = { '河北': { '石家庄': ['长安区', '桥东区', '桥西区', '新华区', '井陉矿区', '裕华区', '井陉县', '正定县', '栾城县', '其他'], '唐山': ['路南区', '路北区', '古冶区', '开平区', '丰南区', '丰润区', '滦县', '滦南县', '乐亭县', '迁西县', '其他'], '秦皇岛': ['海港区', '山海关区', '北戴河区', '青龙满族自治县', '昌黎县', '抚宁县', '卢龙县', '其他'], '衡水': ['桃城区', '枣强县', '武邑县', '武强县', '饶阳县', '安平县', '故城县', '景县', '阜城县', '冀州市', '其他'] }, '山西': { '太原': ['小店区', '迎泽区', '杏花岭区', '尖草坪区', '万柏林区', '晋源区', '清徐县', '阳曲县', '娄烦县', '古交市', '其他'], '大同': ['城区', '矿区', '南郊区', '新荣区', '阳高县', '天镇县', '广灵县', '灵丘县', '浑源县', '左云县', '大同县', '其他'], '吕梁': ['离石区', '文水县', '交城县', '兴县', '临县', '柳林县', '石楼县', '岚县', '方山县', '交口县', '汾阳市', '其他'] }, '内蒙古': { '呼和浩特': ['新城区', '回民区', '玉泉区', '玉泉区', '赛罕区', '土默特左旗', '托克托县', '和林格尔县', '清水河县', '其他'], '包头': ['东河区', '昆都仑区', '青山区', '石拐区', '白云矿区', '九原区', '土默特右旗', '固阳县', '达尔罕茂明安联合旗', '其他'], '阿拉善': ['阿拉善左旗', '阿拉善右旗', '额济纳旗', '其他'] }} 示范代码123456789101112131415161718192021222324252627282930313233343536373839404142434445#!/usr/bin/env python3# -*- coding: utf-8 -*-province_city = { '河北': { '石家庄': ['长安区', '桥东区', '桥西区', '新华区', '井陉矿区', '裕华区', '井陉县', '正定县', '栾城县', '其他'], '唐山': ['路南区', '路北区', '古冶区', '开平区', '丰南区', '丰润区', '滦县', '滦南县', '乐亭县', '迁西县', '其他'], '秦皇岛': ['海港区', '山海关区', '北戴河区', '青龙满族自治县', '昌黎县', '抚宁县', '卢龙县', '其他'], '衡水': ['桃城区', '枣强县', '武邑县', '武强县', '饶阳县', '安平县', '故城县', '景县', '阜城县', '冀州市', '其他'] }, '山西': { '太原': ['小店区', '迎泽区', '杏花岭区', '尖草坪区', '万柏林区', '晋源区', '清徐县', '阳曲县', '娄烦县', '古交市', '其他'], '大同': ['城区', '矿区', '南郊区', '新荣区', '阳高县', '天镇县', '广灵县', '灵丘县', '浑源县', '左云县', '大同县', '其他'], '吕梁': ['离石区', '文水县', '交城县', '兴县', '临县', '柳林县', '石楼县', '岚县', '方山县', '交口县', '汾阳市', '其他'] }, '内蒙古': { '呼和浩特': ['新城区', '回民区', '玉泉区', '玉泉区', '赛罕区', '土默特左旗', '托克托县', '和林格尔县', '清水河县', '其他'], '包头': ['东河区', '昆都仑区', '青山区', '石拐区', '白云矿区', '九原区', '土默特右旗', '固阳县', '达尔罕茂明安联合旗', '其他'], '阿拉善': ['阿拉善左旗', '阿拉善右旗', '额济纳旗', '其他'] }}current_layer = province_city # 当前层就是初始层,用来实现动态循环parent_list = [] # 保存所有父级元素,最后一个元素永远都是父亲级while True: for key in current_layer: # 遍历当前层的所有元素并打印之 print(key) user_choice = input('输入名称进行选择,返回上一级请按b,退出请按q >> ') # 引导用户进行选择 if user_choice in current_layer: if type(current_layer) is list: # 根据最后一层是列表对象的特点判断 print('\033[0;31m已经是最后一层了\033[0m') else: parent_list.append(current_layer) # 即将进入下一层,当前层作为父级元素追加到列表 current_layer = current_layer[user_choice] # 当前层赋值为当前层的下一层数据 elif user_choice == 'b': if parent_list: # 如果父级元素为空则不做任何操作 current_layer = parent_list.pop() # 删除并返回列表的最后一个元素,及父层元素 elif user_choice == 'q': exit('退出') else: print('输入的内容 \033[0;31m%s\033[0m 不正确' % user_choice) 有钱任性,请我吃包辣条 打赏 微信支付 支付宝