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':{}, ' ...
随机推荐
- echarts 实例demo 详细讲解
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> & ...
- Luogu P1083 借教室【二分答案/差分】By cellur925
题目描述 Description 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海 ...
- 【SpringCloud构建微服务系列】学习断路器Hystrix
一.Hystrix简介 在微服务架构中经常包括多个服务层,比如A为B提供服务,B为C和D提供服务,如果A出故障了就会导致B也不可用,最终导致C和D也不可用,这就形成了雪崩效应. 所以为了应对这种情况, ...
- 图的遍历---------开始开始-------o(∩_∩)o 哈哈
图的遍历 深度优先搜索(Depth First Search , DFS) --深度优先搜索--我的理解就是分身术的另一种实现方法---用分身术将所有能看到的路都走一遍----这就是深度搜索--- 下 ...
- java String类为什么是final的
1.为了安全 java 必须借助操作系统本身的力量才能做事,jdk提供的很多核心类比如String,这类内的很多方法 都不是java编程语言本身编写的,很多方法都是调用操作系统本地的api,如果被继承 ...
- Oracle报错:"ORA-18008: 无法找到 OUTLN 方案 "的解决方案
Oracle报错:"ORA-18008: 无法找到 OUTLN 方案 "的解决方案 今天连接到Oracle报错:ORA-18008: 无法找到 OUTLN 方案,前天还用得 ...
- AJPFX学习Java函数知识总结
函 数:为了提高代码的复用性,可以将其定义成一个单独的功能,该功能的体现就是java中的函数.函数就是体现之一. java中的函数的定义格式: 修饰符 返回值类型 函数名(参数类型 形 ...
- POI导出时,将指定的列设置为下拉列表
本示例设置第2列为下拉框(下拉框内容为:是/否),从第5行开始到5657行结束. 关键代码示例: ComboxList = new String[]{"是","否&quo ...
- lua centos 安装报错
yum install libtermcap-devel ncurses-devel libevent-devel readline-devel
- rest_framework基于generics.CreateAPIView创建用户
最近在写新版的devops3.0,被generics.CreateAPIView创建用户密码序列化的问题折磨的欲仙欲死.反复看源码测试,得出下面的流程,这也是做generics.CreateAPIVi ...