程序要求:

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. 成功安装tesserocr

    首先按照官网的操作,出现了下面的错误. 错误描述: x86_64-linux-gnu-gcc: error trying to exec 'cc1plus': execvp: 没有那个文件或目录 er ...

  2. Unity [RequireComponent(typeof(组件名))]

  3. Storm概念学习系列之什么是实时流计算?

    不多说,直接上干货! 什么是实时流计算?    1.实时流计算背景 2.实时计算应用场景 3.实时计算处理流程 4.实时计算框架 什么是实时流计算? 所谓实时流计算,就是近几年由于数据得到广泛应用之后 ...

  4. mysql sql语句集锦

    1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 备份 ...

  5. <llinux下kvm虚拟化>

    原理就是本来可能要10台物理机完成的事现在只要5台,分别在每台物理机上虚拟一台,这5太虚拟机共享一个stronge,比如有一台物理机down掉后或是要做维护,我们可以把它上面的虚拟机牵走,从而减少损失 ...

  6. ASP.NET MVC ValidationAttribute 服务器端自定义验证

    自己开发的公众号,可以领取淘宝内部优惠券 客户端验证 上文只说了客户端的自定义验证,这样对于用户的输入还是不够可靠,用户完全可以绕过我们定义的客户端验证.所以仅有客户端的验证还是不够的,我们还需要在服 ...

  7. Webpack webpack+gulp实现自动构建部署

    http://www.cnblogs.com/sloong/p/5826859.html

  8. 使用AlarmManager定期执行工作

    新建一个Service来模拟后台执行的程序,PollingService.java: package com.ryantang.rtpollingdemo; import android.app.No ...

  9. thymeleaf 模板语言简介

    参考网址: https://blog.csdn.net/mlin_123/article/details/51816533 1.1 Thymeleaf 在有网络和无网络的环境下皆可运行,而且完全不需启 ...

  10. window下安装scala搭载Intellij IDE

    最近由于公司业务需求,要用到scala,编写还是windows下较好,linux下运行比较靠谱,废话少说,直接上步骤! 1.首先安装java环境 jdk下载地址:http://www.oracle.c ...