python使用字典演示多级菜单效果

def multi_menu(dict_name, select_list):
    temp_dict = dict_name  # 先将顶层字典置为当前字典
    if select_list:  # select_list是将所有的选择项记忆到一个列表中
        for layer in select_list:
            temp_dict = temp_dict[layer]  # 如果列表不为空,那么层层进入,将选中的最底层字典置为当前字典
    if type(temp_dict) is dict:
        print('-------------------------')
        if temp_dict:
            for i in temp_dict:
                print(i)
        else:
            print('当前菜单为空')
        print('-------------------------')
    current_layer = input("退出【e】|返回上一层【b】|增加菜单项【a】|删除【d】\n选择请输入选项:").strip()
    if current_layer == "b":
        if select_list:
            select_list.pop()
            return multi_menu(dict_name, select_list)  # 递归,重新显示菜单,返回到了上一级
        else:
            return
    elif current_layer == "a":
        ipt = input("请输入要增加的项,尾部带>表示子菜单项,不带>表示菜单项:").strip()
        if ipt[-1] != '>':  # 判断尾部是否带>,如果不是,表示只增加菜单项,菜单项的值是空字符串
            temp_dict.setdefault(ipt, '')
        else:  # 判断尾部是否带>,如果是,表示增加子菜单项,新增的子菜单项,其值是空字典
            temp_dict.setdefault(ipt[:-1], {})
        return multi_menu(dict_name, select_list)  # 递归,重新显示菜单,新增加的菜单项/子菜单会被显示
    elif current_layer == "d":
        del_key = input("请输入要删除的项")
        if del_key in temp_dict.keys():
            temp_dict.pop(del_key)
        else:
            print('项名错误,无项目被删除')
        return multi_menu(dict_name, select_list)  # 递归,重新显示菜单,被删除的菜单项就没有了
    elif current_layer == "e":
        return print(f'你选择了:{select_list}')  # 退出时,输出选择列表
    else:
        if current_layer in temp_dict.keys():  # 如果输入的项目在当前字典中
            select_list.append(current_layer)
            if type(temp_dict[current_layer]) is dict:
                return multi_menu(dict_name, select_list)  # 如果选择的项仍然有值,则继续显示其子菜单
            else:
                print(f'你选择了:{select_list}')  # 否则表示选择的项无值,已经是底层,则输出所有的选择列表
        else:
            print(f'你输入的【{current_layer}】不在当前菜单中')
            return multi_menu(dict_name, select_list)  # 如果输入的项目不在当前字典中,则重新回显


if __name__ == "__main__":
    my_dict = {
        "北京大学": {
            "物理系": {
                "20210101班": {"张三": {}, "李四": {}, "王五": {}},
                "20210102班": {"赵六": {}, "田七": {}, "周八": {}}
            },
            "计算机系": {
                "20210201班": {"张三": {}, "李四": {}, "王五": {}},
                "20210202班": {"赵六": {}, "田七": {}, "周八": {}}
            }
        },
        "上海交通大学": {
            "土木系": {
                "20210101班": {"张三": {}, "李四": {}, "王五": {}},
                "20210102班": {"赵六": {}, "田七": {}, "周八": {}}
            },
            "铁道系": {
                "20210201班": {"张三": {}, "李四": {}, "王五": {}},
                "20210202班": {"赵六": {}, "田七": {}, "周八": {}}
            }
        }
    }
    multi_menu(my_dict, [])
    print(my_dict)

 

posted @ 2021-09-21 16:06  张永谊  阅读(212)  评论(0)    收藏  举报