多级菜单

# -*- coding: utf-8 -*-
__author__ = 'am_mm_NO.1'
import re
memu = {
    "东北":{
        "吉林省":{
            "吉林市":['吉林市1','吉林市2'],
            "长春":['长春1','长春2'],},
        "辽宁省":{
            "沈阳":['沈阳1','沈阳2','沈阳3'],
            "大连":['大连1','大连2'],
                },
            },
    '华北':{
        '河北省':{
            '廊坊':['廊坊1','廊坊2'],
            '保定':['保定1','保定2'],
                },
        '内蒙古':{
            '呼和浩特':['呼和浩特1','呼和浩特2','呼和浩特3'],
            '包头':['包头1','包头2']
                },
  
        },
    }
flag = True
while flag: # 全局变量,设置跳出整个循环
    for i,v in enumerate(memu.keys()): #遍历第一层字典
        print i,v #打印出第一层key,value
    num_1=raw_input("请输入一级菜单号,按q退出:").strip()  #接受键盘输入
    if num_1 == 'q':
        flag = False
        break
    if num_1.isdigit():
        num_1=int(num_1)
        if num_1<= len(memu):
            key_1 = memu.keys()[num_1]
            while flag:
                for i1,v1 in enumerate(memu[key_1]):
                    print i1,v1
                num_2 = raw_input("请输入二级菜单号,按q退出,b返回:").strip()
                if num_2 == 'q':
                    flag = False
                    break
                if num_2 == 'b':
                    break
                if num_2.isdigit():
                    num_2 = int(num_2)
                    if num_2 <= len(memu[key_1]):
                        key_2 = memu[key_1].keys()[num_2]
                        while flag:
                            for i2,v2 in enumerate(memu[key_1][key_2]):
                                print i2 ,v2
                            num_3 = raw_input("请输入三级菜单号,按q退出,b返回:").strip()
                            if num_3 == 'q':
                                flag = False
                                break
                            if num_3 == 'b':
                                break
                            if num_3.isdigit():
                                num_3 = int(num_3)
                                if num_3 <= len(memu[key_1][key_2]):
                                    key_3 = memu[key_1][key_2].keys()[num_3]
                                    while flag:
                                        for i3,v3 in enumerate(memu[key_1][key_2][key_3]):
                                            print i3,v3
                                        num_4 = raw_input("按q退出,b返回:").strip()
                                        if num_4 == 'q':
                                            flag = False
                                            break
                                        if num_4 == 'b':
                                            break


第二种方法

#!/usr/bin/python
# -*- coding: utf-8 -*-

__author__ = 'am_mm_NO.1'
import re
memu = {
    "东北":{
        "吉林省":{
            "吉林市":['吉林市1','吉林市2'],
            "长春":['长春1','长春2'],
                },
        "辽宁省":{
            "沈阳":['沈阳1','沈阳2','沈阳3'],
            "大连":['大连1','大连2'],
                },
            },
    '华北':{
        '河北省':{
            '廊坊':['廊坊1','廊坊2'],
            '保定':['保定1','保定2'],
                },
        '内蒙古':{
            '呼和浩特':['呼和浩特1','呼和浩特2','呼和浩特3'],
            '包头':['包头1','包头2']
                },
          },
    'shanghai':{
        'pudong':{
            'pudong1':['com1','com2'],
            'pudong2':['it1','it2'],
                },
        'xuhui':{
            'xuhui1':['xuhui11','xuhui12','xuhui33'],
            'xuhui2':['xuhui21','xunhui22']
                },
  
        }
    }
        
#for i in enumerate(memu.keys()):
#    print i
exit_flag = False
while not exit_flag:
    for index,key in enumerate(memu.keys()):
        print index,key
    choice_1 = raw_input("please choose menu_1 to enter:")  
    if choice_1.isdigit():
        choice_1 = int(choice_1)  
        key_1 =  memu.keys()[choice_1]
        while not exit_flag:
            for index,key in enumerate(memu[key_1]):
                print '--->', index,key
                #print "==========" 
            choice_2 = raw_input("please choose menu_2 to enter:")  
            if choice_2.isdigit():
                choice_2 = int(choice_2)
                key_2 = memu[key_1].keys()[choice_2]
            elif choice_2 == 'quit':
                print '到上一级目录'
                exit_flag = True 
                break
            elif choice_2 == 'back':
                break                   
                
                while not exit_flag:
                    for index,key in enumerate(memu[key_1][key_2]):
                        print '--->--->', index,key
                    choice_3 = raw_input("please choose menu_3 to enter:")    
                    if choice_3.isdigit():
                        choice_3 = int(choice_3)
                    elif choice_3 == 'quit':
                        print '到上一级目录'
                        exit_flag = True 
                        break
                    elif choice_3 == 'back':
                        break    
                                     
                        key_3 = memu[key_1][key_2].keys()[choice_3]
                        #print "this is the last level ..."
                        while not exit_flag :
                            for index,key in enumerate(memu[key_1][key_2][key_3]):
                                print '--->--->--->', index,key
                            choice_4 = raw_input("please choose menu_4 to enter:")    
                            if choice_4.isdigit():
                                print "this is the last level ..."
                            elif choice_4 == 'quit':
                                print '到上一级目录'
                                exit_flag = True 
                                break
                            elif choice_4 == 'back':
                                break
                        #else:
                         #   break    
else:
    print "=========="