Head first python前六章小结
看这本Head first python已经有十几天了,到第七章开始讲Web开发、移动应用开发,后半年我主要是想往后端的方向发展,所以这本书暂时告一段落。这篇博客没有太多的注释,主要是内容比较简单,只是形式我看着可以借鉴,anyway!!
1.有四个文件,内容是姓名、出生日期、跑步成绩,要处理这些数据,得到这种数据--姓名+成绩前三:
sarah.txt
Sarah Sweeney,2002-6-17,2:58,2.58,2:39,2-25,2-55,2;55,2:54,2.18,2:55,2:55
james.txt
Janmes Hehe,2001-5-12,2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22
julie.txt
Julie Xixi,2003-07-29,2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21
mikey.txt
Mikey Tree,2004-01-22,2:22,3.01,3:01,3.02,3:02,3.02,3:22,2.49,2:38
2.各函数作用:
经过get_coach_data()处理后的数据:
['Sarah Sweeney', '2002-6-17', '2:58', '2.58', '2:39', '2-25', '2-55', '2;55', '2:54', '2.18']
sanitize()函数将格式规范,set()将列表变为一个集合并去重:
{'2.15', '2.25', '2.18', '2.58', '2.54', '2.39', '2.55'}
3.我觉得这里的返回很有意思,万物都可返回。
返回一个列表:return data.strip().split(',')
返回一个字典:return {'Name': templ.pop(0),'DOB': templ.pop(0)}
返回一个对象:return Athlete(templ.pop(0),templ.pop(0),templ)
4.返回一个字典时的代码:
def sanitize(time_string):
if '-' in time_string:
splitter = '-'
elif ':' in time_string:
splitter = ":"
else:
return (time_string)
mins, secs = time_string.split(splitter)
return mins + '.' + secs def get_coach_data(filename):
try:
with open(filename) as f:
data = f.readline()
templ = data.strip().split(',')
return {'Name': templ.pop(0),
'DOB': templ.pop(0),
'Times': str(sorted(set([sanitize(t) for t in templ]))[0:3])
}
except IOError as ioerr:
print('File error: ' + str(ioerr))
return None
sarah = get_coach_data('sarah.txt')
print("sarah", sarah)
# sarah_name, sarah_dob = sarah.pop(0), sarah.pop(0)
print("sanitize处理之后", [sanitize(t) for t in sarah])
print(sarah['Name'] + "'s fastest times are: " + sarah['Times'])
5.自定义一个类:
class Athlete:
def __init__(self, a_name, a_dob=None, a_time=[]):
self.name = a_name
self.dob = a_dob
self.times = a_time def top3(self):
return sorted(set([sanitize(t) for t in self.times]))[0:3] def add_time(self, time_value):
self.times.append(time_value) def add_times(self, list_of_times):
self.times.extend(list_of_times) def get_coach_data(filename):
try:
with open(filename) as f:
data = f.readline()
templ = data.strip().split(',')
return Athlete(templ.pop(0),templ.pop(0),templ)
except IOError as ioerr:
print('File error: ' + str(ioerr))
return None sarah = get_coach_data('sarah.txt')
# 将sarah.top3()转换为字符串是因为,列表不能加减
print(sarah.name + "'s fastest times are: " + str(sarah.top3()))
vera = Athlete('Vera vi')
vera.add_time('1.31')
print(vera.top3())
vera.add_times(['2.22', "1-21"])
print(vera.top3())
6.继承list类:
def sanitize(time_string):
if '-' in time_string:
splitter = '-'
elif ':' in time_string:
splitter = ":"
else:
return (time_string)
mins, secs = time_string.split(splitter)
return mins + '.' + secs class AthleteList(list):
def __init__(self,a_name,a_dob=None,a_times=[]):
list.__init__([])
self.name = a_name
self.dob = a_dob
self.extend(a_times) def top3(self):
return sorted(set([sanitize(t) for t in self]))[0:3] vera = AthleteList('Vera vi')
vera.append('1.31')
print(vera.top3())
vera.extend(['1.33', '2.66', '3.44','5.22'])
print(vera, vera.top3())
Head first python前六章小结的更多相关文章
- 简学Python第六章__class面向对象编程与异常处理
Python第六章__class面向对象编程与异常处理 欢迎加入Linux_Python学习群 群号:478616847 目录: 面向对象的程序设计 类和对象 封装 继承与派生 多态与多态性 特性p ...
- Python第六章 面向对象
第六章 面向对象 1.面向对象初了解 面向对象的优点: 1.对相似功能的函数,同一个业务下的函数进行归类,分类 2.类是一个公共的模板,对象就是从具体的模板中实例化出来的,得到对象就得到一 ...
- C Primer Plus 学习笔记 -- 前六章
记录自己学习C Primer Plus的学习笔记 第一章 C语言高效在于C语言通常是汇编语言才具有的微调控能力设计的一系列内部指令 C不是面向对象编程 编译器把源代码转化成中间代码,链接器把中间代码和 ...
- Python第六章-函数01-函数的概念和使用
函数 为了便于程序的维护和更好的实现模块化,好的程序都会分解为很多函数. 可以这么说,对于任何的编程语言,函数都是一个非常重要的概念. python 不仅简化了函数的定义过程,而且还大量借鉴了其他函数 ...
- python第六章:三大利器(装饰器,迭代器,生成器)--小白博客
python装饰器 什么是装饰器?在不修改源代码和调用方式的基础上给其增加新的功能,多个装饰器可以装饰在同一个函数上 # 原理(个人理解):将原函数(bar)的内存地址重新赋值,进行覆盖.新值为装饰器 ...
- Python第六章-函数04-递归函数和拉姆达表达式
五.递归函数 什么叫递归(recusive)? 你拿两个镜子互相面对着, 然后去看镜子, 会发现每个镜子中很多个镜子, 层层的嵌套, 无穷尽, 这就是一种递归! 从前有坐山, 山里有座庙, 庙里有个老 ...
- Python第六章-函数06-高阶函数
函数的高级应用 二.高阶函数 高级函数, 英文叫 Higher-order Function. 那么什么是高阶函数呢? 在说明什么是=高阶函数之前, 我们需要对函数再做进一步的理解! 2.1 函数的本 ...
- Python第六章(北理国家精品课 嵩天等)
一 1.集合类型定义及其操作: 集合用{}表示,元素用逗号分隔,无序,唯一 集合操作符: |:并 -:减 &:交 ^ :补 <= <:判断子集关系 >= >:判断包含关 ...
- Python第六章-函数02-函数的作用域
函数 三.作用域规则 有了函数之后,我们必须要面对一个作用域的问题. 比如:你现在访问一个变量,那么 python 解析器是怎么查找到这个变量,并读取到这个变量的值的呢? 依靠的就是作用域规则! 3. ...
随机推荐
- Ubuntu12.04安装Chrome浏览器,并添加到左侧的启动栏
在google官网下载google chrome deb包,有32位和64位之分: 怎么判断系统是32位还是64位的,可以用以下代码: ; int *p = &a; printf(" ...
- 字符串数组 输入3个字符串,要求按由小到大的字母顺序输出; 输入n个学生的姓名和学号到字符串数组中,在输入一个姓名,如果班级有该生则返回其信息,否则返回本班无此人
输入3个字符串,要求按由小到大的字母顺序输出 如 输入franch england china,输出结果是china england franch 三个数排序输出,比较三个数的大小怎么做? a=18 ...
- ios调试小结
Xcode底部的小黑盒是我们调试时的好朋友,它可以输出日志信息.错误信息以及其他有用的东西来帮你跟踪错误,除了可以看到日志直接输出的信息外,我们编程过程中也可以在某些断点停留,来检查app的多个方面. ...
- Codeforces Round #510 #A
http://codeforces.com/contest/1042/problem/A 题目大意就是: 现在公园里有n个长椅(要多长有多长),第i个长椅上有a[i]个人(泰山崩于前而不乱),现在又有 ...
- 【DB_MySQL】 limit——取查询结果的子集
语法:select * from student limit beginIndex,length; 这里结果集的下标同数组一样从0开始,beginIndex表示起始位置,length表示从beginI ...
- Python自动化测试框架——数据驱动(从代码中读取)
今天小编要介绍的是数据驱动最简单和最常用的一种方法,由于只是介绍方法,代码操作后的美观程度略有缺陷,介意者可以自行改动 还是以163邮箱登录为例: 设计一个存放数据的类,这个类的参数是我们需要修改的数 ...
- 【Linux】用户与权限
追加用户组 groupadd 用户组名 追加新用户 useradd -d 指定用户目录 -s 指定用户使用shell -g 指定用户组 -p 指定用户密码 用户名 更改用户 添加用户到其他组 use ...
- 蓝牙学习(3) Linux kernel部分Bluetooth HCI分析
在上文,https://blog.csdn.net/feiwatson/article/details/81712933中主要理解了在Kernel中USB adapter是如何实现USB设备驱动,以及 ...
- ARM MMU
关于MMU,以下几篇文章写得通俗易懂: s3c6410_MMU地址映射过程详述 追求卓越之--arm MMU详解 基于S3C6410的ARM11学习(十五) MMU来了 这里总结MMU三大作用: 1. ...
- ubuntu14.04安装搜狗拼音以及Google-chrome
安装搜狗拼音 1.进入https://pinyin.sogou.com/linux/选择合适版本下载: 2.直接打开deb包进行安装: 3.安装完成后,打开系统设置中语言支持选项,在键盘输入方式系统中 ...