三级菜单需求:

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,程序终止


程序运行错误释义:

python 界面输出框 python输出菜单_中文字符

此错误为从文件中取数据时的解码错误,因文件中含有中文字符,所以需要在读取文件时添加 encoding= 'utf-8' 参数