python实现三级菜单

一、要求: 1、一开始打印出所有省份和提示 

      2、用户输入省份以此查询城市

      3、在按照输出的城市名提示用户输入,最后输出用户所查询的区县名

      4、随时输入“back”可以返回上一级菜单

      5、输入“Q”可以结束整个程序

      6、若输入的内容无效则重新输入

二、流程图:

三、步骤:

1、先将所需的数据存储。(利用字典和列表的嵌套)

2、获取到所有的省份名

3、获取到所有的城市名

4、判断用户输入是否有效,并执行相应功能

四、代码如下

import os
region = {
     '山东' : {
         '青岛' : ['四方','黄岛','崂山','李沧','城阳'],
         '济南' : ['历城','槐荫','高新','长青','章丘'],
         '烟台' : ['龙口','莱山','牟平','蓬莱','招远']
     },
     '江苏' : {
        '苏州' : ['沧浪','相城','平江','吴中','昆山'],
         '南京' : ['白下','秦淮','浦口','栖霞','江宁'],
         '无锡' : ['崇安','南长','北塘','锡山','江阴']
    },
     '浙江' : {
         '杭州' : ['西湖','江干','下城','上城','滨江'],
         '宁波' : ['海曙','江东','江北','镇海','余姚'],
         '温州' : ['鹿城','龙湾','乐清','瑞安','永嘉']
     },
     '安徽' : {
         '合肥' : ['蜀山','庐阳','包河','经开','新站'],
         '芜湖' : ['镜湖','鸠江','无为','三山','南陵'],
         '蚌埠' : ['蚌山','龙子湖','淮上','怀远','固镇']
     },
     '广东' : {
         '深圳' : ['罗湖','福田','南山','宝安','布吉'],
         '广州' : ['天河','珠海','越秀','白云','黄埔'],
         '东莞' : ['莞城','长安','虎门','万江','大朗']
     }
}
print("'back'--返回上一级    'Q'--结束程序")

#获取省份列表
province_list = list(region.keys())
print(province_list)

#获取城市列表
city_list = []
for i in range(province_list.__len__()):
    tem = list(region[province_list[i]].keys())
    city_list.append(tem)
while 1:
    #省份查询
    cinprovince = input("请输入所要查询的省名: ")
    if cinprovince in province_list:
        city_index = province_list.index(cinprovince)
        print('''%s : %s'''%(cinprovince,city_list[city_index]))
        #城市查询
        while 1:
            cincity = input("请输入所要查询的城市名: ")
            if cincity in city_list[city_index]:
                print('''%s : %s'''%(cincity,region[cinprovince][cincity]))
                sign = input("请输入命令:  ")
                if sign == "Q":
                    os._exit(0)
                elif sign == 'back':
                    print('''%s : %s'''%(cinprovince,city_list[city_index]))
                    break
            elif cincity == 'Q':
                os._exit(0)
            elif cincity == 'back':
                break

    elif cinprovince == 'Q':
        os._exit(0)
    else:
        print(province_list)
        continue

 五、心得:

1、os._exit()可以结束整个程序的执行,exit()也可以结束程序的执行,不过如果放在if或者for中,则只结束当前域内的程序,类似于break的功能

2、list(列表名.keys())与列表名.keys()的区别在于:前者打印出来之后没有dict.keys声明

3、listname.index(n)可以返回n所在listname中的下标

原文地址:https://www.cnblogs.com/cencenyue/p/7270636.html