python3 实现一个多级菜单小功能
记录下一下
#!/usr/bin/env python3
'''
需求:三级菜单
三级菜单,依次进入子菜单
'''
City = {
'北京':{
'大兴区':[
'亦庄','黄村','中信新城','B返回','Q退出'
],
'丰台区':[
'岳各庄','五棵松','丰台路口','B返回','Q退出'
],
'朝阳区':[
'劲松','双井','国贸','B返回','Q退出'
],
'B返回':'返回',
'Q退出':'退出'
},
'上海':{
'浦东区':[
'世纪大道','陆家嘴','盛世年华','B返回','Q退出'
],
'普陀区':[
'东方汽配城','金沙社区','东锦国际大厦','B返回','Q退出'
],
'徐汇区':[
'上海应用技术大学','上海长途客运南站','上海东方体育中心','B返回','Q退出'
],
'B返回': '返回',
'Q退出': '退出'
},
'广州':{
'天河区':[
'珠江公园','天河体育场','广东师范大学','B返回','Q退出'
],
'白云区':[
'广州体育馆','白云文化广场','广州百信广场','B返回','Q退出'
],
'海珠区':[
'中山大学','城市职业学院','南方医科大学','B返回','Q退出'
],
'B返回': '返回',
'Q退出': '退出'
}
} # print(City) Choice_of_city = list(City.keys())#字典转换为列表
# print(City.keys())
# print(City.values())
#打印字典使用format函数格式化
# print('{0[0]} {0[1]} {0[2]}'.format(Choice_of_city)) def menu():#使用函数def
while True:#只要为真就无限循环
print('{0[0]} {0[1]} {0[2]}'.format(Choice_of_city))#将列表Choice_of_city以函数format格式化打印
User_input_City = input('请选择城市:').strip()#用户输入,次数strip为移除空白
if User_input_City in Choice_of_city:#判断用户输入的信息是否在列表User_input_City中
District = list(City[User_input_City])#获取用户输入信息并根据用户输入信息取出字典City的values,
# 此处用户输入信息User_input_City相当于字典City的keys,并且把获取的values转换为列表District
while True:#只要为真就无限循环
# if User_input_City in Choice_of_city:
print('{0[0]} {0[1]} {0[2]} {0[3]} {0[4]}'.format(District))#将列表District以函数format格式化打印
User_input_District = input('请选择区县:').strip()#用户输入
if User_input_District not in District:#判断用户输入不在于列表District中
print('输入错误,请重新输入!!')
continue#退出当前循环继续下一次循环
if User_input_District in District:#判断用户输入是否在列表District中
if User_input_District == District[3]:#判断用户输入是否等于District中第4个元素
break#跳出当前循环
elif User_input_District == District[4]:#判断用户输入是否等于District中第4个元素
return#退出整个函数,这里用来退出所有循环
else:
while True:
Township = (City[User_input_City][User_input_District])
print('{0[0]} {0[1]} {0[2]} {0[3]} {0[4]}'.format(Township))
User_input_township = input('选择乡镇:').strip()
if User_input_township not in Township:
print('输入错误,请重新输入!!')
continue
if User_input_township in Township:
if User_input_township == Township[3]:
break
if User_input_township == Township[4]:
return
else:
print('Bingo!!!')
return
else:
continue
else:
break
else:
continue
else:
print('输入错误,请重新输入!!')
continue
# else:
# continue
# else:
# print('输入不正确,请重新输入!!')
menu()
另外在写了一个版本:
#!/usr/bin/env python3
City = {
'北京市':{
'大兴区':[
'亦庄','黄村','中信新城','返回','退出'
],
'丰台区':[
'岳各庄','五棵松','丰台路口','返回','退出'
],
'朝阳区':[
'劲松','双井','国贸','返回','退出'
],
'返回':'返回',
'退出':'退出'
},
'上海市':{
'浦东区':[
'世纪大道','陆家嘴','盛世年华','返回','退出'
],
'普陀区':[
'东方汽配城','金沙社区','东锦国际大厦','返回','退出'
],
'徐汇区':[
'上海应用技术大学','上海长途客运南站','上海东方体育中心','返回','退出'
],
'返回': '返回',
'退出': '退出'
},
'广州市':{
'天河区':[
'珠江公园','天河体育场','广东师范大学','返回','退出'
],
'白云区':[
'广州体育馆','白云文化广场','广州百信广场','返回','退出'
],
'海珠区':[
'中山大学','城市职业学院','南方医科大学','返回','退出'
],
'返回': '返回',
'退出': '退出'
}
}
dic_city = {}
dic_district = {}
dic_address = {}
def menu():
while True:
for i in enumerate(City, 1): #循环字典City,并在keys前加序号
print(i[0], i[1]) #循环打印序号+City的keys
dic_city[str(i[0])] = i[1] #将打印的序号和字典City的keys循环加入新的字典dic_city中,此处str将序号转换为字符串,方便后面判断
user_input = input('选择前往城市编号:').strip() #用户输入,strip去掉两侧空格
# print(dic_city)
if len(user_input) == 0: #计算用户输入长度是否为0,判断输入是不是空值
print('输入不能为空,请重新输入!')
continue #退出本次循环
elif user_input in dic_city: #判断用户输入是否在字典dic_city中
while True:
for i in enumerate((City[dic_city[user_input]]),1):#循环中添加序号
print(i[0],i[1])
dic_district[str(i[0])] = i[1]
district = input('区县选择或退出返回(请填写序号即可):').strip()
if len(district) == 0: #计算用户输入长度是否为0,判断输入是不是空值
print('输入不能为空,请重新输入!')
continue
elif district == list(dic_district)[-2]: #判断用户输入是否等于倒数第二个元素,即:返回
break
elif district == list(dic_district)[-1]: #判断用户输入是否等于最后一个元素,即:退出
return #退出整个函数,这里用来退出多层循环
elif district not in dic_district: #判断用户输入不在字典dic_district中
print('输入不正确,请重新输入!')
continue
else:
while True:
for i in enumerate((City[dic_city[user_input]][dic_district[district]]),1):#多层字典,最外层字典City,
# [dic_city[user_input]新字典中取到City的keys,这样取到第二层字典;dic_district[district]新字典中取到
# 第二层字典的keys,City[dic_city[user_input]][dic_district[district]]整个是第二层字典加keys,最后取
# 出第三层
print(i[0],i[1])
dic_address[str(i[0])] = i[1]
address = input('选择地址或者返回退出(请填写序号即可):').strip()
if len(address) == 0:
print('输入不能为空,请重新输入!')
continue
elif address == list(dic_address)[-2]:
break
elif address == list(dic_address)[-1]:
return
elif address not in dic_address:
print('输入不正确,请重新输入!')
continue
else:
addr = '''
您选择的地址为:%s%s%s
'''%(dic_city[user_input],dic_district[district],dic_address[address])#段落输出格式,%s代替字符串
print(addr.strip())
return
continue
break
continue
else:
print('输入不正确,请重新输入!')
continue
menu()
python3 实现一个多级菜单小功能的更多相关文章
- Vue2 实现树形菜单(多级菜单)功能模块
结构示意图 ├── index.html ├── main.js ├── router │ └── index.js # 路由配置文件 ├── components # 组件目录 │ ├── App. ...
- Java实现点击一个Jlabel增加一个Jlabel的小功能
当界面生成以后,自己想做一个点击一个Jlabel增加一个Jlabel,即类似于QQ的添加好友以后可以及时的加进一个好友.自己做了好久,发现不能及时刷新.在网上查了一下,然后自己研究了一小会.发现需要v ...
- 【Pthon入门学习】多级菜单小例子
menu_list = { '北京':{ '昌平':{ '回龙观':{ '和谐家园':{}, '矩阵小区':{}, '北店家园':{} }, '沙河':{ '北街家园1区':{}, '北街家园2区': ...
- JQ 查找 两个同辈元素之间 的同辈元素 nextUntil() 用于做一个多级菜单
可以应用的地方,参考了淘宝的API菜单列表 我自己的应用
- python3 用户登录验证的小功能
用户登录验证,记录一下,还需要修改黑名单不合理 #!/usr/bin/env python3 ''' 需求:编写登录接口 1.输入用户名和密码 2.验证用户密码成功后输出欢迎消息 3.3次没有验证通过 ...
- python实例2-写一个爬虫下载小功能
主要是通过url,和re两个模块对一个网页的固定图片进行模糊匹配后下载下来. #! /usr/bin/python import re import urllib def gethtml(url): ...
- Mybatis实现多级菜单查询
写在前面 最近实现一个小需求,前端需要菜单的信息,需要向后端发起获取菜单的请求,菜单又是一个多级菜单,后端我用的mybatis进行数据库查询,实现的方法我这里想到有两种,欢迎大家补充. 1. 在Men ...
- MVC5+EF6 入门完整教程13 -- 动态生成多级菜单
稍微有一定复杂性的系统,多级菜单都是一个必备组件. 本篇专题讲述如何生成动态多级菜单的通用做法. 我们不用任何第三方的组件,完全自己构建灵活通用的多级菜单. 需要达成的效果:容易复用,可以根据mode ...
- Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据
用servlet实现一个注册的小功能 ,后台获取数据. 注册页面: 注册页面代码 : <!DOCTYPE html> <html> <head> <meta ...
随机推荐
- 查询SQL Version详细信息
下面是一个查询SQL Server版本并给出升级建议的SQL代码,用来学习写SQL代码. ------------------------------------------------------- ...
- 让图片左右缓慢移动的MoveView
让图片左右缓慢移动的MoveView 效果: 源码: MoveView.h 与 MoveView.m // // MoveView.h // AnimationView // // Created b ...
- Python简介及编码
首先Python是一种语言,因此根据其实现的不同,有Cpython, Jython, IronPython, Pypy等. Python执行流程 $ python /home/hello.py ...
- zabbix监控 linux/windows 主机tcp连接状态
更新内容:1).增加了对windows主机的tcp连接状态的监控2).修改linux主机的监控配置,使linux与windwos主机能够使用相同的模板tcp的连接状态对于监控服务器,尤其是Web服务器 ...
- linux下常用命令:
常用指令 ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all) mkdir ...
- 初进MFC的世界,太奇妙。第六次作业----未完待续
又一次的迁徙.我希望能够早些抵达. 第六次作业-未完待续!图形界面,计算器文件 本次的作业是给自己的计算器加一个可视化的窗口,我开始也是很激动和憧憬的,看了很多的界面库,发现并没有想象的那么简单,因为 ...
- JavaBean 规范
JavaBean是公共Java类,需要满以下条件: 1.所有属性为private2.提供默认无参构造方法3.提供getter和setter4.实现serializable接口 具体为: (1)Java ...
- Bean Definition从加载、解析、处理、注册到BeanFactory的过程。
为了弄清楚Bean是怎么来的,花费了大把功夫,现在要把Bean Definition的加载.解析.处理.注册到bean工厂的过程记下来.这只是bean definition 的加载.解析.处理.注册过 ...
- BZOJ3174:[TJOI2013]拯救小矮人(DP)
Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人, ...
- Spring framework 反序列化的漏洞
理解这个漏洞需要先看freebuff上的jdni的小例子. jndi注入在jdk8u121绕过参考这俩篇文章: https://bl4ck.in/tricks/2019/01/04/JNDI-Inje ...