路飞学城-Python开发-第二章
'''
数据结构: menu = {
'北京':{
'海淀':{
'五道口':{
'soho':{},
'网易':{},
'google':{}
},
'中关村':{
'爱奇艺':{},
'汽车之家':{},
'youku':{},
},
'上地':{
'百度':{},
},
},
'昌平':{
'沙河':{
'老男孩':{},
'北航':{},
},
'天通苑':{},
'回龙观':{},
},
'朝阳':{},
'东城':{},
},
'上海':{
'闵行':{
"人民广场":{
'炸鸡店':{}
}
},
'闸北':{
'火车战':{
'携程':{}
}
},
'浦东':{},
},
'山东':{},
} 需求:
可依次选择进入各子菜单
可从任意一层往回退到上一层
可从任意一层退出程序
所需新知识点:列表、字典
'''
# 1.只用一个while循环,且整体代码量少于15行按完成需求/条—25分
# 2.只用一个while循环,且整体代码量多于15行需求全部完成给90分
# 3.其他情况按完成需求/条—20分 menu = {
'北京':{
'海淀':{
'五道口':{
'soho':{},
'网易':{},
'google':{}
},
'中关村':{
'爱奇艺':{},
'汽车之家':{},
'youku':{},
},
'上地':{
'百度':{},
},
},
'昌平':{
'沙河':{
'老男孩':{},
'北航':{},
},
'天通苑':{},
'回龙观':{},
},
'朝阳':{},
'东城':{},
},
'上海':{
'闵行':{
"人民广场":{
'炸鸡店':{}
}
},
'闸北':{
'火车战':{
'携程':{}
}
},
'浦东':{},
},
'山东':{},
}
new_menu = menu
menu_list = []
while True:
print('Here is Ur menu')
for k in new_menu:print(k)
order = input('please input your order(choice or B(b) or Q(q))>>>').strip()
if order not in new_menu and order.lower()!= 'q' and order.lower()!= 'b':continue
if order in new_menu:
menu_list.append(new_menu)
new_menu = new_menu[order]
if order.lower() == 'q':break
if order.lower() == 'b'and len(menu_list)!=0:
new_menu = menu_list.pop()
else:print('It is already the top!')
三级菜单
1.程序是数据和算法的结合(名词是数据,动词是算法)
2.尽量少的处理文件或者操作数据库
3.数据结构设计的好坏,直接影响了算法的实现复杂度
4.应不断的优化自己的代码,阅读他人的优秀的思路
##################################################################
#文件操作的其他方法 ##############################################################################
#文件的内置操作函数
# 1.closed 查看文件是否是关闭的状态,输出为布尔值,关闭的为True,未关闭的为False
# 2.encoding表示编码的形式,函数方法打开的编码形式
# print(f.encoding)
# cp936
#************************************************************************
#不知道文件编码是什么形式的情况下,还是要写文件或读文件的信息,处理办法:
#用拉丁文的方式打开文件latin-1
# f = open('test','r+',encoding='latin-1')#尽可能多的保留数据
# data = f.read()
# print(data)
# f.write('aaaaaaaa')
#文件的编码获取的是系统的默认编码
# f = open('test','r+',encoding='UTF-8')
# f.flush()#刷新,使用这个命令就会保存文件
# f.isatty()#终端设备
# print(f.tell())
# f.readline()
# f.readline()
# print(f.tell())#光标的当前位置
#newline=''就是不要python自带的屏蔽参数
#文件内光标的移动:除了read()代表读取3个字符,其余的文件内光标的移动都是以字节为单位,如seek、tell、read
# f.seek(3)
# print(f.read())
# 456
# 789
# opqsdasdnagaaaaaaaaaaaaaaaa
# print(f.read(5))
# 123
# 4
# f.truncate(10)#文件截断,属于文件的切割写操作
# print(f.truncate(10))
#####################################################################
# f = open('test','rb')
# print(f.tell())
# f.seek(10)
# print(f.tell())
# f.seek(3)
# print(f.tell())
#seek的移动光标默认是从0的位置开始移动
#############################################################
#seek的几种用法
#1.必须为'rb'模式才可以使用
#参数1为接指定上一次光标后的位置
#参数2为倒序,从结尾开始的光标,前面的顺序必须为负数的形式
# print(f.tell())
# f.seek(-1,2)
# print(f.tell())
# f.seek(3,1)
# print(f.tell())
#################################################################################################################
#高端玩法:打开大文件的最后一行
# f = open('test','rb')
# for i in f:
# offs = -5#偏移量需要自己估计,最后一行大约有多少个字节
# while True:#做一个死循环
# f.seek(offs,2)
# rows = f.readlines()#从当前光标位置开始读取一行的所有内容
# if len(rows) > 1:#如果文件读取的行数超过1行,则打印最后一行
# print('文件的最后一行是%s'%(rows[-1].decode('UTF-8')))
# break
# offs*=2
# 文件的最后一行是+---------------------------------------------------------------------------+
#***************************************************************************************************************#
# 什么是递归?
# 函数自己调用自己的方法就是递归
# 什么是迭代?
# 可以被for循环遍历的,每次循环得到的结果都是上一次的结果得出的
# 什么是迭代器协议?
# 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个Stoplteration异常,
# 以终止迭代(只能往后不能往前退)
# 2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个_iter_()方法)
# 3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环、sum、min、max函数等)使用迭代器协议访问对象
# l = [1,2,3,4]
# for i in l:
# print(i)
######################Python的for循环机制##########################################################
# for循环的本质:循环所有的对象,全都是使用迭代器协议
#(字符串、列表、元祖、字典、集合、文件对象)这些都不是可迭代对象,只不过在for循环式,调用了内部的_iter_方法,变成了可迭代对象
# 然后for循环调用可迭代对象的_next_方法去取值,而且for循环会捕捉Stoplteration异常,以终止迭代
# l = [1,2,3,4]
# for i in l: #1.先执行_iter_(),再执行next方法
# print(i) #捕捉了异常,不再迭代
# l = [1,2,3,4]
# iter = l.__iter__()#遵循迭代器协议,生成可迭代对象
# print(iter.__next__())
# print(iter.__next__())
# print(iter.__next__())
# print(iter.__next__())
# l = [1,2,3,4]
# index = 0
# while index<len(l):
# print(l[index])
# index+=1
# 1
# 2
# 3
# 4
路飞学城-Python开发-第二章的更多相关文章
- 路飞学城-Python开发-第一章
# 基础需求: # 让用户输入用户名密码 # 认证成功后显示欢迎信息 # 输错三次后退出程序 username = 'pandaboy' password = ' def Login(username ...
- 路飞学城-Python开发集训-第3章
学习心得: 通过这一章的作业,使我对正则表达式的使用直接提升了一个level,虽然作业完成的不怎么样,重复代码有点多,但是收获还是非常大的,有点找到写代码的感觉了,遗憾的是,这次作业交过,这次集训就结 ...
- 路飞学城-Python开发集训-第1章
学习体会: 在参加这次集训之前我自己学过一段时间的Python,看过老男孩的免费视频,自我感觉还行,老师写的代码基本上都能看懂,但是实际呢?....今天是集训第一次交作业的时间,突然发现看似简单升级需 ...
- 路飞学城-Python开发集训-第4章
学习心得: 学习笔记: 在python中一个py文件就是一个模块 模块好处: 1.提高可维护性 2.可重用 3.避免函数名和变量名冲突 模块分为三种: 1.内置标准模块(标准库),查看所有自带和第三方 ...
- 路飞学城-Python开发集训-第2章
学习心得: 这章对编码的讲解超级赞,现在对于编码终于有一点认知了,但还没有大彻大悟,还需要更加细心的琢磨一下Alex博客和视频,以前真的是被编码折磨死了,因为编码的问题而浪费的时间很多很多,现在终于感 ...
- 路飞学城-Python开发-第三章
# 数据结构: # goods = [ # {"name": "电脑", "price": 1999}, # {"name&quo ...
- 路飞学城-Python开发集训-第5章
面向过程:核心是过程二字,过程是解决问题的步骤,相当于设计一条流水线,是机械式的思维方式 优点:复杂的问题流程化,进而简单化 缺点:可扩展性差 面向对象:核心是对象二字,对象就是特征与技能的结合体. ...
- 路飞学城—Python爬虫实战密训班 第二章
路飞学城—Python爬虫实战密训班 第二章 一.Selenium基础 Selenium是一个第三方模块,可以完全模拟用户在浏览器上操作(相当于在浏览器上点点点). 1.安装 - pip instal ...
- 路飞学城—Python爬虫实战密训班 第三章
路飞学城—Python爬虫实战密训班 第三章 一.scrapy-redis插件实现简单分布式爬虫 scrapy-redis插件用于将scrapy和redis结合实现简单分布式爬虫: - 定义调度器 - ...
随机推荐
- 优动漫PAINT中设置横排文字
初次启动优动漫PAINT使用文本工具时,软件默认是直排文字效果,如果您想更改为横排文字,或者切换横排竖排文本,如何设置,本文做简单介绍. 在工具箱中单击“文本工具”. 在绘图页面的任意位置单击鼠标,输 ...
- HDU1061 - Rightmost Digit
Given a positive integer N, you should output the most right digit of N^N. Input The input contains ...
- Lvs+heartbeat高可用高性能web站点的搭建
这是我们公司在实际的生产环境当中使用的一套东西,希望对大家有所帮助(实际的公网ip,我已经做了相应的修改): 说明:每台服务器需要有两块网卡:eth0连接内网的交换机,用私网ip,实现服务器间内部访问 ...
- 新手须知 QT类大全
QT类大全,在行内容中罗列出来了,希望大家多看看,如果是API就更好了,但可惜不是.这些是一些大类,请多做参考. QApplication 应用程序类 QLabel 标签类 QPushButton 按 ...
- (转)redis源代码分析 – event library
每个cs程序尤其是高并发的网络服务端程序都有自己的网络异步事件处理库,redis不例外. 事件库仅仅包括ae.c.ae.h,还有3个不同的多路复用(本文仅描述epoll)的wrapper文件,事件库封 ...
- WinServer-win7通过powershell操作AD-从接触到放弃
额....我想在win7上练习AD的powershell命令 看了这篇帖子,他们说在WIN7上没法导入powershell的模块,只能在SERVER 上弄 https://social.technet ...
- $.ajax() 获取不到return 返回值
/*常见错误示例 直接在 ajax 里面return 结果 */ function demo(){ $.ajax({ url : 'test.do', type : "post", ...
- 自己定义控件-MultipleTextView(自己主动换行、自己主动补齐宽度的排列多个TextView)
一.功能: 1.传入一个 List<String> 数组,控件会自己主动加入TextView,一行显示不下会自己主动换行.而且把上一行末尾的空白通过拉伸而铺满. 2.配置灵活 <co ...
- 鸟哥的Linux私房菜-----11、压缩指令与正则表示法
- eclipse project文件夹下 删除不掉文件夹或者文件的解决的方法
对于新手来说,有时操作失误就会导致eclipse文件夹中的某些子文件夹或者文件无法删除. 这种原因是,在project文件夹中(不是eclipse上显示的.是真实的物理磁盘上的)这个文件夹或者文件已经 ...