zoukankan      html  css  js  c++  java
  • 三级菜单(省市县)

    zone = {
    "北京":{
    "昌平":{"沙河":{},"朱辛庄":{},"巩华城":{}},
    "朝阳":{"十里堡":{},"大望路":{},"高碑店":{}},
    "通州":{"北苑":{},"果园":{},"九棵树":{}}
    },
    "河北":{
    "保定":{"徐水":{},"定州":{},"固城":{}},
    "石家庄":{"正定":{},"灵寿":{},"无极":{}},
    "张家口":{"张北":{},"宣化":{},"怀安":{}}
    },
    "山东":{
    "青岛":{"四方":{},"黄岛":{},"崂山":{}},
    "济南":{"历城":{},"槐荫":{},"章丘":{}},
    "烟台":{"龙口":{},"蓬莱":{},"招远":{}}
    }
    }

    }
    province = list(zone.keys())
    flag = True #1层标志
    flag_1=True #2层标志
    while flag:
        print("省---------------------")
        a=1
        for i in province:
            print(a,".",i)
            a += 1
        province_1=input("请输入省名,输入q退出!").strip()
        if province_1 in province:
            city = list(zone[province_1].keys())
            while flag_1:
                print("市-----------------------")
                a=1
                for i in city:
                    print(a,".",i)
                    a += 1
                province_2 = input("请输入市名,输入i返回上一级,输入q退出!").strip()
                if province_2 in city:
                    while   True:
                        if province_2 in city:
                            county = list(zone[province_1][province_2])
                            a=1
                            for i in county:
                                print(a,".",i)
                                a += 1
                            choice=input("返回上一级请输入i,退出请输入q!")
                            if choice == "i":
                                break
                            elif choice=="q":
                                flag_1 = False
                                flag=False
                                break
                            else:
                                print("请输入正确的指令!")
                elif province_2 == "i":
                    break
                elif province_2 == "q":
                    flag = False
                    break
                else:
                    print("请输入正确的指令!")
        elif province_1=="q":
            break
        else:
            print("请输入正确指令!")
    

    上面的代码是不是感觉有点繁琐,而且重复的代码有点多。下面我们简化下:

    now_dict = zone  #当前列表
    later_dict=[]    #上一层列表
    while True:
        for i in now_dict:
            print(i)
        choice=input(">>>>>")
        if choice in now_dict:  #如果输入的在当前列表里
            later_dict.append(now_dict)  #将当前列表存储进上一层列表中。
            now_dict=now_dict[choice]    #给当前列表重新赋值,下一层列表
        if choice=="i":                  #如果输入的是i,则放回上一层,
            now_dict=later_dict[-1]      #将存储上一层的列表最后一个元素给当前列表赋值。
            later_dict.pop()             #删除最后一个元素
        if choice=="q":                  #输入q,退出
            break 
    

    除了上述的两种方法外,还有递归函数的方法:

    def cont(county,dict1): #county存储输入选择的城市名,该城市下属的列表。
    a=123                   #输入的指令,开始随意赋值。
    while  True:
        if a == "i":break   #跳到上级
        elif a == "q":return a #直接退出
        for i in dict1:print(i) #打印列表
        a = input(">>>>>>:").strip()  #等待输入
        if a in dict1:   #如果输入正确列表里的元素,则递归调用。
            county = a;a=cont(county,dict1[a])
    cont(1,zone)
  • 相关阅读:
    lodash源码分析之自减的两种形式
    lodash源码分析之NaN不是NaN
    lodash源码分析之Hash缓存
    lodash源码分析之compact中的遍历
    navigate15安装教程
    jmeter线程组调度器使用
    jmeter 注册选择文件编码格式有问题
    jmete插件下载
    jmeter linux 无gui模式分布式压测
    pycharm原码编辑界面快捷键
  • 原文地址:https://www.cnblogs.com/G-YUE/p/6652984.html
Copyright © 2011-2022 走看看