三级登陆 @1 省市县乡四级 @2 可以返回上一级 @3可以立即退出

 1 #!coding: utf-8
 2 menu={
 3   '河北':{
 4            '邯郸':{
 5                     '涉县':{
 6                              '偏店':{},
 7                              '井店':{}
 8                            },
 9                     '武安':{
10                              '武安某镇1':{},
11                              '武安某镇2':{}
12                            }
13                    },
14            '石家庄':{
15                     '庄县1':{
16                               '庄县1某镇1':{},
17                               '庄县1某镇2':{}
18                             },
19                     '庄县2':{
20                               '庄县2某镇1':{},
21                               '庄县2某镇2':{}
22                             }
23                     }
24         }
25                                         ,
26   '北京':{
27            '西城区':{
28                    '菜市口':{
29                             '真功夫':{},
30                             '新网':{}
31                             },
32                    '宣武门':{
33                             '移动网':{},
34                             '地铁站':{}
35                             }
36                    },
37            '海淀区':{}
38 
39   '北京':{
40            '西城区':{
41                    '菜市口':{
42                             '真功夫':{},
43                             '新网':{}
44                             },
45                    '宣武门':{
46                             '移动网':{},
47                             '地铁站':{}
48                             }
49                    },
50            '海淀区':{}
51 
52      },
53   '山西':{}
54 }
55 current_layer = menu     #动态变量
56 parrent_layers= []      
57 while True:
58   for key in current_layer:
59     print key                  #1----将整个大的列表中键打印出,河北,北京和山西;2----打印出邯郸  石家庄  3----打印出涉县,武安 4----打印出,偏店,井店
60   choice = raw_input(">>>:").strip()   1----例如选择河北,choice=河北     2------邯郸     3------涉县  4------偏店
61   if choice in current_layer:
62     parrent_layers.append(current_layer) #1----parrent_layers现在是原来大的列表;  2---加上邯郸,石家庄    3---加上涉县  武安 4-----加上偏店,井店  -------关键处,一级一级返回;
63     current_layer = current_layer[choice] #1---这步current_layer将成为邯郸,石家庄;2---成为涉县,武安;   3----成为偏店,井店  4----无内容啦
64   elif choice == 'b':  #定义的返回上一级;
65     if parrent_layers:
66       current_layer = parrent_layers.pop()  #pop的用法很好,从末尾到首,一次pop掉;
67   elif choice == 'q':
68     break
69   else:
70     print "无此项"
原文地址:https://www.cnblogs.com/lixinliang/p/8284649.html