三级菜单需求:
1.可依次选择进入各子菜单
2.可从任意一层往回退到上一层
3.可从任意一层退出程序
所需新知识点:列表、字典

先通过字典建立数据结构

 #创建字典
city_dic = {
"北京":{
"海淀区": {
"人大附中":{
"足球":{},
"篮球":{},
"排球":{},
}, "十一学校":{
"足球":{},
"篮球":{},
"排球":{},
},
"育英学校":{
"足球":{},
"篮球":{},
"排球":{},
},
},
"西城区":{
"北师大附中":{
"足球":{},
"篮球":{},
"排球":{},
},
"三十五中":{
"足球":{},
"篮球":{},
"排球":{},
},
"八中":{
"足球":{},
"篮球":{},
"排球":{},
}, },
"东城区":{
"四中":{
"足球":{},
"篮球":{},
"排球":{},
},
"二中":{
"足球":{},
"篮球":{},
"排球":{},
},
"一中":{
"足球":{},
"篮球":{},
"排球":{},
},
},
"朝阳区":{
"民大附中":{
"足球":{},
"篮球":{},
"排球":{},
},
"7中":{
"足球":{},
"篮球":{},
"排球":{},
},
"9中":{
"足球":{},
"篮球":{},
"排球":{},
}, },
},
"上海":{
"黄埔区":{
"3中":{
"足球":{},
"篮球":{},
"排球":{},
},
"4中": {
"足球":{},
"篮球":{},
"排球":{},
},
"5中": {
"足球":{},
"篮球":{},
"排球":{},
},
},
"徐汇区":{
"6中": {
"足球":{},
"篮球":{},
"排球":{},
},
"7中": {
"足球":{},
"篮球":{},
"排球":{},
},
"8中": {
"足球":{},
"篮球":{},
"排球":{},
},
},
"长宁区":{
"9中": {
"足球":{},
"篮球":{},
"排球":{},
},
"10中": {
"足球":{},
"篮球":{},
"排球":{},
},
"11中": {
"足球":{},
"篮球":{},
"排球":{},
},
},
},
"黑龙江":{
"哈尔滨":{
"1中": {
"足球":{},
"篮球":{},
"排球":{},
},
"2中":{
"足球":{},
"篮球":{},
"排球":{},
},
"3中": {
"足球":{},
"篮球":{},
"排球":{},
},
},
"大庆":{
"4中":{
"足球":{},
"篮球":{},
"排球":{},
},
"5中": {
"足球":{},
"篮球":{},
"排球":{},
},
"6中": {
"足球":{},
"篮球":{},
"排球":{},
},
},
"牡丹江":{
"7中":{
"足球":{},
"篮球":{},
"排球":{},
},
"8中": {
"足球":{},
"篮球":{},
"排球":{},
},
"9中": {
"足球":{},
"篮球":{},
"排球":{},
},
},
"佳木斯":{
"10中": {
"足球":{},
"篮球":{},
"排球":{},
},
"11中": {
"足球":{},
"篮球":{},
"排球":{},
},
"12中": {
"足球":{},
"篮球":{},
"排球":{},
},
},
},
}

优化版实现代码:15行
 current_layer = city_dic #当前层
last_layers = [city_dic] #把当前层赋值给列表,方便退出时使用
while True:
#循环打印字典列表key
for key in current_layer:
print(key)
choice = input(">>>:").strip() #等待用户输入
if choice == "": continue #判断是否为空,为空则continue,
if choice in current_layer: #进入下一层
last_layers.append(current_layer) #把当前层添加到列表
current_layer = current_layer[choice] #当前层变为选择choice的下一层
if choice == "b":
if last_layers:
current_layer = last_layers[-1] #从列表中取到最后一个值,即循环的上一层,赋值给current_layer
last_layers.pop() #取完列表中最后一个值后,要把它从列表中删除,pop()默认删除列表中最后一个,也可以写成pop(-1)
if choice == "q": break # 如果输入q,结束程序。

python-三级菜单的优化实现的更多相关文章

  1. Python 三级菜单与优化(一层循环嵌套)

    优化的思路是使用单层循环嵌套完成三级菜单,这个优化思路我非常喜欢,我喜欢在编程的时候用最少的东西写出同样的效果,通常这样会绕来绕去,但非常有趣!!! 需求: 1.运行程序输出第一级菜单: 2.选择一级 ...

  2. python(5)- 简单练习:python三级菜单优化

    python三级菜单优化,菜鸟版链接:http://www.cnblogs.com/xuyaping/p/6648170.html menu = { '北京':{ '海淀':{ '五道口':{ 'so ...

  3. python三级菜单实例(傻瓜版和进阶版)

    程序: python三级菜单 要求: : 1.打印省.市.县三级菜单 2.可返回上一级 3.可随时退出程序 方案一:傻瓜版(其实傻瓜版考察的主要是思路!思路清楚了,那才不是傻瓜!O(∩_∩)O哈哈~) ...

  4. python三级菜单的实现

    一.作业要求 1.使用字典实现三级菜单功能 2.直接输入前面数字进入下一级菜单 3.按B返回上一级,按Q退出 二.需要知识点 1.if循环 2.for循环,enumerate的用法 3.while循环 ...

  5. python 三级菜单 while循环三次,湖北省市-县-街道的选择,3个while的循环 -day2

    python编写一个三级while的循环菜单 1.定义字典,字典里面嵌套字典,内嵌字典的值为列表. 思路: 湖北省的市:字典中的定义3个字典,用于存储{序列-键:市名} shiqu_dir = {} ...

  6. Python 三级菜单 增强版

    需要实现的功能是:三级菜单1.从文本内读出选项2.查询每一级的选项,并能对选项进行增/删/改功能3.每一级可以退出程序或者返回上一层 2018-5-14 更新内容 思路 实现过程中的BUG及解决方案: ...

  7. python三级菜单

    #-*- coding:utf-8 -*-#Author:gxli #一级菜单项def menu(): #遍历字典dic一级菜单 print('-----------一级菜单------------- ...

  8. Python——三级菜单

    #三级菜单函数 menu = { '北京':{ 海淀:{ '五道口':{} '中关村':{} '上帝':{} } '昌平':{} '朝阳':{} '东城':{} }, '上海':{} '山东':{} ...

  9. 4th,Python三级菜单

    1. 运行程序输出第一级菜单 2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单 3. 菜单数据保存在文件中 4. 让用户选择是否要退出 5. 有返回上一级菜单的功能 data = { '北京': ...

  10. [terry笔记]python三级菜单

    把三级菜单输出,选择后逐层显示,”b“返回上一级菜单. menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村': ...

随机推荐

  1. 讲座: conversation

    一, Zhouming MSRA NLP group NLP 2.0 attention model 二,Yan Rui 一, retrived based-conversation system t ...

  2. Using nxlog4go for Testing Environment

    nxlog4go is very simple to use without any configuring, setting. For example: package main import ( ...

  3. Jquery的部分插件

    jQuery Easing:jQuery 动画效果扩展 jQuery Migrate:jQuery 应用迁移辅助插件Modernizr:专为HTML5和CSS3开发的功能检测类库jQuery Flex ...

  4. CRM中间件里的CSA队列有什么用

    我们有时候会在中间件的事务码SMQ2即Inbound队列查看器里观察到以CSA开头的队列: 这些队列的作用是什么呢?在SAP community上已经有很多朋友提出了相同的问题,也有专家在下列两个连接 ...

  5. cftool拟合&函数逼近

    cftool拟合&函数逼近 cftool 真是神奇,之前我们搞的一些线性拟合解方程,多项式拟合,函数拟合求参数啊,等等. 已经超级多了,为啥还得搞一个cftool拟合啊?而且毫无数学理论. 如 ...

  6. 2018.11.4 Hibernate中一对、多对多的关系

    简单总结一下 多表关系 一对多/多对一 O 对象 一的一方使用集合. 多的一方直接引用一的一方. R 关系型数据库 多的一方使用外键引用一的一方主键. M 映射文件 一: 多: 操作: 操作管理级别属 ...

  7. IntelliJ IDEA 快速搭建 Spring MVC环境

    IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.Ant.JUnit.CVS整合.代码审查. 创新的GUI设计等方面的功能可以说是超常的. ...

  8. git报错error: src refspec refs/heads/master does not match any.

    $ git pusherror: src refspec refs/heads/master does not match any.error: failed to push some refs 出错 ...

  9. qbxt Day4

    1.树形dp 例题1 树上最长链 其实有两种方法,但为了简便,就只学了最通用的dp算法 我们考虑设dp[i][0/1]表示以i为根的最长路和次长路,然后拼接就行了 第二维0表示最长路,1表示次长路 i ...

  10. pv与单广告位曝光统计优化

    上一篇文章<巧用域名发散,缓解单广告位并发请求限制>中提到了我已经将广告的数据请求写成了单广告位请求.既然数据请求都已经是单广告位的了,那么曝光统计也理所应当是单广告位的. pv是什么? ...