【作业】三级目录

实现需求:

老师代码:

l_city ={
    '北京1':
          {'昌平1':
              {'沙河1':['老男孩','阿泰包子'],
               '天通苑1':['臭豆腐','烤肉串']
               },

          '朝阳1':
              {'朝阳门1':['吉事果','老酸奶'],
               '红领巾桥1':['麻辣烫','旋风土豆']
               },
          '海淀1':

              {'颐和园1':['景区','还是景区'],
               '玉泉山1':['大树','还是大树']
              }

          }
    ,
    '北京2':
         {'昌平2':
              {'沙河2': ['老男孩', '阿泰包子'],
               '天通苑2': ['臭豆腐', '烤肉串']
               },

          '朝阳2':
              {'朝阳门2': ['吉事果', '老酸奶'],
               '红领巾桥2': ['麻辣烫', '旋风土豆']
               },
          '海淀2':

              {'颐和园2': ['景区', '还是景区'],
               '玉泉山2': ['大树', '还是大树']
               }

         }
    ,
    '北京3':
         {'昌平3':
              {'沙河3': ['老男孩', '阿泰包子'],
               '天通苑3': ['臭豆腐', '烤肉串']
               },

          '朝阳3':
              {'朝阳门3': ['吉事果', '老酸奶'],
               '红领巾桥3': ['麻辣烫', '旋风土豆']
               },
          '海淀3':
              {'颐和园3': ['景区', '还是景区'],
               '玉泉山3': ['大树', '还是大树']
               }

         }

}

以上是字典部分
下面才是代码部分

ways = []

def new_dic(zidian):
    # print(y[0].keys())                                            #用于调试
    print('you can chose:',zidian.keys())
    key = input(">>:").strip()

    try:                                                            #错误输入就退出
        if key in zidian:                                           #如果传入的key值符合规范
            sub_zidian = zidian.get(key)                            #取得key所包含的字典,并赋值给新的字典
            if type(sub_zidian) is dict:
                ways.append(zidian)                                 # 保存初始路径
                return new_dic(sub_zidian)                          #返回字典函数进行下一轮
            else:
                print(sub_zidian)
                print('已经到底了,后面选项无法选择')                    #字典底层元素为列表,无法继续选择,退出

        elif key == 'b':                                            #如果传入的值是b,返回上层
            # print (len(y),y[-1].keys()keys,y[-2].keys())          #用于调试
            if len(ways)>1:
                print('====>')
                x=ways.pop()

                return new_dic(x)                                   #y路径库判断,根据路径库当中路径数量,判断是否到顶层
                                                                    #如果没有到顶层,并且y中有两个或以上元素,
                                                                    # 将x赋值为倒数第二个路径(前一级列表),删除最后一个路径,返回
            elif len(ways)==1:                                      #如果到顶层,提供退出提示
                print('顶层目录,按“q”退出')
                return new_dic(ways[0])
        elif key == 'q':exit()
        else:
            print('wrong input!')
            return new_dic(zidian)

    except AttributeError:
        print('ending')



new_dic(l_city)

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

原文地址:https://www.cnblogs.com/scott-lv/p/7468922.html