用python的字典和for循环方式写的一个多级菜单显示


下面是简要的图形思路:

PYTHON 字典方式的多级菜单显示_python 多级菜单


下面是代码实现方式:


#!/usr/bin/env python

# -*- coding: utf-8 -*-

#__author__ = 'weibinf'

dict = {

    "黑龙江":{

        "哈尔滨":{

            "方正县":['天门乡','宝兴乡'],

            "宾县":['永和乡','民和乡'],

            "木兰县":["吉兴乡","建国乡"],

            },

        "大庆":{

            "肇州县":["福兴乡","浩德蒙古族乡"],

            "林甸县":['三合乡','黎明乡']

        },

    },

    "山西":{

        "太原":{

            "清徐县":['西谷乡',"集义乡"],

            "阳曲县":['凌井店乡','西凌井乡']

        },

        "朔州":{

            "应县":["南泉乡","下马峪乡"],

            "怀仁县":['亲和乡','新家园乡']

        },

    },

}

exit_flag = False

num = 0

while not exit_flag:

    for index,key in enumerate(dict.keys()):

        num +=1

        print "\033[32m-->\033[0m",index,key

    a_1 = num

    num = 0

    choice_1 = raw_input("\033[34mPlease your num: \033[0m").strip()

    if not choice_1.isdigit():

        if choice_1 == 'quit':

            exit_flag = True

            print "\033[31m<------>  going to quit  <----->\033[0m"

        else:

            print "\033[31m请输入正确的数字、、、\033[0m"

    else:

        choice_1 = int(choice_1)

        if choice_1 >= a_1:

            print "\033[31m对不起,请输入正确的对应数字、、、\033[0m"

        elif choice_1 < a_1:

            key_1 = dict.keys()[choice_1]

            num = 0

            while not exit_flag:

                for index,key in enumerate(dict[key_1]):

                    num +=1

                    print "\033[32m---->\033[0m",index,key

                a_2 = num

                num = 0

                choice_2 = raw_input("\033[34mPlease your num1: \033[0m").strip()

                if not choice_2.isdigit():

                    if choice_2 == 'back':

                        break

                    elif choice_2 == 'quit':

                        exit_flag = True

                        print "\033[31m<------>  going to quit  <----->\033[0m"

                        break

                else:

                    choice_2 = int(choice_2)

                    if choice_2 >= a_2:

                        print "\033[31m对不起,请输入正确的对应数字、、、\033[0m"

                    elif choice_2 < a_2:

                        key_2 = dict[key_1].keys()[choice_2]

                        while not exit_flag:

                            for index,key in enumerate(dict[key_1][key_2]):

                                num += 1

                                print "\033[32m------>\033[0m",index,key

                            a_3 = num

                            num = 0

                            choice_3 = raw_input("\033[34mPlease your num2: \033[0m").strip()

                            if not choice_3.isdigit():

                                if choice_3 == 'quit':

                                    exit_flag = True

                                    print "\033[31m<------>  going to quit  <----->\033[0m"

                                    break

                                if choice_3 == 'back':

                                    break

                            else:

                                choice_3 = int(choice_3)

                                if choice_3 >= a_3:

                                    print "\033[31m对不起,请输入正确的对应数字、、、\033[0m"

                                elif choice_3 < a_3:

                                    key_3 = dict[key_1][key_2].keys()[choice_3]

                                    while not exit_flag:

                                        for index,key in enumerate(dict[key_1][key_2][key_3]):

                                            print "\033[32m-------->\033[0m",index,key

                                        choice_4 = raw_input("\033[34mPlease your num3: \033[0m").strip()

                                        if choice_4.isdigit():

                                            print "\033[31m<<  已经是最后一层了、、、  >>\033[0m"

                                        elif choice_4 == 'quit':

                                            exit_flag = True

                                        elif choice_4 == 'back':

                                            break

                                    else:

                                        print "\033[31m<------>  going to quit  <----->\033[0m"