记录下一下

 #!/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 实现一个多级菜单小功能的更多相关文章

  1. Vue2 实现树形菜单(多级菜单)功能模块

    结构示意图 ├── index.html ├── main.js ├── router │ └── index.js # 路由配置文件 ├── components # 组件目录 │ ├── App. ...

  2. Java实现点击一个Jlabel增加一个Jlabel的小功能

    当界面生成以后,自己想做一个点击一个Jlabel增加一个Jlabel,即类似于QQ的添加好友以后可以及时的加进一个好友.自己做了好久,发现不能及时刷新.在网上查了一下,然后自己研究了一小会.发现需要v ...

  3. 【Pthon入门学习】多级菜单小例子

    menu_list = { '北京':{ '昌平':{ '回龙观':{ '和谐家园':{}, '矩阵小区':{}, '北店家园':{} }, '沙河':{ '北街家园1区':{}, '北街家园2区': ...

  4. JQ 查找 两个同辈元素之间 的同辈元素 nextUntil() 用于做一个多级菜单

    可以应用的地方,参考了淘宝的API菜单列表 我自己的应用

  5. python3 用户登录验证的小功能

    用户登录验证,记录一下,还需要修改黑名单不合理 #!/usr/bin/env python3 ''' 需求:编写登录接口 1.输入用户名和密码 2.验证用户密码成功后输出欢迎消息 3.3次没有验证通过 ...

  6. python实例2-写一个爬虫下载小功能

    主要是通过url,和re两个模块对一个网页的固定图片进行模糊匹配后下载下来. #! /usr/bin/python import re import urllib def gethtml(url): ...

  7. Mybatis实现多级菜单查询

    写在前面 最近实现一个小需求,前端需要菜单的信息,需要向后端发起获取菜单的请求,菜单又是一个多级菜单,后端我用的mybatis进行数据库查询,实现的方法我这里想到有两种,欢迎大家补充. 1. 在Men ...

  8. MVC5+EF6 入门完整教程13 -- 动态生成多级菜单

    稍微有一定复杂性的系统,多级菜单都是一个必备组件. 本篇专题讲述如何生成动态多级菜单的通用做法. 我们不用任何第三方的组件,完全自己构建灵活通用的多级菜单. 需要达成的效果:容易复用,可以根据mode ...

  9. Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据

    用servlet实现一个注册的小功能 ,后台获取数据. 注册页面: 注册页面代码 : <!DOCTYPE html> <html> <head> <meta ...

随机推荐

  1. oracle 帐号scott被锁定 如何解锁

    由于多次输入:账号 密码不对 oracle 帐号scott被锁定 如何解锁: 具体操作步骤如下:C:> sqlplus请输入用户名:sys输入口令:sys as sysdba //注意:在口令这 ...

  2. Python学习---JSON学习180130

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON是用字符串来表示Javascript对象: Json字符串就是js对象的一种表现形式(字符串的形式 ...

  3. phpstrom设置php环境

    phpstorm设置自动同步服务器 Tools->Deployment->Confinguration 点+号,添加服务器,类型SFTP,输入name 点击ok,项目与服务器连接成功! 设 ...

  4. Azure 负载均衡器介绍

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. Azure 负载均衡器 ...

  5. [C++]auto_ptr绑定到指针

    接受指针的构造函数为explicit构造函数,所以必须使用初始化的直接形式来创建auto_ptr对象: auto_ptr<int> pi = new int(1024);//error a ...

  6. 查看linux上面是否有安装redis,redis启动

    1.检测是否有安装redis-cli和redis-server; [root@localhost bin]# whereis redis-cli redis-cli: /usr/bin/redis-c ...

  7. SOJ 4309 Sum of xor 异或/思维

    Source ftiasch 解题思路: 本题的题解有参考这里,但是那篇年代太久远,讲的也不甚清晰,所以可能会对很多新手造成困扰,所以又写了这一篇. 亦或有很多规律,本题使用到的是n^(n+1)=1, ...

  8. 「bzoj 4025: 二分图」

    题目 显然二分图没有奇环 于是考虑使用并查集维护一下看看是否存在奇环 我们可以考虑加权并查集,维护出\(x\)到\(fa_x\)的实际距离 由于我们只需要考虑奇偶性,于是我们处理出到根的路径异或一下就 ...

  9. SpringMVC DELETE,PUT请求报错 添加支持Http的DELETE、PUT请求

    SpringMVC删除与修改操作需要用DELETE,PUT请求方式提交. 但要知道浏览器form表单只支持GET与POST请求,而DELETE.PUT等method并不支持. spring3.0添加了 ...

  10. PHP+JQUERY+AJAX上传、裁剪图片(2)

    <script type="text/javascript"> var imgCut = { imgOpt : { imgPrototypeId : 'imgProto ...