记录下一下

 #!/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. 乘风破浪:LeetCode真题_002_Add Two Numbers

    乘风破浪:LeetCode真题_002_Add Two Numbers 一.前言     这次的题目是关于链表方面的题目,把两个链表对应节点相加,还要保证进位,每个节点都必须是十进制的0~9.因此主要 ...

  2. DRAM(动态)存储器

    一.DRAM的存储元电路 常见的DRAM存储元电路有四管式和单管式两种,它们的共同特点是靠电容存储电荷的原理来存储信息.电容上存有足够多的电荷表示“1”,电容上无电荷表示“0”. 由于电容存储的电荷会 ...

  3. 重装win7系统的过程

    U盘重装系统准备工作: 1.下载一个制作U盘系统的软件,随便哪个都行,把U盘变成系统盘 2.下载镜像,将镜像copy到系统盘内即可(无需解压) 3.进入BIOS系统,将boot进行设置,将U盘设置为第 ...

  4. [EffectiveC++]item04:Make sure the objects are initialized before they're used

    28 页 C++规定,对象的成员变量的初始化动作发生在进入构造函数本体之前. 构造函数的一个较佳的写法是,使用所谓的member initialization list替换赋值动作. 29页 但请立下 ...

  5. 利用TLE数据确定卫星轨道(2)-SGP4模型实现

    1.TLE轨道报: 接上一篇,TLE轨道报各项内容所代表的意义如下: 2.SGP4模型: TLE轨道报计算卫星轨道需要用到 NORAD 开 发 的 SGP4/SDP4 模 型 ,SGP4模型是由 Ke ...

  6. 为什么 Category 不能增加成员变量-nonfragile

    三.既然是 non-fragile ivars,为什么 Category 不能增加成员变量?     看过一些资料,理由并不是很让人信服.我觉得并不是做不到,只是现在没有做,现在不支持.我在 Opti ...

  7. PHP imagechar() 图形验证码 字体太小问题

    bool imagechar ( resource $image , int $font , int $x , int $y , string $c , int$color ) imagechar() ...

  8. BZOJ2588:Count on a tree(主席树)

    Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始 ...

  9. HTML5本地存储——IndexedDB

    在HTML5本地存储——Web SQL Database提到过Web SQL Database实际上已经被废弃,而HTML5的支持的本地存储实际上变成了 Web Storage(Local Stora ...

  10. Kali-linux使用NVIDIA计算机统一设备架构(CUDA)

    CUDA(Compute Unified Device Architecture)是一种由NVIDIA推出的通用并行计算架构,该架构使用GPU能够解决复杂的计算问题.它包含了CUDA指令集架构(ISA ...