记录下一下

 #!/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. NexusFile(文件管理器)

    NexusFile是一款来自于韩国的文件管理器,类似于TotalCommander,拥有两个并排的文件夹窗口. NexusFile软件的特性如下: 基本功能:复制/移动, 复制/剪切/粘贴, 删除/擦 ...

  2. Kendo 计算字段

    var Product = kendo.data.Model.define({ fields: { "quantity": { type: "number" } ...

  3. August 15th 2017 Week 33rd Tuesday

    Would rather have done a regret, do not miss the regret. 宁愿做过了后悔,也不要错过了后悔. Yesterday, I read several ...

  4. Vue中$refs的用法

    说明:vm.$refs 一个对象,持有已注册过 ref 的所有子组件(或HTML元素) 使用:在 HTML元素 中,添加ref属性,然后在JS中通过vm.$refs.属性来获取 注意:如果获取的是一个 ...

  5. c++计算器后续(2)

    自娱自乐: 大概是了解了一下前缀.中缀.后缀表示法是啥,并没有去深究,比如考虑实现啊,然后Calculation类里面的计算方法还是选用原来的直接对中缀表达式求值,只是把代码改得规范点,以上. 各表示 ...

  6. 【[HAOI2011]向量】

    靠瞎猜的数学题 首先我们先对这些向量进行一顿组合,会发现\((a,b)(a,-b)\)可以组合成\((2a,0)\),\((b,-a)(b,a)\)可以组合成\((2b,0)\),同理\((0,2a) ...

  7. POJ 3261 Milk Patterns 【后缀数组 最长可重叠子串】

    题目题目:http://poj.org/problem?id=3261 Milk Patterns Time Limit: 5000MS Memory Limit: 65536K Total Subm ...

  8. 20145216史婧瑶《Java程序设计》第五次实验报告

    20145216 实验五<Java网络编程> 实验内容 1.掌握Socket程序的编写 2.掌握密码技术的使用 3.设计安全传输系统 实验要求 1.基于Java Socket实现安全传输 ...

  9. background-clip 实现字体渐变效果

    background-clip 实现字体渐变效果 (一)类似KTV字幕效果 @-webkit-keyframes loop{ 0%{background-position: -800px 0;} 10 ...

  10. Nexus修改admin密码及其添加用户

    Nexus之所以修改密码,是为了安全起见,个人学习的话,本地windows或者虚拟机即可,外网服务器建议将密码修改复杂点,而且强烈建议端口不要8081,最好将其改为其他的.同样也是为了安全起见. 添加 ...