任务要求:
1、列出菜单信息提供用户选择
2、根据用户选择进入下级菜单
3、用户输入b返回上一级菜单
4、用户输入q直接退出系统
流程图:
代码:
1、主文件
#!/usr/bin/env python # -*- conding:utf-8 -*- # create a menu system# 20170911 # evescnimport sys import yamldef myinput():# 输出提示信息的函数print("输入q退出系统")print("输入b返回上一级菜单")key = input("请输入对应的名称进入下级菜单:")return keydef mycity(key):# 输出市级别信息的函数print("-------------------------------------------------")for i, m in enumerate(menu[str(key)], 1):for item in m.keys():print(" ", i, item)key = myinput()return keydef mycounty(key1, key2):# 输出县基本信息的函数print("-------------------------------------------------")for i, m in enumerate(menu[str(key1)], 1):for item in m.keys():if item == key2:for i, item in enumerate(m[str(item)], 1):print(" ", i, item)key = myinput()return keydef mymunici(key):# 输出4个直辖市的函数print("-------------------------------------------------")for i, item in enumerate(menu[str(key)], 1):print(" ", i, item)key = myinput()return keydef mysar(key):# 输出特别行政区的函数print("-------------------------------------------------")# for i, item in enumerate(menu[str(key)], 1):i = 1print(" ", i, menu[str(key)])key = myinput()return keydef exitorcontinue(key):# 判断用户键入的值,以便判断是否退出或返回上一级if key == 'q':sys.exit("感谢使用查询系统")elif key == 'b':return 0# 导入yaml文件,并转换为字典格式 f = open('pro.yaml', 'r', encoding='utf-8') menu = yaml.load(f)# 定义直辖市列表,判断用户输入是否为直辖市 municipalities = ['北京市', '上海市', '重庆市', '天津市', ]# 定义特别行政区 SAR = ['香港', '澳门', '台湾', '钓鱼岛', ]# 定义在省级错误次数 n = 3while True:if n == 0: # 3次输入不正确直接退出系统sys.exit("感谢使用查询系统")print("-------------------------------------------------")for i, item in enumerate(menu.keys(), 1): # 列出整个省级菜单print(" ", i, item)key1 = myinput()if key1 == 'q' or key1 == 'b': # 判断此次键入的值是否为q,bsys.exit("感谢使用查询系统")if key1 not in menu.keys(): # 判断此次键入的值是否在所有可选的省级菜单中n -= 1print("-------------------------------------------------")print("你输入的省份不对,请重新输入")print("你还有%s次机会,否则将直接退出系统" %n)continuewhile True:if key1 in municipalities: # 判断是否属于直辖市key2 = mymunici(key1)if exitorcontinue(key2) == 0:breakelif key1 in SAR: # 判断是否属于特别行政区key2 = mysar(key1)if exitorcontinue(key2) == 0:breakelse: # 不属于直辖市key2 = mycity(key1)if exitorcontinue(key2) == 0:breakwhile True: # 查找第三级县菜单key3 = mycounty(key1, key2)if exitorcontinue(key3) == 0:break
2、省市县文件
香港:香港 澳门:澳门 台湾:台湾 钓鱼岛:钓鱼岛 北京市:- 市辖区- 东城区- 西城区- 崇文区- 宣武区- 朝阳区- 丰台区- 石景山区- 海淀区- 门头沟区- 房山区- 通州区- 顺义区- 昌平区- 大兴区- 怀柔区- 平谷区- 密云县- 延庆县 天津市:- 市辖区- 和平区- 河东区- 河西区- 南开区- 河北区- 红桥区- 塘沽区- 汉沽区- 大港区- 东丽区- 西青区- 津南区- 北辰区- 武清区- 宝坻区- 宁河县- 静海县- 蓟 县 河北省:- 石家庄市:- 长安区- 桥东区- 桥西区- 新华区- 井陉矿区- 裕华区- 井陉县- 正定县- 栾城县- 行唐县- 灵寿县- 高邑县- 深泽县- 赞皇县- 无极县- 平山县- 元氏县- 赵县- 辛集市- 藁城市- 晋州市- 新乐市- 鹿泉市- 唐山市:- 路南区- 路北区- 古冶区- 开平区- 丰南区- 丰润区- 滦县- 滦南县- 乐亭县- 迁西县- 玉田县- 唐海县- 遵化市- 迁安市- 秦皇岛市:- 海港区- 山海关区- 北戴河区- 青龙满族自治县- 昌黎县- 抚宁县- 卢龙县- 邯郸市:- 邯山区- 丛台区- 复兴区- 峰峰矿区- 邯郸县- 临漳县- 成安县- 大名县- 涉 县- 磁 县- 肥乡县- 永年县- 邱 县- 鸡泽县- 广平县- 馆陶县- 魏 县- 曲周县- 武安市- 邢台市:- 桥东区- 桥西区- 邢台县- 临城县- 内丘县- 柏乡县- 隆尧县- 任 县- 南和县- 宁晋县- 巨鹿县- 新河县- 广宗县- 平乡县- 威 县- 清河县- 临西县- 南宫市- 沙河市- 保定市:- 新市区- 北市区- 南市区- 满城县- 清苑县- 涞水县- 阜平县- 徐水县- 定兴县- 唐 县- 高阳县- 容城县- 涞源县- 望都县- 安新县- 易 县- 曲阳县- 蠡 县- 顺平县- 博野县- 雄 县- 涿州市- 定州市- 安国市- 高碑店市- 张家口市:- 桥东区- 桥西区- 宣化区- 下花园区- 宣化县- 张北县- 康保县- 沽源县- 尚义县- 蔚 县- 阳原县- 怀安县- 万全县- 怀来县- 涿鹿县- 赤城县- 崇礼县- 承德市:- 双桥区- 双滦区- 鹰手营子矿区- 承德县- 兴隆县- 平泉县- 滦平县- 隆化县- 丰宁满族自治县- 宽城满族自治县- 围场满族蒙古族自治县- 沧州市:- 新华区- 运河区- 沧 县- 青 县- 东光县- 海兴县- 盐山县- 肃宁县- 南皮县- 吴桥县- 献 县- 孟村回族自治县- 泊头市- 任丘市- 黄骅市- 河间市- 廊坊市:- 安次区- 广阳区- 固安县- 永清县- 香河县- 大城县- 文安县- 大厂回族自治县- 霸州市- 三河市- 衡水市:- 桃城区- 枣强县- 武邑县- 武强县- 饶阳县- 安平县- 故城县- 景 县- 阜城县- 冀州市- 深州市 山西省:- 太原市:- 小店区- 迎泽区- 杏花岭区- 尖草坪区- 万柏林区- 晋源区- 清徐县- 阳曲县- 娄烦县- 古交市- 大同市:- 城 区- 矿 区- 南郊区- 新荣区- 阳高县- 天镇县- 广灵县- 灵丘县- 浑源县- 左云县- 大同县- 阳泉市:- 城 区- 矿 区- 郊 区- 平定县- 盂 县- 长治市:- 城 区- 郊 区- 长治县- 襄垣县- 屯留县- 平顺县- 黎城县- 壶关县- 长子县- 武乡县- 沁 县- 沁源县- 潞城市- 晋城市:- 城 区- 沁水县- 阳城县- 陵川县- 泽州县- 高平市- 朔城区- 平鲁区- 山阴县- 应 县- 右玉县- 怀仁县- 晋中市:- 榆次区- 榆社县- 左权县- 和顺县- 昔阳县- 寿阳县- 太谷县- 祁 县- 平遥县- 灵石县- 介休市- 运城市:- 盐湖区- 临猗县- 万荣县- 闻喜县- 稷山县- 新绛县- 绛 县- 垣曲县- 夏 县- 平陆县- 芮城县- 永济市- 河津市- 忻州市:- 忻府区- 定襄县- 五台县- 代 县- 繁峙县- 宁武县- 静乐县- 神池县- 五寨县- 岢岚县- 河曲县- 保德县- 偏关县- 原平市- 临汾市:- 尧都区- 曲沃县- 翼城县- 襄汾县- 洪洞县- 古 县- 安泽县- 浮山县- 吉 县- 乡宁县- 大宁县- 隰 县- 永和县- 蒲 县- 汾西县- 侯马市- 霍州市- 吕梁市:- 离石区- 文水县- 交城县- 兴 县- 临 县- 柳林县- 石楼县- 岚 县- 方山县- 中阳县- 交口县- 孝义市- 汾阳市 内蒙古自治区:- 呼和浩特市:- 新城区- 回民区- 玉泉区- 赛罕区- 土默特左旗- 托克托县- 和林格尔县- 清水河县- 武川县- 包头市:- 东河区- 昆都仑区- 青山区- 石拐区- 白云矿区- 九原区- 土默特右旗- 固阳县- 达尔罕茂明安联合旗- 海勃湾区- 海南区- 乌达区- 赤峰市:- 红山区- 元宝山区- 松山区- 阿鲁科尔沁旗- 巴林左旗- 巴林右旗- 林西县- 克什克腾旗- 翁牛特旗- 喀喇沁旗- 宁城县- 敖汉旗- 通辽市:- 科尔沁区- 科尔沁左翼中旗- 科尔沁左翼后旗- 开鲁县- 库伦旗- 奈曼旗- 扎鲁特旗- 霍林郭勒市- 鄂尔多斯市:- 东胜区- 达拉特旗- 准格尔旗- 鄂托克前旗- 鄂托克旗- 杭锦旗- 乌审旗- 伊金霍洛旗- 呼伦贝尔市:- 海拉尔区- 阿荣旗- 莫力达瓦达斡尔族自治旗- 鄂伦春自治旗- 鄂温克族自治旗- 陈巴尔虎旗- 新巴尔虎左旗- 新巴尔虎右旗- 满洲里市- 牙克石市- 扎兰屯市- 额尔古纳市- 根河市- 巴彦淖尔市:- 临河区- 五原县- 磴口县- 乌拉特前旗- 乌拉特中旗- 乌拉特后旗- 杭锦后旗- 乌兰察布市:- 集宁区- 卓资县- 化德县- 商都县- 兴和县- 凉城县- 察哈尔右翼前旗- 察哈尔右翼中旗- 察哈尔右翼后旗- 四子王旗- 丰镇市- 兴安盟:- 乌兰浩特市- 阿尔山市- 科尔沁右翼前旗- 科尔沁右翼中旗- 扎赉特旗- 突泉县- 锡林郭勒盟:- 二连浩特市- 锡林浩特市- 阿巴嘎旗- 苏尼特左旗- 苏尼特右旗- 东乌珠穆沁旗- 西乌珠穆沁旗- 太仆寺旗- 镶黄旗- 正镶白旗- 正蓝旗- 多伦县- 阿拉善盟:- 阿拉善左旗- 阿拉善右旗- 额济纳旗 辽宁省:- 沈阳市:- 和平区- 沈河区- 大东区- 皇姑区- 铁西区- 苏家屯区- 东陵区- 沈北新区*- 于洪区- 辽中县- 康平县- 法库县- 新民市- 大连市:- 中山区- 西岗区- 沙河口区- 甘井子区- 旅顺口区- 金州区- 长海县- 瓦房店市- 普兰店市- 庄河市- 鞍山市:- 铁东区- 铁西区- 立山区- 千山区- 台安县- 岫岩满族自治县- 海城市- 抚顺市:- 新抚区- 东洲区- 望花区- 顺城区- 抚顺县- 新宾满族自治县- 清原满族自治县- 本溪市:- 平山区- 溪湖区- 明山区- 南芬区- 本溪满族自治县- 桓仁满族自治县- 丹东市:- 元宝区- 振兴区- 振安区- 宽甸满族自治县- 东港市- 凤城市- 锦州市:- 古塔区- 凌河区- 太和区- 黑山县- 义 县- 凌海市- 北镇市*- 营口市:- 站前区- 西市区- 鲅鱼圈区- 老边区- 盖州市- 大石桥市- 阜新市:- 海州区- 新邱区- 太平区- 清河门区- 细河区- 阜新蒙古族自治县- 彰武县- 辽阳市:- 白塔区- 文圣区- 宏伟区- 弓长岭区- 太子河区- 辽阳县- 灯塔市- 盘锦市:- 双台子区- 兴隆台区- 大洼县- 盘山县- 铁岭市:- 银州区- 清河区- 铁岭县- 西丰县- 昌图县- 调兵山市- 开原市- 朝阳市- 市辖区- 双塔区- 龙城区- 朝阳县:- 建平县- 喀喇沁左翼蒙古族自治县- 北票市- 凌源市- 葫芦岛市:- 连山区- 龙港区- 南票区- 绥中县- 建昌县- 兴城市 吉林省:- 长春市:- 南关区- 宽城区- 朝阳区- 二道区- 绿园区- 双阳区- 农安县- 九台市- 榆树市- 德惠市
测试结果:
-------------------------------------------------1 辽宁省2 钓鱼岛3 北京市4 天津市5 吉林省6 河北省7 台湾8 内蒙古自治区9 山西省10 香港11 澳门 输入q退出系统 输入b返回上一级菜单 请输入对应的名称进入下级菜单:台湾 -------------------------------------------------1 台湾 输入q退出系统 输入b返回上一级菜单 请输入对应的名称进入下级菜单:b -------------------------------------------------1 辽宁省2 钓鱼岛3 北京市4 天津市5 吉林省6 河北省7 台湾8 内蒙古自治区9 山西省10 香港11 澳门 输入q退出系统 输入b返回上一级菜单 请输入对应的名称进入下级菜单:北京市 -------------------------------------------------1 市辖区2 东城区3 西城区4 崇文区5 宣武区6 朝阳区7 丰台区8 石景山区9 海淀区10 门头沟区11 房山区12 通州区13 顺义区14 昌平区15 大兴区16 怀柔区17 平谷区18 密云县19 延庆县 输入q退出系统 输入b返回上一级菜单 请输入对应的名称进入下级菜单:b -------------------------------------------------1 辽宁省2 钓鱼岛3 北京市4 天津市5 吉林省6 河北省7 台湾8 内蒙古自治区9 山西省10 香港11 澳门 输入q退出系统 输入b返回上一级菜单 请输入对应的名称进入下级菜单:山西省 -------------------------------------------------1 太原市2 大同市3 阳泉市4 长治市5 晋城市6 晋中市7 运城市8 忻州市9 临汾市10 吕梁市 输入q退出系统 输入b返回上一级菜单 请输入对应的名称进入下级菜单:太原市 -------------------------------------------------1 小店区2 迎泽区3 杏花岭区4 尖草坪区5 万柏林区6 晋源区7 清徐县8 阳曲县9 娄烦县10 古交市 输入q退出系统 输入b返回上一级菜单 请输入对应的名称进入下级菜单:b -------------------------------------------------1 太原市2 大同市3 阳泉市4 长治市5 晋城市6 晋中市7 运城市8 忻州市9 临汾市10 吕梁市 输入q退出系统 输入b返回上一级菜单 请输入对应的名称进入下级菜单:q 感谢使用查询系统