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. Blazor带我重玩前端(五)

    概述 本文主要讨论Blazor事件内容,由于blazor事件部分很多,所以会分成上下两篇,本文为第一篇,后续会有第二篇. 我们可以视组件是一个类,我们先看一下前文所说的Index.Razor页面生成的 ...

  2. 剑指 Offer 47. 礼物的最大价值

    题目描述 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0).你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格.直到到达棋盘的右下角.给定一个棋盘及 ...

  3. JS数组去重的实现

    其实数组去重的实现就分为两大类 利用语法自身键不可重复性 利用循环(递归)和数组方法使用不同的api来处理. 注意️:下列封装成方法的要在函数开始增加类型检测,为了让去重的实现代码更加简单易懂,封装时 ...

  4. 自编Basic脚本 用BasicIntepreter执行 打印九九乘法表

    源码下载:https://files.cnblogs.com/files/heyang78/BasicInterpreter2-20200601-2.rar 用编程语言打印九九乘法表不难,用自编解释器 ...

  5. Mockito在JUnit测试中的使用

    Mockito是一种用于替代在测试中难以实现的成员,从而让testcase能顺利覆盖到目标代码的手段.下面例子将展示Mockito的使用. 完整代码下载:https://files.cnblogs.c ...

  6. H5游戏定制,4大优势助力企业曝光10W+

    H5游戏定制,4大优势助力企业曝光10W+ 移动互联网已成为了人们生活的一部分,普通广告形式已很难吸引用户的眼球,企业要怎样才能将广告更广泛的传播给更多用户呢?根据TOM游戏多年从业经验,为大家分享以 ...

  7. Java字符串的常用方法

    [转换] //int 10进制----> 转16进制Integer.toHexString(10) // int 10进制----> 转8进制Integer.toOctalString(1 ...

  8. Spring Boot入门,源码解析

    目录 1.Spring Boot简介 2.微服务 3.Spring Boot HelloWorld 3.1 创建一个Maven工程 3.2 导入依赖Spring Boot相关的依赖 3.3 编写一个主 ...

  9. CentOS7 中常用命令

    1.开放端口 开放50070端口 firewall-cmd --zone=public --add-port=50070/tcp --permanent 关闭50070端口 firewall-cmd ...

  10. 5分钟掌握企业LVM磁盘划分

    逻辑卷管理LVM是一个多才多艺的硬盘系统工具.无论在Linux或者其他类似的系统,都是非常的好用.传统分区使用固定大小分区,重新调整大小十分麻烦.但是,LVM可以创建和管理“逻辑”卷,而不是直接使用物 ...