Python_三级目录
程序要求:
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_三级目录的更多相关文章
- 用python选择及显示三级目录,可返回上层目录以及随时跳出。
# -*- coding: utf-8 -*-"""Created on Fri Jul 29 09:43:38 2016 @author: yinggang" ...
- python之三级目录
#python之三级目录低配版 menu = { '北京':{ '朝阳':{ '国贸':{ 'CICC':{ }, 'HP':{ }, '渣打银行':{ }, 'CCTV':{ }, }, '望京': ...
- python编辑三级目录
一.需求分析 三级目录要能够实现以下要求: 显示根目录,任何子目录中都可以通过输入b字符来返回根目录 任何子目录中都可以通过输入q字符来返回上一级目录 主目录进入子目录后,系统能够打印子目录,根据指打 ...
- java查询三级树(三级目录)
背景: 三级树实现效果 这里只介绍,查询数据库,构建三级目录的后端业务逻辑 1.创建查询类(对应数据库需要查出的字段) @Data @AllArgsConstructor @NoArgsConstru ...
- Python_实现三级目录展示
要求: 1.三级菜单 2.可依次选择进入各子菜单,选择序号进入目录 3.输入b返回上级目录,q退出更改目录 代码实现: #!/bin/env python #!--*--coding:utf-8 -- ...
- Day1 三级目录
d_city = { "河南" : {"郑州" : ["二七区","中原区","回族管城区",&qu ...
- 更新上篇文章 调用三级目录文章内容 dede频道页实现三级栏目嵌套调用文章
原文:http://www.wuaie.com/?p=66 源码改写 $typeid = $row['id']; if((class_exists('PartView'))) { $pv = new ...
- python_三级字典
data = { "北京":{ "昌平":{ "沙河":["oldboy","test"], &qu ...
- python_自动查找指定目录下的文件或目录的方法
代码如下 import os def find_file(search_path, file_type="file", filename=None, file_startswith ...
随机推荐
- 练习三十八:矩阵for循环应用
习题如下: 求一个3*3矩阵对角线元素之和 利用for循环控制输出二维数组,再将a[i][j]累加后输出 a = [] sum1 = 0.0 for i in range(3): a.append([ ...
- 03.Spring IoC 容器 - 初始化
基本概念 Spring IoC 容器的初始化过程在监听器 ContextLoaderListener 类中定义. 具体由该类的的 configureAndRefreshWebApplicationCo ...
- Python 将IP转换为int
import socket import struct if __name__ == '__main__': ip = '127.0.0.1' int_ip = struct.unpack('!I', ...
- windows 安装python
前言: Windows 中直接使用Python真的是心累 安装vs 2017(最好是最新版的, 因为python依赖于一些vs提供的包) 下载最新的python的安装程序 安装完毕之后, 不像Linu ...
- 下载安装MariaDB Galera 10.1
因为无法访问外网, 配置官网的yum无法下载MariaDB Galera(在MariaDB 10.1 及之后内置了Galera, 不像之前那样需要独立安装) 需要在下载的包 MariaDB-10.1. ...
- Poj 1743——Musical Theme——————【后缀数组,求最长不重叠重复子串长度】
Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 22499 Accepted: 7679 De ...
- jquery调用asp.net 页面后台的实现代码
先创建一个aspx页面编写一个客户端控件<input type="button" id="AjaxDemo" value="AjaxDemo&q ...
- jQuery实现加载中效果,防止重复提交
//导出表格加载中的提示var dian=0;//控制'●'的个数var t=null;//停止时使用function id_loadspot(loadspotSpan,loadingDiv,expo ...
- sql单列合并
有一组这样的数据 1 a 10 2 b 2 4 c 5 1 a 5 在应用中,我们可能需要把出现a的数据合并显示: 1 a 10,5 sqlite上实现: SELECT ...
- win10+asp+access 父路径开启无效
如题: 在win10环境下,布署asp+access,发现在用到"../website/"时就出错,提示不能使用父路径 可是我在IIS 的asp中明明打开了父路径的 如下 但是偏偏 ...