day21 04 三级菜单
day21 04 三级菜单
1.使用递归调用的方法 整体代码类型比较简单如下:
menu={'北京':{'海淀':{'a':{},'h':{},'c':{}},'昌平':{'沙河':{},'天通苑':{},'回龙观':{}},'朝阳':{},'东城':{}}
,'上海':{'闵行':{'d':{},'f':{},'g':{}},'阐北':{},'浦东':{}}
,'山东':{}}
l=[menu]
def threeLM(dic):
while True:
for key in dic:print(key)
key=input('input>>').strip()
if key=='b' or key=='q':return key
elif key in dic.keys() and dic[key]:
ret=threeLM(dic[key])
if ret=='q':return 'q'
threeLM(menu)
对每次用户输入与调用进行详细展开分析:
#第一次调用:dic=menu
def threeLM(dic):
while True:#进来就是死循环
for key in dic:print(key) #. 打印 北京 上海 山东
key=input('input>>').strip() #. 用户输入 北京 上海 山东 其中一个,假设输入北京
#.用户输入 打印 海淀 昌平 朝阳 东城 其中一个,假设输入昌平
if key=='b' or key=='q':return key
elif key in dic.keys() and dic[key]: #. 输入的key在字典里面,且字典不为空
ret=threeLM(dic[key]) #. 再次调用函数,把输入的字典传进去,比如输入北京则将 # 接收#17返回的q ret=q
# {'海淀':{'a':{},'b':{},'c':{}},'昌平':{'沙河':{},'天通苑':{},'回龙观':{}},'朝阳':{},'东城':{}}
# 这个字典传进去,再次循环
if ret=='q':return 'q' # return q 函数就结束了,所以用户输入q结果就是退出程序
threeLM(menu) #第二次调用:dic={'海淀':{'a':{},'b':{},'c':{}},'昌平':{'沙河':{},'天通苑':{},'回龙观':{}},'朝阳':{},'东城':{}}
def threeLM(dic):
while True:#进来就是死循环
for key in dic:print(key)
#5. 打印 海淀 昌平 朝阳 东城
#13 elif语句结束后 又开始循环,打印 海淀 昌平 朝阳 东城,所以#10的地方输入b结果就是返回上一级菜单
key=input('input>>').strip()
#6. 用户输入 打印 海淀 昌平 朝阳 东城 其中一个,假设输入昌平
if key=='b' or key=='q':return key
elif key in dic.keys() and dic[key]: #. 输入的key在字典里面,且字典不为空
ret=threeLM(dic[key])#. 再次调用函数,把输入的字典{'沙河':{},'天通苑':{},'回龙观':{}}传进去,再次循环
#12 接收#11返回的值,ret=b 不符合下面的if条件,所以elif语句结束了
#16 接收#15返回的值,ret=q 符合下面的if语句
if ret=='q':return 'q' #17 将q返回上个调用的地方,即#4的地方
threeLM(menu) #第三次调用:dic={'沙河':{},'天通苑':{},'回龙观':{}}
def threeLM(dic):
while True:#进来就是死循环
for key in dic:print(key)
#9. 打印 沙河 天通苑 回龙观
key=input('input>>').strip() #. 假设用户输入的是b #14 假设用户在这里输入q
if key=='b' or key=='q':return key #. return b 给前面调用的地方即‘#’的地方 #15 return q给前面调用的地方
elif key in dic.keys() and dic[key]:
ret=threeLM(dic[key])
if ret=='q':return 'q'
threeLM(menu)
运行结果:
C:\Users\sku1-\PycharmProjects\untitled\venv\Scripts\python.exe "C:/Users/sku1-1/PycharmProjects/untitled/day 21 04 三级菜单.py"
山东
北京
上海
input>>北京
昌平
海淀
东城
朝阳
input>>海淀
a
c
h
input>>b
昌平
海淀
东城
朝阳
input>>q Process finished with exit code
其中比较绕的地方就是当用户输入b和q的时候了:
用户输入b----返回上一级菜单:利用给调用的地方(上一级菜单)返回一个值b,然后结束语句,就在上一级继续循环
用户输入q----退出程序:通过一层一层的返回q值,知道退出程序
2.使用堆栈的方法
代码如下:
menu={'北京':{'海淀':{'a':{},'h':{},'c':{}},'昌平':{'沙河':{},'天通苑':{},'回龙观':{}},'朝阳':{},'东城':{}}
,'上海':{'闵行':{'d':{},'f':{},'g':{}},'阐北':{},'浦东':{}}
,'山东':{}}
l=[menu] #首先有一个栈
while True:
for key in l[-]:print(key)#l[-]是最后一个值,从最后一个开始打印,先进后出 l[-]=menu 打印北京 上海 山东
k=input('input>>').strip() #用户输入北京
if k in l[-].keys() and l[-][key]:#判断输入的在不再字典当中以及是不是为空,如果为真执行下面的代码
l.append(l[-][k]) #将北京的字典放入l中,此时l=[menu,{海淀。。。。}],再while True 循环,又取的最后一个
#如果知道这里已经可以进去了,但是出不去
elif k=='b':
l.pop() #把这一级菜单删除,直接就返回上级菜单
elif k=='q':break #用户输入q退出程序
else:continue
运行结果:
C:\Users\sku1-\PycharmProjects\untitled\venv\Scripts\python.exe C:/Users/sku1-/PycharmProjects/untitled/三级菜单.py
山东
北京
上海
input>>北京
东城
昌平
朝阳
海淀
input>>昌平
沙河
天通苑
回龙观
input>>b
东城
昌平
朝阳
海淀
input>>q Process finished with exit code
返回上一级菜单所作的操作:把原来所在的本级菜单直接删除,就剩下上一级菜单了
day21 04 三级菜单的更多相关文章
- Python 三级菜单 增强版
需要实现的功能是:三级菜单1.从文本内读出选项2.查询每一级的选项,并能对选项进行增/删/改功能3.每一级可以退出程序或者返回上一层 2018-5-14 更新内容 思路 实现过程中的BUG及解决方案: ...
- python学习笔记(字符串操作、字典操作、三级菜单实例)
字符串操作 name = "alex" print(name.capitalize()) #首字母大写 name = "my name is alex" pri ...
- css三级菜单效果
一个简单实用的css三级菜单效果 <!doctype html> <html> <head> <meta charset="utf-8"& ...
- python成长之路-----day1-----作业(登录程序和三级菜单)
作业: 作业1:用户登录 1)程序说明: a.用户输入密码验证成功然后打印欢迎信息 b.如果密码错误,用户登录失败,提示用户,密码错误 c.用户输入密码错误3次,则用户锁定 d.当用户多次输入不存在的 ...
- Python之路 day2 字典练习题之 三级菜单
#Author:ersa ''' 程序: 三级菜单 要求: 打印省.市.县三级菜单 可返回上一级 可随时退出程序 ''' menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{ ...
- python3 三级菜单
python版本3.5 功能: 1.程序执行显示一级菜单,输入内容进入二级菜单: 2.进入二级菜单后,输入二级菜单内容,进入三级菜单:输入b返回一级菜单: 3.进入三级菜单后,输入b返回二级菜单. # ...
- 用jQuery做一个三级菜单,鼠标移动到二级菜单的选项上,然后再迅速离开后,当鼠标再移动到该一级菜单或其他二级菜单选项,三级菜单也会显示。
用jQuery做一个三级菜单,鼠标移动到二级菜单的选项上,然后再迅速离开后,当鼠标再移动到该一级菜单或其他二级菜单选项,三级菜单也会显示. 原因:在为一个元素绑定hover事件之后,用户把光标移入元素 ...
- day1作业--三级菜单
作业概述: 写一个三级菜单 实现如下功能: (1)可依次选择进入各子菜单 (2)在每一级按“b”都可以返回上一级,按“q"都可以退出 流程图: readme: 简介: three_menu. ...
- python打怪之路【第三篇】:利用Python实现三级菜单
程序: 利用Python实现三级菜单 要求: 打印省.市.县三级菜单 可返回上一级 可随时退出程序 coding: menu = { '北京':{ '朝阳':{ '国贸':{ 'CICC':{}, ' ...
随机推荐
- SpringBoot入门-15(springboot配置freemarker使用YML)
https://blog.csdn.net/fengsi2009/article/details/78879924 application.yml spring: http: encoding: fo ...
- win7 右键菜单残影 消除方法
1. 治标法: 右键桌面->更改分辨率 随便换一个分辨率再还原就OK了! 2. 根治法: 我的电脑-> 属性 ->高级选项-> 高级-> 设置-> 自定义 不 ...
- [UOJ388]配对树
题解 贪心+线段树 首先如果我们知道了哪些点是关键点应该怎么搞 显然最小的匹配方案所有的边至多被经过一次 可以考虑每条边的贡献 因为我们要贡献尽量小 所以我们尽量让每条边经过的人尽量少 那么每条边被经 ...
- 光盘安装ubuntu出现busybox-initramfs不能继续安装的终极解决方法
我用的是Intel G45的主板,可能是板子太新的原因,kernel支持有问题 从光盘(官方寄来的光盘)安装ubuntu,出现提示: BusyBox V1.1.3 (Debian 1:1.1.3-5u ...
- 依赖注入(IOC) 详解
https://blog.csdn.net/qq_27093465/article/details/52547290 https://blog.csdn.net/qq_27093465/article ...
- 简洁大方的wordpress主题,不容错过的主题,附带主题源码下载
cu主题是由疯狂的大叔设计,界面简洁大方是它最大的特点之一. 手残君也比较喜爱这款主题,在使用的过程中,根据手残君的个人习惯,对其进行了优化. 标题优化 标题居中显示 增加标题div背景色 标题div ...
- Pycharm+Django+Python+MySQL开发 后台管理数据库
Django框架十分简单易用,适合搭建个人博客网站.网上有很多教程,大多是关于命令行操作Django,这里分享一些用最新工具进行Django开发过程,主要是PyCharm太强大,不用有点可惜. 第一次 ...
- 维控PLC与电流变送器modbus通讯获取电流变送器数据
2018-09-2319:28:01 今天本来要用单片机来做这个项目的,但是失败了.... 所以我又拿出了PLC来搞,也是相当之复杂,查了很多资料终于做出而来了. 今天还有事,赶紧临时备份总结一波
- Sqlmap脱库之“你的数据我所见”
废话不多说,介绍和理论啥的网上一搜一大把,一次只为tuoku. 实战操作: 1.在网上找个index.php?id=1的站点 2.很明显看到了脱下裤子的希望,sqlmap走一把.查看数据库 3.怎么看 ...
- Shiro 自定义登陆、授权、拦截器
Shiro 登陆.授权.拦截 按钮权限控制 一.目标 Maven+Spring+shiro 自定义登陆.授权 自定义拦截器 加载数据库资源构建拦截链 使用总结: 1.需要设计的数据库:用户.角色.权限 ...