第一周作业-三级菜单

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

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

3. 菜单数据保存在文件中

4. 让用户选择是否要退出

5. 有返回上一级菜单的功能

#coding:utf-8
#Author:Mr Zhi
file_o = open("menu",'r',encoding="utf-8") #打开三级菜单文件
menu= eval(file_o.read())  #把打开后的文件内容转换成字典(文件内容原本是字典)
def out():     #频繁使用的代码定义个函数
    file_o.close()  #关闭打开的文件
    exit()  #退出程序
for i in menu: #遍历菜单menu字典
    print(i)  #输出字典菜单
       continue
while True:   #开始while循环
    choice = input("输入地区(按q退出,b返回上层):") #输入地区
    if choice == "q": #判断输入chice值是否为q
        out()   #执行函数
    if choice == "b": #判断输入chice值是否为b
        print("已是第一层") 
    if choice not in menu or len(choice) == 0 and choice != "b": #判断输入choice值在菜单文件中或输入choice不等于b
        print("你输入有误,请重新输入")
    if choice in menu:  #p判断输入choice是否在menu中
        for i in menu[choice]: #遍历menu[choice]
            print(i)
        choice2 = input("输入省区(按q退出,b返回上层):")  #输入结果
        if choice2 not in menu[choice] and choice2 != "b":#判断输入choice2 不在字典中和不等于b
            print("你输入有误,请重新输入")
        if choice2 in menu[choice]: #判断
            for i2 in menu[choice][choice2]:  #遍历字典
                print(i2)
            print("最后一层菜单,下面没有了")
        if choice2 == "q": #判断
            out()
        if choice2 == "b":#判断
            continue #继续循环
#三级菜单优化版
#coding:utf-8
#Author:Mr Zhi
menu_f = open("menu",'r',encoding="utf-8")
menu = eval(menu_f.read())
l = []
while True:
    for key in menu:  #遍历字典
        print(key)     #打印出键值,也就是父字典
    choice = input("input your choice:").strip()  #
    if choice == "q": #判断退出
        menu = l[-1]  #赋值menu菜单等于列表的最后一个列表元素,把一个字典加到列表中
        l.pop()  #清空列表
    if len(choice) == 0 or choice not in menu: continue #判断不输入或者输入不在字典中时继续运行程序
    l.append(menu)  #把字典加到列表
    menu = menu[choice]  #重新复制选择的字典名称

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏C语言及其他语言

【编程经验】getchar、getch、getche三者的区别

getchar、getch、getche三者的区别 今天给大家区分一下这三个单字符接受函数的区别。 getchar函数 是C语言标准...

377140
来自专栏大前端_Web

详解ES7的async及webpack配置async

版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/articl...

58620
来自专栏Linux驱动

编译make的出错提示解决方案

编译出错笔记: start.s:20: Error: no such instruction: `ldr r0,=WTCON' 错误:没有这样的指令 解决...

199100
来自专栏北京马哥教育

15分钟学会shell脚本,最简明的教程在这里

本文由马哥教育M23期学员推荐,转载自互联网,作者为Hnongy,感谢作者的辛苦付出和贡献。 Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的...

32170
来自专栏运维小白

linux基础(day26)

9.1正则介绍_grep(上) 正则介绍 正则就是一串有规律的字符串 掌握好正则对编写shell脚本帮助交大 各种编程语言中都有正则,原理是一样的 grep/e...

256100
来自专栏Jerry的SAP技术分享

一个具体的例子学习Java volatile关键字

相信大多数Java程序员都学习过volatile这个关键字的用法。百度百科上对volatile的定义:

12730
来自专栏IMWeb前端团队

Zepto源码分析之ie模块

本文作者:IMWeb 谦龙 原文出处:IMWeb社区 未经同意,禁止转载 前言 ? Zepto中的ie模块主要是改写getComputedStyle...

20180
来自专栏黑白安全

C++如何调用class类中方法实现多线程编程

众所周知在使用C++创建多线程执行时只能传递一个方法到thread模块中去创建线程执行。但是有时候我们往往需要使用多线程去执行某个对象中的方法,而对象中的方法却...

13020
来自专栏Echo is learning

字符、字符集、编码,以及它们python中会遇到的一些问题(下)

16350
来自专栏http://www.cnblogs.com

shelve模块

shelve是一个简单的数据存储方案,类似key-value数据库,可以很方便的保存python对象,其内部是通过pickle协议来实现数据序列化。shelve...

376170

扫码关注云+社区

领取腾讯云代金券