三级菜单需求:
1. 运行程序输出第一级菜单
2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单
3. 菜单数据保存在文件中
4. 让用户选择是否要退出
5. 有返回上一级菜单的功能
程序代码:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
menu = open('menu.txt',encoding= 'utf-8') #此部分为从文件menu.txt文件中以"$"为间隔取出所有地名
for j in menu.readlines(): #分别赋值给所有地名对应的变量
region,province_db,province_hb,city_hlj,city_jl,city_hb,city_sx,area_heb,\
area_jms,area_cc,area_jl,area_bd,area_sjz,area_ty,area_dt= j.split('$')
flag = True #设置程序终止变量
while flag: #进入首层菜单,显示第一级菜单内容,等待用户输入
print("请选择所在地区:\n(输入q 退出)")
print(region)
num = input("---->")
if num == '1': #判断用户输入如果用户选择第一菜单,进入下面循环
while flag: #进入第二级菜单,显示第二级菜单内容,等待用户输入
print("请选择所在的省:\n(输入b 返回上一级菜单,输入q 退出)")
print(province_db)
num = input("---->")
if num == '1': #判断用户输入如果用户选择第一菜单,进入下面循环
while flag: #进入第三级菜单,显示第三级菜单内容,等待用户输入
print("请选择所在的市:\n(输入b 返回上一级菜单,输入q 退出)")
print(city_hlj)
num = input("---->")
if num == '1': #判断用户选择第一菜单,进入下面循环
while flag: #显示用第三级菜单中的内容
print('您所在的市有如下区划:\n%s' % (area_heb))
print('输入b 返回上一级菜单,输入q 退出')
num = input("---->")
if num == 'b': #如果用户输入“b“,跳出本级循环,返回上一级菜单
break
elif num == 'q': #如果用户输入”q”,将程序终止变量置为False,跳出所有循环,终止程序
flag = False
else: #用户输入其他字符,显示输入有误,重新输入
print('输入有误,请重输入\n')
elif num == '2':
while flag:
print('您所在的市有如下区划:\n%s' % (area_jms))
print('输入b 返回上一级菜单,输入q 退出')
num = input("---->")
if num == 'b':
break
elif num == 'q':
flag = False
else:
print('输入有误,请重输入\n')
elif num == 'b':
break
elif num == 'q':
flag = False
else:
print('输入有误,请重输入\n')
elif num == '2':
while flag:
print("请选择所在的市:\n(输入b 返回上一级菜单,输入q 退出)")
print(city_jl)
num = input("---->")
if num == '1':
while flag:
print('您所在的市有如下区划:\n%s' % (area_cc))
print('输入b 返回上一级菜单,输入q 退出')
num = input("---->")
if num == 'b':
break
elif num == 'q':
flag = False
else:
print('输入有误,请重输入\n')
elif num == '2':
while flag:
print('您所在的市有如下区划:\n%s' % (area_jl))
print('输入b 返回上一级菜单,输入q 退出')
num = input("---->")
if num == 'b':
break
elif num == 'q':
flag = False
else:
print('输入有误,请重输入\n')
elif num == 'b':
break
elif num == 'q':
flag = False
else:
print('输入有误,请重输入\n')
elif num == 'b':
break
elif num == 'q':
flag = False
else:
print('输入有误,请重输入\n')
elif num == '2':
while flag:
print("请选择所在的省:\n(输入b 返回上一级菜单,输入q 退出)")
print(province_hb)
num = input("---->")
if num == '1':
while flag:
print("请选择所在的市:\n(输入b 返回上一级菜单,输入q 退出)")
print(city_hb)
num = input("---->")
if num == '1':
while flag:
print('您所在的市有如下区划:\n%s' % (area_bd))
print('输入b 返回上一级菜单,输入q 退出')
num = input("---->")
if num == 'b':
break
elif num == 'q':
flag = False
else:
print('输入有误,请重输入\n')
elif num == '2':
while flag:
print('您所在的市有如下区划:\n%s' % (area_sjz))
print('输入b 返回上一级菜单,输入q 退出')
num = input("---->")
if num == 'b':
break
elif num == 'q':
flag = False
else:
print('输入有误,请重输入\n')
elif num == 'b':
break
elif num == 'q':
flag = False
else:
print('输入有误,请重输入\n')
elif num == '2':
while flag:
print("请选择所在的市:\n(输入b 返回上一级菜单,输入q 退出)")
print(city_sx)
num = input("---->")
if num == '1':
while flag:
print('您所在的市有如下区划:\n%s' % (area_ty))
print('输入b 返回上一级菜单,输入q 退出')
num = input("---->")
if num == 'b':
break
elif num == 'q':
flag = False
else:
print('输入有误,请重输入\n')
elif num == '2':
while flag:
print('您所在的市有如下区划:\n%s' % (area_dt))
print('输入b 返回上一级菜单,输入q 退出')
num = input("---->")
if num == 'b':
break
elif num == 'q':
flag = False
else:
print('输入有误,请重输入\n')
elif num == 'b':
break
elif num == 'q':
flag = False
else:
print('输入有误,请重输入\n')
elif num == 'b':
break
elif num == 'q':
flag = False
else:
print('输入有误,请重输入\n')
elif num == 'q':
flag = False
else:
print('输入有误,请重输入\n')
menu.close()
菜单文件:1,东北地区 2,华北地区$1,黑龙江省 2,吉林省$1,河北 2,山西$1,哈尔滨市 2,佳木斯市$1,长春市 2,吉林市$1,保定市 2,石家庄市$1,太原市 2,大同市$1,道里区 2,南岗区$1,前进区 2,向阳区$1,南关区 2,宽城区$1,船营区 2,龙潭区$1,竞秀区 2,莲池区$1,新华区 2,长安区$1,小店区 2,迎泽区$1,南郊区 2,新荣区程序重要位置解释:1,
menu = open('menu.txt',encoding= 'utf-8') #因菜单文件中含有中文字符,因此此处要指定解码器
for j in menu.readlines(): #此处为根据文件中的“$”作为标志,分割文件,将文件内容分别赋值给相应变量
region,province_db,province_hb,city_hlj,city_jl,city_hb,city_sx,area_heb,\
area_jms,area_cc,area_jl,area_bd,area_sjz,area_ty,area_dt= j.split('$')
2,if num == 'b': #如果用户输入b
break #跳出本次循环
elif num == 'q': #如果用户输入q
flag = False #将flag置为Flase,如此所有while循环的值均会变成False,程序终止
程序运行错误释义:
此错误为从文件中取数据时的解码错误,因文件中含有中文字符,所以需要在读取文件时添加 encoding= 'utf-8' 参数
















