python学习基础篇--编写三级菜单

#!/usr/bin/env python
#-*- coding:utf-8 -*-
#------------------------------------------------------
#制作一个三级菜单,要求:
#可以依次选择,进入到相应的菜单
#可以在任意层执行返回上一次或者退出
#-------------------------------------------------------
print("省市区县三级菜单展示")
dic= {
    '陕西省':{
        '西安市':['莲湖区','长安区','浐灞区','碑林区'],
        '渭南市':['临渭区','华州区','大荔县','蒲城县'],
        '汉中市':['汉台区','南郑区','城固县','西乡县'],
    },
    '浙江省':{
        '杭州市':['西湖区','江干区','上城区','下城区'],
        '温州市':['鹿城区','龙湾区','瓯海区','洞头区'],
        '台州市':['椒江区','黄岩区','黄岩区','临海市'],
    },
    '河南省':{
        '郑州市':['中原区','二七区','管城区','金水区'],
        '开封市':['鼓楼区','龙亭区','顺河区','祥符区'],
        '洛阳市':['涧西区','西工区','老城区','洛龙区'],
    },
}
sheng_list=list(dic.keys()) #获取省列表
while True:
    print("".center(50,'*'))           #打印省标题栏,长度50,字符居中
    for i in sheng_list:
        print(sheng_list.index(i)+1,i)      #for循环读取省列表,并对读取的列表编号
    sheng_id=input("请输入省的编号,退出请输入q:")
    if sheng_id.isdigit():                  #判断输入的编号是否为数字
        sheng_id=int(sheng_id)              #对输入的编号取整
        if sheng_id >0 and sheng_id <=len(sheng_list):  #判断输入的编号是否大于零且小于等于省列表的长度
            sheng_name=sheng_list[sheng_id-1]             #获取省列表中的名字,列表中默认是从0开始,所以需要减1
            shi_list=list(dic[sheng_name].keys())          #获取市列表
            while True:
                print("".center(50,"*"))               #打印市标题栏,长度50,字符居中
                for i in shi_list:
                    print(shi_list.index(i)+1,i)            #for循环读取市列表,并对读取的列表编号
                shi_id=input("请输入市的编号,返回请输入b,退出请输入q:")
                if shi_id.isdigit():                         #判断输入的编号是否为数字
                    shi_id=int(shi_id)                           #对输入的编号取整
                    if shi_id >0 and shi_id<=len(shi_list):     #判断输入的编号是否大于零且小于等于省列表的长度
                        shi_name=shi_list[shi_id-1]              #获取市列表中的名字,列表中默认是从0开始,所以需要减1
                        xian_list=dic[sheng_name][shi_name]        #获取区县列表
                        while True:
                            print("区县".center(50,"*"))                #打印区县标题栏,长度50,字符居中
                            for i in xian_list:
                                print(xian_list.index(i)+1,i)             #for循环读取区县列表,并对读取的列表编号
                            back_or_quit=input("返回上一层请输入b,退出请输入q:")
                            if back_or_quit=='b':                      #判断输入的字符是否等于字符b
                                break                                  #如果是,则结束本次循环,返回到上一个循环
                            elif back_or_quit=='q':                    #判断输入的字符是否等于字符q
                                exit()                                  #如果是,则退出整个程序
                            else:
                                print("\033[31;1m非法输入!\033[0m")     #在县级目录输入非数字内容,则提示输入非法内容
                    else:
                        print("\033[31;1m编号%s不存在!\033[0m" %(shi_id))  #否则以红色字体醒目提示用户编号不存在
                elif shi_id=='b':       #在市级目录输入b则返回到省级目录
                    break
                elif shi_id=='q':
                    exit()               #在市级目录输入则q则退出程序
                else:
                    print("\033[31;1m非法输入!\033[0m")     #在市级目录输入非数字内容,则提示输入非法内容
        else:
            print("\033[31;1m编号%s不存在!\033[0m" %(sheng_id))  #在省级目录输入>0,<=3之外的数据,则提示输入不存在
    elif sheng_id=='q':                  #在省级目录输入则q则退出程序,因为省级是第一个循环,所以break结束该循环就等同于退出程序
        break
    else:
        print("\033[31;1m非法输入!\033[0m")

 

posted @ 2017-09-23 23:45  大黑绳  阅读(235)  评论(0)    收藏  举报