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 ...
随机推荐
- JS——制作简单的网页计算器
用JS做了一个简易的网页计算器 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- (转)Linux系统stat指令用法
<Linux系统stat指令用法> 原文:https://www.cnblogs.com/linux-super-meng/p/3812695.html stat指令:文件/文件系统的详 ...
- CheatEngine-内存修改
0.备注+待完成 //备注 a). 如果有方括号,就是说CE认为找 到了数值的指针了 //待完成 a). 自动导出外挂 b). 菜单栏中"表单"下的lua是做什么用的 c). CE ...
- Dom4j-读写xml
1.示例代码 Document document = DocumentHelper.createDocument(); // 增加命名空间 Namespace sopa12 = Namespace.g ...
- 一次Zookeeper 扩展之殇
一.背景 基于公司发展硬性需求,生产VM服务器要统一迁移到ZStack 虚拟化服务器.检查自己项目使用的服务器,其中zookeeper集群中招,所以需要进行迁移. 二.迁移计划 为了使迁移不对业务产生 ...
- pat1069. The Black Hole of Numbers (20)
1069. The Black Hole of Numbers (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, ...
- SpringBoot | 第二十一章:异步开发之异步调用
前言 上一章节,我们知道了如何进行异步请求的处理.除了异步请求,一般上我们用的比较多的应该是异步调用.通常在开发过程中,会遇到一个方法是和实际业务无关的,没有紧密性的.比如记录日志信息等业务.这个时候 ...
- linux启动mysql报错 Starting MySQL... ERROR! The server quit without updating PID file (XXXX pid文件位置)
最近在云服务器上安装mysql 启动时报错了,从错误中可以看出,定位在pid文件上,有三种解决方案 1.重启服务器:因为服务器更新时,可能会禁用某些守护进程,重启后即可恢复 2.删除配置文件,重启试 ...
- Django组件:forms组件(简易版)
一.校验字段功能 1.模型:models.py class UserInfo(models.Model): name=models.CharField(max_length=32) pwd=model ...
- python 多线程 生产者消费者
import threading import time import logging import random import Queue logging.basicConfig(level=log ...