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