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)
  • 相关阅读:
    Java实现各种内部排序算法
    Java实现堆排序(大根堆)
    Java对象的序列化和反序列化
    Java实现链式存储的二叉查找树(递归方法)
    337. House Robber III(包含I和II)
    318. Maximum Product of Word Lengths
    114. Flatten Binary Tree to Linked List
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    96. Unique Binary Search Trees(I 和 II)
  • 原文地址:https://www.cnblogs.com/G-YUE/p/6652984.html
Copyright © 2011-2022 走看看