young -> simple
  三级菜单超简单,每层都是小循环
  小可爱,不是if就是for,真可爱

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: # 退出判断
s
else:
print('输入错误,请重新输入,么么哒') if __name__ == '__main__':
message = {'湖南':
{'衡阳': {'珠珠': '大大学院'},
'湘潭': {'晖晖': '啦啦'}
},
'北京':
{'朝阳':
{'晖晖': '啦啦'}
}
}
menu(message)

  

plus -> 经历社会毒打
  想函数编程未实现,现在看不懂系列,try...except...?什么鬼?

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__':
message = {'湖南':
{'衡阳': {'珠珠': '大大学院'},
'湘潭': {'晖晖': '啦啦'}
},
'北京':
{'朝阳':
{'晖晖': '啦啦'}
}
} ec = 'q' # 返回上一级
ex = 'e' # 退出程序
menu_go(message)

  

  核心思路
    1. 创建三个状态变量,一个保存当前菜单状态,一个保存当前菜单路径,一个保存初始状态
    2. 进入菜单,检查输入的菜单是否存在,不存在则重新输入,再检查是否能进入下一层,不能进入菜单,状态不更新
    3. 进入菜单,存在和进入下一层检查通过,添加菜单到路径,进入下一层,更新当前菜单状态到下一层菜单状态
    4. 返回上一层,则从菜单路径删除尾部,从初始状态按路径查找,然后更新当前菜单状态

__author__ = 'beimenchuixue'
__blog__ = 'http://www.cnblogs.com/2bjiujiu/' class Menu(object):
"""三级菜单类 核心思路
1. 创建三个状态变量,一个保存当前菜单状态,一个保存当前菜单路径,一个保存初始状态
2. 进入菜单,检查输入的菜单是否存在,不存在则重新输入,再检查是否能进入下一层,不能进入菜单,状态不更新
3. 进入菜单,存在和进入下一层检查通过,添加菜单到路径,进入下一层,更新当前菜单状态到下一层菜单状态
4. 返回上一层,则从菜单路径删除尾部,从初始状态按路径查找,然后更新当前菜单状态
""" def __init__(self, msg):
# __current_menu 是个当前临时菜单状态, msg保存最初状态
self.__current_menu = self.msg = msg
# 菜单路径,因为菜单路径是唯一且互斥的
self.path = [] def user_input(self):
"""获取用户的输入"""
prompt = "{}请输入>>>:".format(len(self.path)+1)
menu = input(prompt).strip()
return menu def run(self):
"""主菜单"""
# 打印提示
self.prompt() while True:
# 打印当前菜单
menu_keys = self.__current_menu.keys()
self.output_prompt(menu_keys) # 获取用户输入
menu = self.user_input()
if not menu:
continue # 退出程序
if menu == "e":
self.exit_prompt()
break # 返回上一级
elif menu == "q":
# 如果到最顶级,后面就没必要执行力
if len(self.path) == 0:
self.top_prompt()
continue
else:
# 菜单往上一级
self.out_menu()
else:
# 进入菜单
self.into_menu(menu)
# 进入菜单
pass def _check_exit(self, menu):
"""检查菜单是否存在"""
keys = self.__current_menu.keys()
# 检查菜单是否存在
if menu in keys:
return True def _check_next(self, menu):
"""查看是否有下一菜单"""
res = self.__current_menu.get(menu, None)
if type(res) is dict:
return True def into_menu(self, menu):
"""获取路径,并修改路径"""
# 是否到最底层最底部了
is_exit, is_next = self._check_exit(menu), self._check_next(menu)
# 判断菜单是否不存在,不存在返回
if not is_exit:
self.not_exit_prompt()
return # 判断是否菜单到底部, 到底部打印提示返回
if not is_next:
self.bottom_prompt()
return # 把菜单添加到菜单路径
self.path.append(menu)
# 更改当前的菜单状态
self.__current_menu = self.__current_menu.get(menu) def out_menu(self):
"""回退菜单"""
# 回退一个路径
self.path.pop()
# 更新当前菜单
self.update_menu()
pass def update_menu(self):
"""更新当前菜单"""
# 如果有路径,通过路径更新当前菜单状态,没有路径说明到顶级菜单了
if self.path:
for item in self.path:
temp_menu = self.msg.get(item)
self.__current_menu = temp_menu
else:
self.__current_menu = self.msg def prompt(self):
"""打印菜单提示"""
menu_template = "按q返回上一层\n" + "按e退出\n"
print(menu_template, end="")
pass def output_prompt(self, menu_keys):
"""打印菜单"""
print("menu".center(30, "."))
for item in menu_keys:
print(item) def exit_prompt(self):
"""答应退出提示"""
print('退出中……ing')
print(''.center(30, "-"))
pass def top_prompt(self):
"""打印到顶层提示"""
print('已经最顶级菜单 ')
print(''.center(30, "-"))
pass def bottom_prompt(self):
"""打印到顶层提示"""
print('已经最底层级菜单 ')
print(''.center(30, "-"))
pass def not_exit_prompt(self):
"""选择不存在提示"""
print("选择不存在,重新输入")
print(''.center(30, "-"))
pass if __name__ == "__main__":
message = {'湖南':
{'衡阳': {'珠珠': '大大学院'},
'湘潭': {'晖晖': '啦啦'}
},
'北京':
{'朝阳':
{'晖晖': '啦啦'}
}
} menu = Menu(message)
menu.run()

  

pro -> 假装坚强 |^_^|
  核心思路 -> 利用备忘录设计模式实现三级菜单
    1. 创建两个变量,一个是保存各个层级菜单状态,一个是保存当前状态指向索引
    2. 进入菜单,检查输入的菜单是否存在,不存在则重新输入,再检查是否能进入下一层,不能进入菜单,状态不更新
    3. 进入菜单,存在和进入下一层检查通过, 状态索引自增1,当前状态加入备忘录
    4. 返回上一层,状态索引减一

__author__ = 'beimenchuixue'
__blog__ = 'http://www.cnblogs.com/2bjiujiu/' class Menu(object):
"""三级菜单类 核心思路 -> 利用备忘录模式实现三级菜单
1. 创建两个变量,一个是保存各个层级菜单状态,一个是保存当前状态指向索引
""" def __init__(self, msg):
# 初始索引状态
self.__index = 0 # 备忘录(memo)状态
self.__memo = {self.__index: msg} def user_input(self):
"""获取用户的输入"""
prompt = "{}请输入>>>:".format(len(self.path) + 1)
menu = input(prompt).strip()
return menu def run(self):
"""主菜单"""
# 打印提示
self.prompt() while True:
# 打印当前菜单
menu_keys = self.__current_menu.get(self.__index).keys()
self.output_prompt(menu_keys) # 获取用户输入
menu = self.user_input()
if not menu:
continue # 退出程序
if menu == "e":
self.exit_prompt()
break # 返回上一级
elif menu == "q":
# 如果到最顶级,后面就没必要执行力
if self.__index == 0:
self.top_prompt()
continue
else:
# 菜单往上一级
self.out_menu()
else:
# 进入菜单
self.into_menu(menu)
# 进入菜单
pass def __current_status(self):
return self.__memo.get(self.__index) def _check_exit(self, menu):
"""检查菜单是否存在"""
keys = self.__current_status().keys()
# 检查菜单是否存在
if menu in keys:
return True def _check_next(self, menu):
"""查看是否有下一菜单"""
res = self.__current_status().get(menu, None)
if type(res) is dict:
return True def into_menu(self, menu):
"""获取路径,并修改路径"""
# 是否到最底层最底部了
is_exit, is_next = self._check_exit(menu), self._check_next(menu)
# 判断菜单是否不存在,不存在返回
if not is_exit:
self.not_exit_prompt()
return # 判断是否菜单到底部, 到底部打印提示返回
if not is_next:
self.bottom_prompt()
return # 当前状态
current_status = self.__current_status()
# 把菜单添加到菜单路径
self.__index += 1
# 把当前状态加进备忘录
self.__memo[self.__index] = current_status def out_menu(self):
"""回退菜单"""
# 状态索引减一
self.__index -= 1 def prompt(self):
"""打印菜单提示"""
menu_template = "按q返回上一层\n" + "按e退出\n"
print(menu_template)
pass def output_prompt(self, menu_keys):
"""打印菜单"""
print("menu".center(30, "."))
for item in menu_keys:
print(item) def exit_prompt(self):
"""答应退出提示"""
print('退出中……ing')
print(''.center(30, "-"))
pass def top_prompt(self):
"""打印到顶层提示"""
print('已经最顶级菜单 ')
print(''.center(30, "-"))
pass def bottom_prompt(self):
"""打印到顶层提示"""
print('已经最底层级菜单 ')
print(''.center(30, "-"))
pass def not_exit_prompt(self):
"""选择不存在提示"""
print("选择不存在,重新输入")
print(''.center(30, "-"))
pass if __name__ == "__main__":
message = {'湖南':
{'衡阳': {'珠珠': '大大学院'},
'湘潭': {'晖晖': '啦啦'}
},
'北京':
{'朝阳':
{'晖晖': '啦啦'}
}
} menu = Menu(message)
menu.run()

 走向人生巅峰,迎娶那啥啥啥

三级菜单打怪升级,young -> plus -> pro的更多相关文章

  1. python打怪之路【第三篇】:利用Python实现三级菜单

    程序: 利用Python实现三级菜单 要求: 打印省.市.县三级菜单 可返回上一级 可随时退出程序 coding: menu = { '北京':{ '朝阳':{ '国贸':{ 'CICC':{}, ' ...

  2. python 购物车和三级菜单

    程序:购物车程序 需求: 启动程序后,让用户输入工资,然后打印商品列表 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 可随时退出,退出时,打印已购买商品和余额 ...

  3. python 实现三级菜单

    要求: 可选择进入各级子菜单 在各级菜单下可以选择退出 在子菜单下可以返回上一级菜单 Readme: 运行程序,输入菜单选项,进入对应的子菜单 # Joe Young data = { '山东':{ ...

  4. 三级菜单的实现(python程序)

    这是刚开始写程序,三级菜单的程序基本是用字典实现,很low,以后学习了其他更好的东西,我会继续上传,然后争取在我水平高深之后,把这个简单的东西实现的狠高大上. _author_ = "zha ...

  5. 手摸手,带你用vue实现后台管理权限系统及顶栏三级菜单显示

    手摸手,带你用vue实现后台管理权限系统及顶栏三级菜单显示 效果演示地址 项目demo展示 重要功能总结 权限功能的实现 权限路由思路: 根据用户登录的roles信息与路由中配置的roles信息进行比 ...

  6. 运维工程师打怪升级进阶之路 V2.0

    在此之前,发布过两个版本: 运维工程师打怪升级之路 V1.0 版本发布 运维工程师打怪升级必经之路 V1.0.1 很多读者伙伴们反应总结的很系统.很全面,无论是0基础初学者,还是有基础的入门者,或者是 ...

  7. python学习笔记(字符串操作、字典操作、三级菜单实例)

    字符串操作 name = "alex" print(name.capitalize()) #首字母大写 name = "my name is alex" pri ...

  8. css三级菜单效果

    一个简单实用的css三级菜单效果 <!doctype html> <html> <head> <meta charset="utf-8"& ...

  9. python成长之路-----day1-----作业(登录程序和三级菜单)

    作业: 作业1:用户登录 1)程序说明: a.用户输入密码验证成功然后打印欢迎信息 b.如果密码错误,用户登录失败,提示用户,密码错误 c.用户输入密码错误3次,则用户锁定 d.当用户多次输入不存在的 ...

随机推荐

  1. 设计模式C++模板(Template)模式

    设计模式C++描述----02.模板(Template)模式(转载) 一. 问题 在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现, ...

  2. 招新裁老,两面派互联网大厂,培训三个月,就拿15K,凭什么?

    看到一位朋友在发帖子求问:亲身经历,(如有谎言我名字倒过来写)一个大学同学18年毕业的.在兰州一个二本学的兽医农牧,毕业难找工作,去深圳一个机构培训了三个月吧,然后就去做大数据 算法了,然后又去做ja ...

  3. MySQL锁这块石头似乎没有我想的那么重

    前言 前言为本人写这篇文章的牢骚,建议跳过不看.   之前好几次都想好好的学习MySQL中的锁,但是找了几篇文章,看了一些锁的类型有那么多种,一时间也没看懂是什么意思,于是跟自己说先放松下自己,便从书 ...

  4. viewPager2的Bug

    在使用数据绑定时,viewpager2的 android:layout_width 必需 match_parent,不然要么显示不正常,要么直接崩溃.

  5. 敏捷转型谁先动:老总,项目经理or团队

    摘要: 敏捷转型成功的企业究竟是从老总开始?还是从项目经理开始?还是团队本身具有这种意识?相信还有很多想要转型敏捷的公司都存在这样的疑问. 从06年首届敏捷中国开发者大会召开到现在,敏捷方法在国内的应 ...

  6. Go测试开发(一) 怎么写Go代码

    安装过程略过,网上搜一大把. 介绍 本文会在一个module中开发一个简单的Go package. 同时介绍go tool(也就是go命令行). 以及如何fetch,build和install Go的 ...

  7. Zabbix value cache working in low memory mode

    Zabbix监控自身时告警"Zabbix value cache working in low memory mode",出现这个问题是因为Zabbix Server的参数Valu ...

  8. CentOS 7/8修改系统运行级别

    CentOS 7/8修改系统运行级别   CentOS 5. CentOS 6可以通过修改配置文件/etc/inittab 参数,从而修改系统运行级别,切换系统的runlevel,但是从CentOS ...

  9. WinForm使用Setuo Project打包安装包 (附带vs2019 InstallerProjects安装程序)

    vs2019 InstallerProjects安装程序地址: 链接:https://pan.baidu.com/s/1K5iDuQT4CBBw2dJjRLqhjg提取码:dfhy 转载至https: ...

  10. python应用 曲线拟合 02

    前情提要 CsI 闪烁体晶体+PD+前放输出信号满足: $U(t) = \frac{N_f\tau_p}{\tau_p-\tau_f} \left[ e^{-\frac{t}{\tau_p}}-e^{ ...