程序要求:

1. 使用字典存储

1. 可以一层一层的进入到所有层
2. 可以在每层返回上一层
3. 可以在任意层退出

  三级目录写了两个版本,第一个版本是刚看完字典写出来的,代码很多冗余,很多重复。

menu = {
'北京':{
'朝阳':{
'国贸':{
'CICC':{},
'HP':{},
'渣打银行':{},
'CCTV':{}
},
'望京':{
'陌陌':{},
'阿里巴巴':{},
'奔驰':{}
},
'三里屯':{
'优衣库':{},
'apple':{},
}
},
'昌平':{
'沙河':{
'老男孩':{},
'阿泰包子':{}
},
'天通苑':{
'链家':{},
'我爱我家':{},
},
'回龙观':{}
},
'海淀':{
'五道口':{
'谷歌':{},
'网易':{},
'Sogo':{},
'快手':{},
},
},
'中关村':{
'优酷':{},
'爱奇艺':{},
'腾讯':{},
'汽车之家':{},
'新东方':{},
}
},
'上海':{
'浦东':{
'陆家嘴':{
'CICC':{},
'高盛':{},
'摩根':{},
},
'外滩':{}
},
'闵行':{},
'静安':{},
},
'山东':{
'济南':{},
'德州':{
'乐陵':{
'丁务镇':{},
'城区':{},
},
'虞城':{},
'平原县':{},
},
'青岛':{},
}
} back_flag = False
quit_flag = False while not back_flag and not quit_flag:
for key in menu:
print(key)
choice = input('>>:').strip()
if choice in menu:
while not back_flag and not quit_flag:
for key_2 in menu[choice]:
print(key_2)
choice_2 = input('2>>:').strip()
if choice_2 == 'b':
back_flag = True
if choice_2 == 'q':
quit_flag = True
if choice_2 in menu[choice]:
while not back_flag and not quit_flag:
for key_3 in menu[choice][choice_2]:
print(key_3)
choice_3 = input('3>>:').strip()
if choice_3 == 'b':
back_flag = True
if choice_3 == 'q':
quit_flag = True
if choice_3 in menu[choice][choice_2]:
while not back_flag and not quit_flag:
for key_4 in menu[choice][choice_2][choice_3]:
print(key_4)
print('last level!!')
choice_4 = input('4>>:').strip()
if choice_4 == 'b':
back_flag = True
if choice_4 == 'q':
quit_flag = True
else:
back_flag = False
else:
back_flag = False
else:
back_flag = False

  第二个版本,代码部分比较精炼,偷师于老男孩。

menu = {
'北京':{
'朝阳':{
'国贸':{
'CICC':{},
'HP':{},
'渣打银行':{},
'CCTV':{}
},
'望京':{
'陌陌':{},
'阿里巴巴':{},
'奔驰':{}
},
'三里屯':{
'优衣库':{},
'apple':{},
}
},
'昌平':{
'沙河':{
'老男孩':{},
'阿泰包子':{}
},
'天通苑':{
'链家':{},
'我爱我家':{},
},
'回龙观':{}
},
'海淀':{
'五道口':{
'谷歌':{},
'网易':{},
'Sogo':{},
'快手':{},
},
},
'中关村':{
'优酷':{},
'爱奇艺':{},
'腾讯':{},
'汽车之家':{},
'新东方':{},
}
},
'上海':{
'浦东':{
'陆家嘴':{
'CICC':{},
'高盛':{},
'摩根':{},
},
'外滩':{}
},
'闵行':{},
'静安':{},
},
'山东':{
'济南':{},
'德州':{
'乐陵':{
'丁务镇':{},
'城区':{},
},
'虞城':{},
'平原县':{},
},
'青岛':{},
}
} lader = menu
apper_levels = [] while True:
for key in lader:
print(key)
choice = input('>>>:').strip()
if choice in lader:
apper_levels.append(lader) # 次步是重点,第一次执行便将字典以列表的形式保存,每进入一层,便将父级目录追加到后边,用于退出次层时直接提取,保证永远包含字典,并进一层,追加一层。
lader = lader[choice]
elif choice == 'q':
if apper_levels:
lader = apper_levels.pop() # 提取的是进入某层后的上一层信息,是在上边标注的地方进行的追加。

2. 使用文件存储数据

1. 展示省市县(数据存在文件中)
2. 对菜单实现增(add)删(del)改(replace)查(到某一级目录可以让用户选择增加是否添加当级目录的省市县,还是存放到文本中)

程序涉及方法:

  字符串转为字典

a = str({'bj':{'':111}})
print(type(a))
print(a)
a = eval(a)
print(type(a))

程序使用字典文件(文件名china):

{
'北京':{
'朝阳':{
'国贸':{},
'望京':{},
'三里屯':{}
},
'昌平':{
'沙河':{},
'天通苑':{},
'回龙观':{}
},
'海淀':{
'五道口':{},
},
'中关村':{}
},
'上海':{
'浦东':{
'陆家嘴':{},
'外滩':{}
},
'闵行':{},
'静安':{},
},
'山东':{
'济南':{},
'德州':{
'乐陵':{},
'虞城':{},
'平原县':{},
},
'青岛':{},
}
}

程序代码:

with open('china', 'r', encoding='utf8') as file:
china_str = file.read().strip()
pass mean = eval(china_str)
leader = mean
apper_leves = [] # 用于记录返回值 flag = False while not flag:
for key in leader:
print(key)
choose = input('此页面支持增加(add)、删除(del)、修改(replace)、查看(直接输入省市县)、后退请按"b":')
# 查询
if choose in leader:
apper_leves.append(leader)
leader = leader[choose] # 增加
elif choose == 'add':
user_add = input('输入想要增加的地区:')
if user_add in leader:
print('输入的已存在!')
else:
leader[user_add] = {} # 删除
elif choose == 'del':
user_del = input('输入想要删除的地区:')
if user_del not in leader:
print('删除地区不存在!')
else:
del leader[user_del] # 修改
elif choose == 'replace':
user_rep_bef = input('请输入想要修改的地区:')
if user_rep_bef not in leader:
print('修改地区不存在!')
else:
user_rep_aft = input('请输入修改后的地区名称:')
leader[user_rep_aft] = leader[user_rep_bef] # 重点,将老键的值赋给新键,并删除老键
del leader[user_rep_bef] # 后退及退出
elif choose == 'b':
if apper_leves:
leader = apper_leves.pop()
else:
print('已是最上级菜单,输入“b”退出') # 重点,如直接退出,字典并没有返回最上级目录,无法输出到文件
flag = True
else:
print('非法输入,请重新输入!') with (open('old_wang', 'w', encoding='utf8')) as f:
f.write(str(leader))
pass

Python_三级目录的更多相关文章

  1. 用python选择及显示三级目录,可返回上层目录以及随时跳出。

    # -*- coding: utf-8 -*-"""Created on Fri Jul 29 09:43:38 2016 @author: yinggang" ...

  2. python之三级目录

    #python之三级目录低配版 menu = { '北京':{ '朝阳':{ '国贸':{ 'CICC':{ }, 'HP':{ }, '渣打银行':{ }, 'CCTV':{ }, }, '望京': ...

  3. python编辑三级目录

    一.需求分析 三级目录要能够实现以下要求: 显示根目录,任何子目录中都可以通过输入b字符来返回根目录 任何子目录中都可以通过输入q字符来返回上一级目录 主目录进入子目录后,系统能够打印子目录,根据指打 ...

  4. java查询三级树(三级目录)

    背景: 三级树实现效果 这里只介绍,查询数据库,构建三级目录的后端业务逻辑 1.创建查询类(对应数据库需要查出的字段) @Data @AllArgsConstructor @NoArgsConstru ...

  5. Python_实现三级目录展示

    要求: 1.三级菜单 2.可依次选择进入各子菜单,选择序号进入目录 3.输入b返回上级目录,q退出更改目录 代码实现: #!/bin/env python #!--*--coding:utf-8 -- ...

  6. Day1 三级目录

    d_city = { "河南" : {"郑州" : ["二七区","中原区","回族管城区",&qu ...

  7. 更新上篇文章 调用三级目录文章内容 dede频道页实现三级栏目嵌套调用文章

    原文:http://www.wuaie.com/?p=66 源码改写 $typeid = $row['id']; if((class_exists('PartView'))) { $pv = new ...

  8. python_三级字典

    data = { "北京":{ "昌平":{ "沙河":["oldboy","test"], &qu ...

  9. python_自动查找指定目录下的文件或目录的方法

    代码如下 import os def find_file(search_path, file_type="file", filename=None, file_startswith ...

随机推荐

  1. 源码分析Thread

    多次start ?? IlleageStateException

  2. 三,JVM 自带命令行工具之JMap

    jmap:java内存映像工具 jmap(Memory Map for java ) 命令用于生成堆转储快照(一般被称为headdump 或dump文件) jmap命令格式:jmap [option ...

  3. clipboard JS(剪切板)的使用

    引入js(根据路径需要修改url) <script src="lib/clipboard/clipboard.min.js" type="text/javascri ...

  4. win7,docker安装后,创建虚拟机分配不了ip错误 err: exit status 255

    问题 win7装docker真麻烦,不如家里的win10爽.另外明明这是个很简单的操作,但是国内的解决方法有点落后,所以我写了个傻瓜式的. 有兴趣的可以直接看issue https://github. ...

  5. Elasticsearch如何安装中文分词插件ik

    elasticsearch-analysis-ik 是一款中文的分词插件,支持自定义词库. 安装步骤: 1.到github网站下载源代码,网站地址为:https://github.com/medcl/ ...

  6. 创建有输出参数的存储过程并在c#中实现DataGridView分页功能

    不足之处,欢迎指正! 创建有输出参数的存储过程 if exists(select * from sysobjects where name='usp_getPage1') drop procedure ...

  7. 个人整理的jsp、EL表达式、JSTL标签库的笔记,少概念多实用,需要的留下邮箱,会第一时间分享原稿PDF给大家!

    jsp 第一章 jsp介绍及对比servlet 作用: 动态网页技术,动态的从数据库获取数据 jsp和servlet的优缺点: jsp优点:页面表现方便,利于写html代码 jsp缺点:业务逻辑处理麻 ...

  8. 一起来学Spring Cloud | 第一章 :如何搭建一个多模块的springcloud项目

    在spring cloud系列章节中,本来已经写了几个章节了,但是自己看起来有些东西写得比较杂,所以重构了一下springcloud的章节内容,新写了本章节,先教大家在工作中如何搭建一个多模块的spr ...

  9. Visual Studio 2010 vs2010 英文版 使用 已有的中文版 MSDN 帮助文档

    第一步 设置Help Library Manager区域语言 打开Microsoft Visual Studio 2010开始菜单里Visual Studio Tools里的Manage Help S ...

  10. webapplication发布

    在vs2010里写的 ASP.NET Web Application 发布步骤: ①:右击Web Application项目可以看到发布,弹出的对话框里选择要发布的路径,路径选择一个容易记住的地址即可 ...