洗礼灵魂,修炼python(78)--全栈项目实战篇(6)—— 多级目录菜单之地址管理系统
相信各位都在在网上买过东西吧?那么今天我的主题就是写个在线购物系统,是不可能的,哈哈(后期确实有这个项目),那么购物都填写过快递地址吧?然后网上查个地址都有地址管理吧?
要求:
1.打印出省、市、县等多级目录
2.每一级可以返回到上一级,第一级不能再往上返回
3.可以随时退出系统
分析:
1.简单的地址管理,那么不必把全国的地区都写清楚,做个简单的范例就行,根据你常识中的地址来写就行
2.既然是层层跌进的,那么就有包含关系,这种包含关系怎么搞呢?换句话用什么数据类型存储,我个人喜欢用字典,你们可以随意
3.可以随时退出系统,小问题,不用多说了
还是那句话,我希望你已经思考过在看的下面
同样的,代码发布区在github,传送门
一共就一个主程序文件,这里我暂且只用了两个省份作为范例,设定的三级目录,当然你可以再设定详细的目录。代码:
#!usr/bin/env python
#-*- coding:utf-8 -*-
# author:yangva
# datetime:2017/12/17 0007 18:16
china_map_dict={
'吉林':{
'长春':{'朝阳区':{},'南关区':{},'宽城区':{},'二道区':{},'绿园区':{},'双阳区':{},'德惠市':{},'九台市':{},'榆树市':{},'农安县':{}},
'吉林市':{'船营区':{},'昌邑区':{},'龙潭区':{},'丰满区':{},'蛟河市':{},'桦甸市':{},'舒兰市':{},'磐石市':{},'永吉县':{}},
'四平':{'铁西区':{},'铁东区':{},'公主岭市':{},'双辽市':{},'梨树县':{},'伊通满族自治县':{}},
'辽源':{'龙山区':{},'西安区':{},'东丰县':{},'东辽县':{}},
'通化':{'东昌区':{},'二道江区':{},'梅河口市':{},'集安市':{},'通化县':{},'辉南县':{},'柳河县':{}},
'白山':{'浑江区':{},'江源区':{},'临江市':{},'抚松县':{},'靖宇县':{},'长白朝鲜族自治县':{}},
'松原':{'宁江区':{},'长岭县':{},'乾安县':{},'扶余县':{},'前郭尔罗斯蒙古族自治县':{}},
'白城':{'洮北区':{},'洮南市':{},'大安市':{},'镇赉县':{},'通榆县':{}},
'延边州':{'延吉市':{},'图们市':{},'敦化市':{},'和龙市':{},'珲春市':{},'龙井市':{},'汪清县':{},'安图县':{}},
'长白山管委会':{}
},
'四川':{
'成都':{'锦江区':{},'青羊区':{},'金牛区':{},'武侯区':{},'成华区':{},'青白江区':{},'龙泉驿区':{},'新都区':{},'温江区':{},'金堂县':{},'双流县':{},'郫县':{},'大邑县':{},'蒲江县':{},'新津县':{},'都江堰市':{},'彭州市':{},'崇州市':{},'邛崃市':{}},
'自贡':{'自流井区':{},'贡井区':{},'大安区':{},'滩区':{},'荣县':{},'富顺县':{}},
'攀枝花':{'东区':{},'西区':{},'仁和区':{},'米易县':{},'盐边县':{}},
'泸州':{'江阳区':{},'龙马潭区':{},'纳溪区':{},'泸县':{},'合江县':{},'叙永县':{},'古蔺县':{}},
'德阳':{'旌阳区':{},'广汉市':{},'什邡市':{},'绵竹市':{},'中江县':{},'罗江县':{}},
'绵阳':{'涪城区':{},'游仙区':{},'梓潼县':{},'三台县':{},'盐亭县':{},'安县':{},'平武县':{},'江油市':{},'北川羌族自治县':{}},
'广元':{'利州区':{},'昭化区':{},'朝天区':{},'旺苍县':{},'青川县':{},'剑阁县':{},'苍溪县':{}},
'遂宁':{'船山区':{},'安居区':{},'射洪县':{},'蓬溪县':{},'大英县':{}},
'内江':{'市中区':{},'东兴区':{},'资中县':{},'隆昌县':{},'威远县':{}},
'乐山':{'市中区':{},'沙湾区':{},'五通桥区':{},'金口河区':{},'犍为县':{},'井研县':{},'夹江县':{},'沐川县':{},'峨眉山市':{},'峨边彝族自治县':{},'马边彝族自治县':{}},
'南充':{'顺庆区':{},'高坪区':{},'嘉陵区':{},'西充县':{},'南部县':{},'蓬安县':{},'营山县':{},'仪陇县':{},'阆中市':{}},
'眉山':{'东坡区':{},'彭山区':{},'仁寿县':{},'丹棱县':{},'青神县':{},'洪雅县':{}},
'宜宾':{'翠屏区':{},'南溪区':{},'宜宾县':{},'江安县':{},'长宁县':{},'高县':{},'筠连县':{},'珙县':{},'兴文县':{},'屏山县':{}},
'广安':{'广安区':{},'前锋区':{},'邻水县':{},'武胜县':{},'岳池县':{},'华蓥市':{}},
'达州':{'通川区':{},'达川区':{},'宣汉县':{},'开江县':{},'大竹县':{},'渠县':{},'万源市':{}},
'雅安':{'雨城区':{},'名山区':{},'荥经县':{},'汉源县':{},'石棉县':{},'天全县':{},'芦山县':{},'宝兴县':{}},
'巴中':{'巴州区':{},'恩阳区':{},'平昌县':{},'通江县':{},'南江县':{}},
'资阳':{'雁江区':{},'安岳县':{},'乐至县':{},'简阳市':{}},
'阿坝藏族羌族自治州':{'马尔康县':{},'金川县':{},'小金县':{},'阿坝县':{},'若尔盖县':{},'红原县':{},'壤塘县':{},'汶川县':{},'理县':{},'茂县':{},'松潘县':{},'九寨沟县':{},'黑水县':{}},
'甘孜藏族自治州':{'康定县':{},'泸定县':{},'九龙县':{},'道孚县':{},'炉霍县':{},'甘孜县':{},'新龙县':{},'德格县':{},'白玉县':{},'石渠县':{},'色达县':{},'理塘县':{},'巴塘县':{},'乡城县':{},'稻城县':{},'得荣县':{}},
'凉山彝族自治州':{'西昌市':{},'德昌县':{},'会理县':{},'会东县':{},'宁南县':{},'普格县':{},'布拖县':{},'昭觉县':{},'金阳县':{},'雷波县':{},'美姑县':{},'甘洛县':{},'越西县':{},'喜德县':{},'冕宁县':{},'盐源县':{},'木里藏族自治县':{}}
}
}
current_leval = china_map_dict #实现动态循环
parent_list = [] #把所有列表父级放进列表
while True:
for key in current_leval:
print(key)
choice = input('请输入>>>:').strip()
if len(choice) == 0:continue
if choice in current_leval:
parent_list.append(current_leval)
current_leval = current_leval[choice] #进入子级
elif choice == 'back':
if parent_list:
current_leval=parent_list.pop() #取出父级(上一级)
elif choice == 'quit':
print('程序已退出')
break
else:
print('无选项【%s】'%choice)
很简单,我就不演示了
总结:
1.上面的代码利用了列表的pop方法,加上循环,最巧妙的就是重新赋值,然后while又重新循环下去,类似递归用法。
2.一样很简单的对吧?下一章还有多级目录的升级版,所以不多说了,需要怎么优化也不用多说
题外话:有没有发现前面的项目和现在的项目结合起来,基本可以写一个功能较全的程序了,具体什么程序后面再详解了
洗礼灵魂,修炼python(78)--全栈项目实战篇(6)—— 多级目录菜单之地址管理系统的更多相关文章
- 洗礼灵魂,修炼python(75)--全栈项目实战篇(3)—— 账户注册登录管理系统
要求: 1.系统可以创建用户和登录用户,根据用户的输入不同,做出不同的反应(创建还是登录) 2.创建用户不能创建已存在的用户名 3.登录用户的操作最多只能有三次,超过三次冻结账户,每使用一次提示用户还 ...
- 洗礼灵魂,修炼python(82)--全栈项目实战篇(10)—— 信用卡+商城项目(模拟京东淘宝)
本次项目相当于对python基础做总结,常用语法,数组类型,函数,文本操作等等 本项目在博客园里其他开发者也做过,我是稍作修改来的,大体没变的 项目需求: 信用卡+商城: A.信用卡(类似白条/花呗) ...
- 洗礼灵魂,修炼python(73)--全栈项目实战篇(1)——【转载】前提准备之学习ubuntu
本篇是为项目实战做准备,学习Linux是必备的,不然都不好意思叫全栈对吧?下面是一位资深大神写的文章,够详细,我也不用浪费时间再写了 原文链接:Ubuntu学习——第一篇 内容: 一. Ubuntu简 ...
- 洗礼灵魂,修炼python(79)--全栈项目实战篇(7)—— 多级目录菜单之地址管理系统升级版
要求: 1.在上一篇的地址管理系统的基础上做升级改动 2.添加增删改的功能 3.尽量的贴近生活常识中的地址管理 分析: 需求不用多说了,干就完了 相关文件源码地址:github 这次由于要有增删改的操 ...
- 洗礼灵魂,修炼python(86)--全栈项目实战篇(12)—— 利用socket实现文件传输/并发式聊天
由于本篇博文的项目都很简单,所以本次开个特例,本次解析两个项目,但是都很简单的 项目一:用socket实现文件传输 本项目很简单,作为小项目的预热的,前面刚学完socket,这里马上又利用socket ...
- 洗礼灵魂,修炼python(80)--全栈项目实战篇(8)—— 计算器
用正则表达式开发一个计算器,计算用户给定的一串带有加减乘除的公式. 要求:不能使用eval转换字符串 分析: 要求简单,就是计算混合运算,但是不能使用eval直接转换,主要就是把整个式子中的小括号优先 ...
- 洗礼灵魂,修炼python(77)--全栈项目实战篇(5)—— ATM自动存取机系统
要求: 1.完成常识中的ATM存取款机功能 2.把ATM机故障考虑进去 3.不能直接输入账户名和卡号等等信息,模拟出插银行卡让ATM机自动读取卡信息 4.密码验证超过三次错误即锁定账户 5.操作类型有 ...
- 洗礼灵魂,修炼python(81)--全栈项目实战篇(9)—— 购物商城登录验证系统
都在线购物过吧?那么你应该体验过,当没有登录账户时,点开购物车,个人中心,收藏物品等的操作时,都会直接跳转到登录账户的界面,然后如果登录一次后就不用再登录,直到用户登出. 是的,本次项目就是做一个登录 ...
- 洗礼灵魂,修炼python(76)--全栈项目实战篇(4)—— 购物车系统
要求: 1.基本符合日常购物车的要求(根据你的想法开放性提升功能) 2.展示商品信息,并且可随时上新商品 3.用户购买每一样商品时都对所剩的钱做一次对比,如果够则提示“已购买”,如果不够提示“余额不足 ...
随机推荐
- [机器学习]回归--Polinomial Regression 多项式回归
首先我们需要明确一个概念,我们讨论的线性或者非线性针对的是自变量的系数,而非自变量本身,所以这样的话不管自变量如何变化,自变量的系数如果符合线性我们就说这是线性的.所以这里我们也就可以描述一下多项式线 ...
- Python机器学习笔记:常用评估指标的用法
在机器学习中,性能指标(Metrics)是衡量一个模型好坏的关键,通过衡量模型输出y_predict和y_true之间的某种“距离”得出的. 对学习器的泛化性能进行评估,不仅需要有效可行的试验估计方法 ...
- JQ-bootstrap我的开源前端框架
因为实在不知道写啥,所以迟迟没有相关的介绍.但是必须要积累过程资产,所以还是介绍一下,不定哪天就有人用了. 首先还是介绍遇到的问题,我是做传统后台管理系统的,公司赶时髦,要用boo ...
- TCP首部
TCP的首部格式 字段解释 源端口和目的端口 用于多路复用/分解来自或送到上层应用的数据 数据偏移 TCP中数据的开始处距离TCP报文段的起始位置有多远 == TCP报文段的首部长度 表示长度以32位 ...
- xargs原理剖析及用法详解
bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 学习这个xargs花了很长时间,在网上翻了很久也查了很多书关于 ...
- Squid实现正向代理及访问控制--技术流ken
Squid及正向代理简介 Squid cache(简称为Squid)是一个流行的自由软件,它符合GNU通用公共许可证.Squid作为网页服务器的前置cache服务器,可以代理用户向web服务器请求数据 ...
- sqoop安装及使用
简介: sqoop是一款用于hadoop和关系型数据库之间数据导入导出的工具.你可以通过sqoop把数据从数据库(比如mysql,oracle)导入到hdfs中:也可以把数据从hdfs中导出到关系型数 ...
- TCP三次握手与Tcpdump抓包分析过程
一.TCP连接建立(三次握手) 过程 客户端A,服务器B,初始序号seq,确认号ack 初始状态:B处于监听状态,A处于打开状态 A -> B : seq = x (A向B发送连接请求报文段,A ...
- 关于div容器在ie6下默认高度不为0(存在默认高度)
最近做项目的时候遇到一个问题,相信很多人都遇到过,就是在测试兼容性的时候,在ie6下小于12px 的背景的高度不等于原高,或许这样说你可能不是很明白,那就举个例子吧! 如图所示: 锯齿状的背景图本来是 ...
- Url的Base64编码以及解码
Base64可以将二进制转码成可见字符方便进行http传输,但是base64转码时会生成“+”,“/”,“=”这些被URL进行转码的特殊字符,导致两方面数据不一致.我们可以在发送前将“+”,“/”,“ ...