Python 三级菜单
程序需求:
-
打印省、市、县三级菜单
-
可返回上一级
-
可随时退出程序
1 代码实现
程序实现思路如下:
-
省、市、县的三级菜单数据源以列表+字典嵌套的方式储存
-
使用while循环实现多次交互,while嵌套实现多级菜单打印
-
使用while循环+标志位实现程序的无限循环和退出
代码如下:
# 城市三级菜单以字典+列表嵌套的方式实现
location = {
'四川省': {'成都市': ['武侯区', '青羊区', '双流区'], '内江市': ['市中区', '东兴区']},
'湖北省': {'武汉市': ['武昌区', '江汉区', '汉阳区'], '荆州市': ['公安县', '江陵县']}
}
# 退出标志位,通过修改标志位退出程序
flag = True
while flag:
# 打印省列表、获取输入
print('省列表:')
for key in location:
print(key)
a = input('请输入你想去的省[退出:quit]:')
# 对输入的省做条件判断,并进入对应的循环
if a == 'quit':
flag = False
print('成功退出程序.')
elif a in location.keys():
# 输入的省份符合条件,进入二级菜单-市
while flag:
location_a = location[a]
print('市列表:')
for key in location_a:
print(key)
b = input('请输入你想去的市[返回上一级:return,退出:quit]:')
# 对输入的市做条件判断,并进入对应的循环
if b == 'quit':
flag = False
print('成功退出程序.')
elif b == 'return':
break
elif b in location_a.keys():
# 输入的市名符合条件,进入三级菜单-区县
while flag:
location_b = location_a[b]
print('区列表:')
for item in location_b:
print(item)
c = input('请输入你想去的区[返回上一级:return,退出:quit]:')
if c == 'quit':
flag = False
print('成功退出程序.')
elif c == 'return':
break
elif c in location_b:
print('你想去的县是:%s' % c)
while flag:
d = input('是否继续[返回上一级:return,退出:quit]:')
if d == 'quit':
flag = False
print('成功退出程序.')
elif d == 'return':
break
else:
print('输入有误,请重新输入!')
else:
print('输入有误,请重新输入!')
else:
print('输入有误,请重新输入!')
else:
print('输入有误,请重新输入!')
2 代码测试
2.1 退出测试
2.1.1 选择省菜单前退出
2.1.2 选择市菜单前退出
2.1.3 选择县菜单前退出
2.1.4 选择完成后退出
2.2 输入有效性测试
2.2.1 省菜单输入测试
2.2.2 市菜单输入测试
2.2.3 县菜单输入测试
2.2.4 完成后输入测试
2.3 打印测试
2.3.1 打印省列表
2.3.2 打印市列表
2.3.3 打印县列表
2.3.4 打印选择的县
2.4 返回上一级测试
2.4.1 市级返回省级
2.4.2 县级返回市级
2.4.3 打印完成后返回县级
3 进阶版代码如下
menu = {
'四川省': {'成都市': {'武侯区', '青羊区', '双流区'}, '内江市': {'市中区', '东兴区'}},
'湖北省': {'武汉市': {'武昌区', '江汉区', '汉阳区'}, '荆州市': {'公安县', '江陵县'}}
}
current_layer = menu
parent_layer = []
while True:
for key in current_layer:
print(key)
choice = input('你的选择是[退出:quit/返回:return]:')
# 根据输入进行操作
if choice == 'quit':
print('成功退出程序')
break
elif choice == 'return':
if parent_layer: # 当父层为空,即当前为第一级菜单时,返回无效
current_layer = parent_layer.pop()
elif not isinstance(current_layer, dict): # 当前层不是字典时,说明到达最底层,不再继续往下
continue
elif choice in current_layer:
parent_layer.append(current_layer) # 将父层添加至列表,以便返回时使用
current_layer = current_layer[choice] # 将当前层替换为子菜单
else:
print('输入有误!')
进阶版代码中,主要使用父层和子层的相互更改来实现多级菜单的前进、后退