源代码:

#!/usr/bin/python3

__author__ = 'beimenchuixue'
__blog__ = 'http://www.cnblogs.com/2bjiujiu/' def menu(message):
print('按q返回上一层')
print('按e退出')
ec = 'q' # 返回上一级
ex = 'e'
for i in message: # 打印一级菜单
print(i)
while True: # 进入一级菜单选择
choice1 = input('请输入1>>>:')
if choice1 in message: # 判断是否在字典中
for i1 in message[choice1]:
print(i1) # 打印值 while True:
choice2 = input('请输入2>>>:') # 进入二级菜单选择
if choice2 in message[choice1]:
for i2 in message[choice1][choice2]:
print(i2) while True:
choice3 = input('请输入3>>>:') # 进入三级菜单选择
if choice3 in message[choice1][choice2]:
for i3 in message[choice1][choice2][choice3]:
print(i3) elif choice3 == ec: # 返回判断
for i2 in message[choice1]:
print(i2) # 打印上一级菜单
break elif choice3 == ex: # 退出判断
exit('退出中……ing')
else:
print('输入错误,请重新输入,么么哒') elif choice2 == ec: # 返回判断,并打印上一级菜单
for i1 in message:
print(i1)
break
elif choice2 == ex: # 退出判断
exit('退出中……ing')
else:
print('输入错误,请重新输入,么么哒') elif choice1 == ec: # 返回判断
print('已经最顶级菜单,完全退出请输入 e ')
continue
elif choice1 == ex: # 退出判断
exit('退出中……ing')
else:
print('输入错误,请重新输入,么么哒') if __name__ == '__main__':
message = {'湖南':
{'衡阳':
{'珠晖区': '湖南工学院'},
'湘潭':
{'晖晖': '啦啦'}},
'北京':
{'朝阳':
{"德玛:北京大学"}}}
menu(message)
坑点:
1.纯分支与循坏,重复代码
2.多级字典的访问几级就需要几个[]中括号

用面向过程,函数方式做,返回上一级菜单未做,可做一个参考,有更好思路再更新
#!/usr/bin/python3

def menu_to(message):
'''打印菜单'''
try:
message.endswith('end')
except:
for i in message:
print(i)
else:
print(message.replace('end', '')) def get_message_key(message_info):
'''获得每层字典的单边值'''
try:
keys = []
for i in message_info:
message_info[i]
keys.append(i)
return keys
except:
return message_info + 'end' def menu_go(message_info):
'''进入主菜单'''
while True:
try:
judgment(message_info)
except Exception as e:
print(e) def judgment(message_info):
'''循环菜单'''
keys = get_message_key(message_info)
while True:
menu_to(keys) choice = input('请输入>>>:')
if choice == ec:
print('暂时未实现')
return judgment(message_info)
elif choice == ex:
exit('退出程序') if type(keys) == type('str') and keys.endswith('end'):
print('菜单到底了')
continue
else: if choice in keys:
message_info = message_info[choice]
return judgment(message_info)
else:
print('输入错误,请重新输入') if __name__ == '__main__':
info_message = {'湖南':
{'衡阳':
{'珠晖区': '湖南工学院'},
'湘潭':
{'晖晖': '啦啦'}},
'北京':
{'朝阳':
{"德玛": "北京大学"}}}
ec = 'q' # 返回上一级
ex = 'e' # 退出程序
menu_go(info_message)

  

 

python_多级菜单_纯循环与分支的更多相关文章

  1. python 多级菜单 纯循环与分支

    源代码: dic1 = {'湖南':{'衡阳':{'珠晖区':'湖南工学院'},'湘潭':{'晖晖':'啦啦'}}, '北京':{'朝阳': {"德玛:北京大学"}}}print( ...

  2. python基础_制作多级菜单_(运用:字典_列表_元组等知识)

    #!/usr/bin/env python # -*- coding:utf-8 -*- #Author: nulige db = {} path = {} while True: temp = db ...

  3. Python基础-小程序练习(跳出多层循环,购物车,多级菜单,用户登录)

    一. 从第3层循环直接跳出所有循环 break_flag = False count = 0 while break_flag == False: print("-第一层") wh ...

  4. MVC5+EF6 入门完整教程13 -- 动态生成多级菜单

    稍微有一定复杂性的系统,多级菜单都是一个必备组件. 本篇专题讲述如何生成动态多级菜单的通用做法. 我们不用任何第三方的组件,完全自己构建灵活通用的多级菜单. 需要达成的效果:容易复用,可以根据mode ...

  5. 2_python之路之多级菜单

    python之路之多级菜单 1.使用知识点 (1)列表,字典的使用 (2)if条件判断语句 (3)for/while循环的使用 2.代码详细 #!/usr/bin/env python # _*_ c ...

  6. 前端开发css实战:使用css制作网页中的多级菜单

    前端开发css实战:使用css制作网页中的多级菜单 在日常工作中,大家都会遇到一些显示隐藏类菜单,比如页头导航.二维码显示隐藏.文本提示等等......而这些效果都是可以使用纯css实现的(而且非常简 ...

  7. Python作业之多级菜单

    作业之多级菜单 菜单实现要求: 1. 列出菜单选择供选择 2. 选择对应内容进入下一级菜单 3. 任何时候都可以选择退出程序或返回上一级菜单 具体代码如下: goods = {'华为':{'A系':{ ...

  8. 原生JS封装创建多级菜单函数

    手写一个使用原生JS封装的多级菜单的函数,满足以下几点需求. 子类层级不确定,可根据数据自动生成多级菜单. 操作便捷,只需传入一个HTML标签. 缺点: 需要满足特定的数据结构 废话不多说,展示代码. ...

  9. day1作业二:多级菜单操作

    作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 思路: (1)首先定义好三级菜单字典: (2)提 ...

随机推荐

  1. shazidouhuiapp

    在选择了软件工程专业之后,指导教师也让我们参加到了学长学姐的作业之中来,使用学长学姐们的软件并写出自己的使用评价以及自己的一些小评价. 我这次体验的是第三组的学长学姐们的软件,他们的队名叫天公疼憨仔, ...

  2. element-ul二次封装table表格

    在项目中el的表格使用的地方太多了,若不进行封装,使用的时候页面会显得非常的冗余且难以维护,有时表格样式还不能做到一致:今天分享一个在工作中封装的表格 由于大多代码都在页面有介绍,就不在外面解释了 一 ...

  3. GET和POST的本质区别

    前言:相信小伙伴们面试时候一定都遇到过这个问题,即使没有遇到过,至少也听说过,网上资料一大片,大概每个人都能说出来一些.但是总感觉面试装逼不成功,所以就翻阅了部分资料,进一步整理了下. 一般当我们提到 ...

  4. 【Android】Android开发实现带有反弹效果,仿IOS反弹scrollview详解教程

    作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...

  5. Android Studio或者Eclipse中的最常用的快捷键,最简单的,部分不适用eclipse

    重写方法:ctrl+shift+s  然后选择Generate 构建即可: 执行程序:shift+F10 多行注释:ctrl+shift+/ 单行注释:ctrl+/ 快速打印log:logr 快速复制 ...

  6. 【C#】静态构造方法与静态变量

    扯下闲篇先,本来今天预计整理下委托.事件.Lamada的笔记,然后再把单例模式的懒汉.饿汉模式看完. 在看到懒汉的双重加锁设计时,向同桌贩卖了下该设计的优点,结果反被同桌的一个问题难倒了~! 一. 有 ...

  7. termux 进阶

    直接正题. 1.优化键位: mkdir $HOME/.termux echo "extra-keys = [['ESC','/','-','HOME','UP','END','PGUP'], ...

  8. vue init深度定制团队自己的Vue template

    大家都知道,使用vue-cli可以快速的初始化一个基于Vue.js的项目,全局安装脚手架之后,你可以通过vue list命令看到官方提供的5个模板 vue list 当开发一个独立项目的时候,使用官方 ...

  9. 解决Maven下载速度缓慢问题

    解决Maven下载速度缓慢问题 第一步:找到自己安装maven的路径,选择setting.xml D:\apache-maven-3.2.2\conf\settings.xml 第二步:打开setti ...

  10. 20190923-11Linux crond 系统定时任务 000 019

    crond 服务管理 1.重新启动crond服务 [root@hadoop101 ~]# service crond restart centOS7是 systemctl restart crond ...