# -*- coding: utf-8 -*-
#-*- 2017/07/13 -*-
#-*- Create by ChaiMeng
#多级菜单

import sys

multi_city = {'安徽省':{'合肥市':{'蜀山区':'安徽农业大学'}},'湖北省':{'武汉市':{'东湖区':'武汉大学'}},'河南省':{'开封市':{"龙亭区:河南大学"}}}  #添加多级字典(字典的嵌套),以省、市、区、学校为例
print("按q返回上一层")  #打印提示信息
print("按e退出")  #打印提示信息

# print(multi_city['安徽省']['合肥市'])
# for i in multi_city['安徽省']['合肥市']:
#     print (i)    #以上三行为调试信息,主要确认多级字典(字典的嵌套)的输出

ec = 'q'   #预定义变量
ex = 'e'   #预定义变量
first_class_flag = True   #定义一级菜单的标志位,后续可以通过该标记为退出多级循环,本例为在一级循环中体现,在二级、三级循环中体现了



while first_class_flag:   #定义一级循环
    for first_class in multi_city.keys():   #打印多级字典中省级目录
        print(first_class)
    first_class_input = input("请输入省份1>>>: ")   #提示用户输入省份
    if first_class_input in multi_city.keys():   #判断用户输入的省份是否在改字典的key中
        for first_class_province in multi_city[first_class_input].keys():  #如果用户输入的数据在字典的省份中,则打印市区名称
            print (first_class_province)
            second_class_flag = True  #定义二级菜单的标志位,后续可以通过改变标志位的布尔值,来退出二级循环
        while second_class_flag:  #进入二级循环
            second_class_input = input("请输入市名2>>>: ")  #提示输入市名称
            if second_class_input in multi_city[first_class_input].keys():  #判断用户输入的市名是否在改字典的key中
                for second_class_city in multi_city[first_class_input][second_class_input].keys():  #如果用户输入的数据在字典的市名中,则打印区名称
                    print(second_class_city)
                    third_class_flag = True  #定义三级菜单的标志位,后续可以通过改变标志位的布尔值,来退出三级循环
                while third_class_flag: #进入三级循环
                    third_class_input = input("请输入区名3>>>: ")  #提示用户输入区名
                    if third_class_input in multi_city[first_class_input][second_class_input].keys():  #判断用户输入的区名是否在改字典的key中
                        third_class_zone = multi_city[first_class_input][second_class_input][third_class_input]  #如果用户输入的数据在字典的区名中,则打印学校名称
                        print(third_class_zone)
                    elif third_class_input == ec: #如果用户输入的是q,返回到二级菜单
                        print('正在返回上一级菜单...... ')
                        third_class_flag = False  #通过改变三级菜单的标志位,来退出三级循环
                    elif third_class_input == ex:  #如果用户输入的是e,就退出整个程序
                        sys.exit('退出中……ing')
                    else:  #其他情况提示输入错误,请重新输入
                        print("输入错误,请重新输入: ")
            elif second_class_input == ec:   #如果用户输入的是q,返回到一级菜单
                print('正在返回上一级菜单...... ')
                second_class_flag = False  #通过改变三级菜单的标志位,来退出二级循环
            elif second_class_input == ex:  #如果用户输入的是e,就退出整个程序
                sys.exit('退出中……ing')
            else:   #其他情况提示输入错误,请重新输入
                print("输入错误,请重新输入: ")
    elif first_class_input == ec:  #因为本级菜单是顶级菜单,如果用户输入的是q,可以使用continue,持续在一级循环(顶层菜单)
        print('已经最顶级菜单,完全退出请输入 e ')
        continue
    elif first_class_input == ex:  #如果用户输入的是e,就退出整个程序
        sys.exit('退出中……ing')
    else:   #其他情况提示输入错误,请重新输入
        print("输入错误,请重新输入: ")