小练习:三级菜单

2023-11-03

要求:

1.运行程序输出第一级菜单

2.选择一级菜单某项,输出二级菜单,同理输出三级菜单

3.输入出错重新选择

4.进入每一层支持返回上一级和退出

5.入最后一层提醒

menu = {
    '001': {
        '011': {
            '111': (1,1,1),
            '211': (2,2,2),
            '311': (3,3,3)
        },
        '021': {
            '121': (4,4,4),
            '211': (5,5,5),
            '311': (6,6,6)
        },
        '031': {
            '131': (7,7,7),
            '231': (8,8,8),
            '331': (9,9,9)
        }
    },
    '002': {
        '012': {
            '112': 'aaa',
            '212': 'bbb',
            '312': 'ccc'
        },
        '022': {
            '122': 'ddd',
            '222': 'eee',
            '322': 'fff'
        },
        '032': {
            '132': 'ggg',
            '232': 'hhh',
            '332': 'iii'
        }
    },
    '003': {
        '013': {
            '113': [1, 1, 1],
            '213': [2, 2, 2],
            '313': [3, 3, 3]
        },
        '023': {
            '123': [4, 4, 4],
            '223': [5, 5, 5],
            '323': [6, 6, 6]
        },
        '033': {
            '133': [7, 7, 7],
            '233': [8, 8, 8],
            '333': [9, 9, 9]
        }
    }
}

current_layer = menu  # 当前所在的菜单层级,类型为字典
layers = []  # 用于放置当前层级的父级,方便返回找回上一层级的key列表
while True:
    print('-------------------------------------------\n')
    print(f"Choice: {', '.join(current_layer.keys())}   【返回/b, 退出/q】")
    choice = input(">>> ").strip()  # 避免错误输入,去除输入字符串前后空格等
    if not choice:
        print("Error: 没有输入!!!")
        continue
    elif choice == 'q':
        exit()
    elif choice == 'b':
        if not layers:  # 规避第一层时,temp中没有存储的父节点
            print("Error: 已经是最外层,无法返回!!!")
            continue
        else:
            current_layer = layers.pop()  # 取出列表最后一个元素,作为父级
    elif choice in current_layer.keys():
        if not isinstance(current_layer[choice], dict):  # 第三层,因为是最后一层,继续往下没有字典结构嵌套,所以需要规避
            print(f"{choice} : {current_layer[choice]}")
            print('Note: 已经第三层了,无法进入下一层级了哦')
            continue
        layers.append(current_layer)
        current_layer = current_layer[choice]
    else:
        print(f"Error: 输入有误,请在列表中选择【返回/b, 退出/q, {' ,'.join(current_layer.keys())}】!!!")

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小练习:三级菜单 的相关文章

随机推荐

  • PCL 三维点云边界提取(C++详细过程版)

    边界提取 一 概述 二 代码实现 三 结果展示 本文由CSDN点云侠原创 爬虫自重 如果你不是在点云侠的博客中看到该文章 那么此处便是不要脸的爬虫 一 概述 点云边界提取在PCL里有现成的调用函数 具体算法原理和实现代码见 PCL 点云边界
  • r语言插补法_R语言缺失值的处理:线性回归模型插补

    在当我们缺少值时 系统会告诉我用 1代替 然后添加一个指示符 该变量等于 1 这样就可以不删除变量或观测值 我们在这里模拟数据 然后根据模型生成数据 未定义将转换为NA 一般建议是将缺失值替换为 1 然后拟合未定义的模型 默认情况下 R的策
  • Wireshark网络封包分析软件使用心得

    Wireshark网络封包分析软件使用心得 Wireshark 前称Ethereal 是一个网络封包分析软件 网络封包分析软件的功能是截取网络封包 并尽可能显示出最为详细的网络封包资料 Wireshark使用WinPCAP作为接口 直接与网
  • 资源池 'default' 没有足够的系统内存来运行此查询

    今天 有个客户突然打电话跟我说他的系统出了点问题 一个查询查了几十秒才出来 有时候还出不来 于是我上去看了一下 打开数据库看了相关视图 发现查询确实很慢 运行多次之后出现 资源池 default 没有足够的系统内存来运行此查询 嗯 这句话的
  • selenium抓取元素排除某个特定的class标签

    排除某个因素 第一优选想到正则表达式 无奈折腾半天没有成功 感觉是对元素的attrs按search在操作 对字符串末尾检测都没什么用 语法如下 text match By XPATH tr 5 td 11 div r 0 1 1 0 9 6
  • 【问题及解决】ImportError: libpython3.7m.so.1.0: cannot open shared object file: No such file or directory

    报错 是说少了一个libpython3 7m so 1 0的库 解决参考 https github com deepmind acme issues 47 解决办法 export LD LIBRARY PATH path to libpyt
  • 7 个建议让 Code Review 高效又高质

    简介 Code Review CR 的本质是什么 是为了查错 还是为了 KPI 本文分享阿里资深技术专家的看法 CR 是一种关于社会学的长期行为和组织文化 通过 CR 形成一种良性互动的技术氛围 传播和分享知识 提升代码质量 并给出了 7
  • 签约减碳计算模型背后:重新定义ESG

    如果将法大大比做电子签界的 支付宝 那么其减碳计算模型更像是 蚂蚁森林 向内输血 向外赋能 作者 斗斗 出品 产业家 纸张 打印 包装 运输 所有环节的碳排放因子被带入公式后 签约场景的碳排放清晰可见 至此 每一份合同的碳排放都有了清晰的度
  • L2-005 集合相似度 (25 分)

    题目 题目链接 题解 STL 一开始我用的map 由于使用其size函数 一直出错 我发现map的size函数很不稳定 我是定义的
  • 并行程序设计作业7/12

    这里用的是信号量 有需求可以改成其他的 首先要新开一个桶存起来 然后得到资源在写进结果数组 如果不这样多核会比单核还慢 因为写操作并没有优化 然后我这里用了map 如果桶编号大 每个核心结果离散度比较大时 用数组会慢很多 map在离散度大的
  • 快速排序(一)

    快速排序是冒泡排序 选择排序 插入排序 奇偶排序 归并排序 希尔排序中最快的排序 所以我们当然有必要去深入了解快速排序 我们首先来了解一下划分算法 何谓划分算法 其实就是以一个数为基准 枢纽 这个比枢纽大的数 把我们它放在数组的右边 这个比
  • Jscript 访问 Json文件

    通过 XMLHttpRequest 访问 Json 文件 我们存在文件结构 我想通过Js来访问Test json的文本 Json文本为 我们需要 1 创建一个 XMLHttpRequest 对象 var request new XMLHtt
  • 手机端页面自适应解决方案—rem布局

    相信很多刚开始写移动端页面的同学都要面对页面自适应的问题 当然解决方案很多 比如 百分比布局 弹性布局flex 什么是flex 也都能获得不错的效果 这里主要介绍的是本人在实践中用的最顺手最简单的布局方案 rem 什么是rem 布局 fun
  • 将yml文件导入conda,并连接到jupyter和pyCharm

    在GitHub上找了一篇文献 想复现一下 记录一下其中遇到的环境配置问题 我也不是很懂相关的操作 只是用来记录 如果我的操作有什么不必要或错误的地方 辛苦大家耐心指正 1 把yml文件安装到conda安装路径下的envs文件夹下 把cmd转
  • 加密算法(一)

    加密算法 参考 https blog csdn net qq 31878855 article details 69396791 加密算法分类 常见的加密算法可以分成两类 对称加密算法和非对称加密算法 对称加密算法 加密和解密用的是同一串密
  • 反卷积(Transposed Convolution, Fractionally Strided Convolution or Deconvolution)

    反卷积 Deconvolution 的概念第一次出现是Zeiler在2010年发表的论文 Deconvolutional networks 中 但是并没有指定反卷积这个名字 反卷积这个术语正式的使用是在其之后的工作中 Adaptive de
  • 记工作日常 - mysql 使用json格式 被dba拒绝执行

    首先 mysql版本在5 7以下是不支持json格式存储的 若使用json格式存储数据 在使用生成实体类的工具得到的文件字段类型为 object 场景 今天准备项目上线 在archery sql审核查询平台提交sql并进行审查 审查结果为
  • 微信小程序中的网络请求

    微信小程序中的网络请求 为了安全 微信小程序只能请求http类型接口 请求其他接口时必须将接口的域名添加到新人列表中 配置request合法域名 登录微信小程序管理后台添加链接描述 gt 开发 gt 开发设置 gt 服务器域名 gt 修改
  • Linux yum 命令介绍

    原文地址 http blog csdn net tianlesoftware article details 5092720 参考地址 http blog csdn net tianlesoftware article details 53
  • 小练习:三级菜单

    要求 1 运行程序输出第一级菜单 2 选择一级菜单某项 输出二级菜单 同理输出三级菜单 3 输入出错重新选择 4 进入每一层支持返回上一级和退出 5 入最后一层提醒 menu 001 011 111 1 1 1 211 2 2 2 311