第二章 变量和简单数据类型
对于给定变量赋值,在程序中可以随时改变该变量值,而python将始终记录变量的最新值。
数据的类型:
字符串:用’’或者””括起来的都是字符串,字符串的常用函数:
方法Title(),通常用法:**.title()——首字母大写lower()——全部小写;upper()——全部大写
+,通常是用于合并字符串。
\t:制表符,用于在字符串前添加空格
\n:换行符,用于换行
\n\t:,用于换到下一行,并在下一行开头添加一个制表符
方法Rstrip():删除字符串末尾的空白,该删除是暂时的
Lstrip():删除字符串开头的空白
Strip():删除字符串两端的空白
数据:
整数,可对整数执行加(+)减(-)乘(*)除(/)运算。
浮点数,
对于数字有时需要用str()方法来避免类型错误
第三章 列表
names=[,,,,]
列表形式:[,,,,],列表中可以放任何元素。列表是从0开始索引,列表末的索引一般为-1,列表的命名最好是带s。
对列表进行修改:
修改列表元素:可以直接对指定元素进行修改,例如:names[2]=’****’
列表中添加元素:1.可以利用append()方法在列表最后添加元素,例如names.append(‘****’)
2.利用insert()方法在列表的指定位置添加元素,例如names.insert(2,’****’)
列表中删除元素:1.del语句删除!指定位置的元素,例如del names[2](首次出现语句用法)
2.使用方法pop()删除列表指定位置的元素(默认值为列表最末元素),并将该元素返回给pop(),所以 pop()是一个有值返回的方法。例如:pop_name=names.pop(2)
3.删除特定已知的元素,直接使用方法remove()。例如:names.remove(‘**’),值得注意的是,当特定元素出 现多次,remove()仅删除第一个出现的值,因此全部删除需要使用for循环
组织列表:1.对列表按字母顺序排列,并且该排列改变是永久的,可使用sort()方法。例如:names.sort(),names.sort(reverse=True),表示按字母的反顺序排列
2.对列表进行暂时性更改,使用的是sorted()函数!sorted(names)
请注意方法与函数的调用方式不同!书中对该部分并没有详细解释!方法的调用是name.sort(),而函数的调用方法是sorted(names)。并且函数与方法的作用域并不相同:以sort()和sorted()为例,sort()对列表的改变是永久性的,sorted()的改变是暂时性的。但是对于该问题在后续的自定义函数上还存在问题!
3.倒着打印函数,使用方法reverse,例如:names.reverse(),print(names)
4.确定列表的长度:使用函数len()确定列表长度,其将返回列表长度。
第四章 操作列表
names=[,,,,]
遍历列表:for循环例如:for name in names:
利用函数创建数值列表:1.range()函数回生成一系列数字,例如range(1,10)表示会返回从1到9一系列数字,即返回(1,2,3,4,5,6,7,8,9),注意range返回的数值是到第二个数值即10前的一位数;
2.list()函数可以直接将range()函数的结果直接转换为列表,即list(range(1,10))返回的将是[1,2,3,4,5,6,7,8,9]
列表切片:对于列表,想仅仅使用列表的一部分可以使用切片,格式如下:names[1:4]表示仅取names列表中的索引1-3的数字!(格外注意,表示在第二个值终止,只能取到第二个值-1的索引)其中names[:4]默认从第0个索引开始取;而names[1:]表示取到末尾所有元素
利用切片可以复制列表:令name_copy=names[:],对names列表建立了独立副本,因此与直接=赋值不同,不具有一致性
元组:不可变的列表函数:dimensions=(200,50)表示不可变列表函数,因此不能通过demensions(0)=500来改变第一个元素,但可以通过直接修改来改变这个函数,例如:demensions=(100)
第五章 if语句
if语句的判断:if语句后续条件如果满足,则会返回true,从而执行条件后的语句,如果不满足则会返回false,执行else后的语句。这种要么返回True要么返回False的语句被称为布尔表达式。
判断类别:
第九章
学会如何创建类,使用class创建类,使用方法__init__定义类的形参,其中__init__中必定包括self这一形参,因为self会接受实例的所有实参,在将其传递到具体实参。
创建类中,可以设定默认值,通过在__init__()方法中设定默认值,有两种方法,第一通过self.属性=默认值设定,也可以直接在__init__()中设定直接将属性=默认值;之后可以直接通过具体实例.属性=其他值修改默认值,也可以在类中设定方法,修改默认值:
def 方法(self,值):
self.属性=值
创建类后,可创建相应实例,通过句点.可以访问实例的属性、调用相关方法。
类是可以直接继承,继承时要注意原类要包含在其中,具体继承方法:
Class 子类(父类):
def__init__(self,子类属性):
supre ().__init__(子类属性)
其中最值得注意的是super()方法,其使子类可以调用父类的方法
子类可以单独增加属性及方法,也可以重写父类方法,只需定义相同的方法名称,能够覆盖父类方法;
同时注意到可以将实例用作属性,也就是定义某个属性为一个类的实例:
self.battery=Battery()
调用该参数时是调用该实例,因此需要指明具体的方法:my_car.battery.describe_battery().
类可以构成模块,在具体实例中可以通过:from car import Car, 该语句可以从car模块中倒入Car类,该方法不仅可以在实例中导入类,也可以在模块中导入模块。
该方法为面向对象编程。
第十章
本章学习从指定路径中读取文件、写入文件。对应语句为:withopen(filename,’w’) as file:
其中’w’、’a’、’r’分别对应写入模式、附加模式、读取模式,如果没有这个参数则默认读取模式。As 后的file作为对象,在with模块下使用该名称表明直接对该文件进行了编辑。
其中如若编辑的对象位置与.py位置一致,则filename=’*.txt’;如果是在.py的位置的文件夹中,则filename=’wenjianjia\*.txt’
在只读模式下,常用的函数有:read()——是指读取文件的全部内容,由于read()会返回到达文件末尾返回一个空字符串,所以经常结合rstrip()使用
Readline():从文件中读取每一行,并将其储存在一个列表中,这表明readline()返回的是一个以文件每一行为元素的列表
在写入模式下,常用的函数有:write():将字符串写入文件,python只能将字符串写入文本文件,注意在write中加入换行符\n
本章学习如何在出现异常时继续运行,而不是报错,即处理异常。通过try—except—else来进行异常处理。
Try:后面接着有可能出现异常的python语句
Except ZeroDivisionError:except后跟着例外的事项,之后在该模块下跟着例外情况或者说出现制定异常下应该进行的处理,pass或者别的
Else:不一定会使用,表明在try代码块成功执行下的代码。
本章学习引用模块,之后进行储存或者下载数据。
引用json模块:import json,之后就可以进行下载或者储存数据库
储存数据库:json.dump(要储存的数据,可用于储存数据的文件对象),这一般会配合着with…open使用,要储存的数据可以是字符串、列表
下载数据:json.load(下载的文件名称),其返回数据。
本章学习了一些处理方法:
Try—except—else与while相结合;
分析文本,通过方法split()以空格为分隔符将字符串分拆程多个部分,并将这些部分都储存到一个列表中。
保存和读取用户生成的数据。
第13章
单元测试:针对某个函数,用于核实函数某个方面没有问题
测试用例是一组单元测试,这些测试和在一起核实函数在各种情形下的行为都符合要求。
步骤:引入模块unittest:import unittest
引入要检测的函数:from **.py import **(函数名称)
引用单元检测的类:class **TestCase(unittest.TestCase): 其中子类的命名可以随意,但最好包含test
测试函数的一个方面:def test_**(self):
(要注意一定要以Test开头,这样运行该PY文件时会自动运行test开头的部分))
之后可以给要监测的部分以实参
Self.assertEqual(函数给于实参后的运行结果,‘本应运行结果’)该方法为断言方法,用于核实函数结果与期待结果是否一致
运行文件中的测试:unittest.main()
具体实例:
import unittest
from name_function importget_formatted_name
class NamesTestCase(unittest.TestCase):
"""测试name_function.py"""
def test_first_last_name(self):
"""能够正确地处理像Janis
Joplin这样的姓名吗?"""
formatted_name= get_formatted_name('janis', 'joplin')
self.assertEqual(formatted_name, 'JanisJoplin')
unittest.main()
对类进行测试
与对函数进行测试大体是相同的,首先要增加对多个断言方法:
assertEqual(a,b),判断A=B
assertNotEqual(a,b),判断A!=B
assertTure(X),判断X是否为ture
assertFalse(X),判断X是否为false
assertIn(item,list),核实item在list中
assertNotIn(item,list),核实item不在list中
其次增加了setUp()方法,setUp()会率先被运行,然后在运行以test打头的方法,setUp完成两件事:第一,给类以具体参数,二,给类参数以变量。由于该方法中的变量需在后续中使用,因此必须在变量前加self.以确保能够将变量储存在属性中。
import unittest
from survey import AnonymousSurvey
classTestAnonymousSurvey(unittest.TestCase):
"""针对AnonymousSurvey类的测试"""
def setUp(self):
"""
创建一个调查对象和一组答案,供使用的测试方法使用
"""
question = "What language did you first learn to speak?"
self.my_survey = AnonymousSurvey(question)(给于要测试的类具体参数)
self.responses = ['English', 'Spanish','Mandarin'](给于参数变量)
deftest_store_single_response(self):
"""测试单个答案会被妥善地存储"""
self.my_survey.store_response(self.responses[0])
self.assertIn(self.responses[0], self.my_survey.responses)
def test_store_three_responses(self):
"""测试三个答案会被妥善地存储"""
for response in self.responses:
self.my_survey.store_response(response)
for response in self.responses:
self.assertIn(response, self.my_survey.responses)