第一部分:基础知识
学习python想要做的软件
1.开机答题软件,(电脑一开机的输入密码,改为答题,初步设定为选择题,答对了才可以进入。)
2.
第二章
2.1第一个程序:
print("Hello Python World!")
2.2变量
命名:只能包含字母,数字,下划线,不能数字打头,不能有空格,不能用关键字,应简短有效
注意:使用小写的python变量名比较好。
方法:可对数据进行的操作。 格式为:变量名.方法名() 例: name.title()
2.3字符串
格式:python中,用括号括起来的都是字符串,单引号和双引号都行。
修改大小写:
title()以首字母大写的方式显示每个单词,即将每个单词的首字母改为大写。
upper() 全部大写
lower() 全部小写
拼接字符串:
用+相连: "hello," + "world"
空白:非打印字符,包括 空格,制表符 ,换行符
删除空白:
去掉开头的空白:lstrip()
去掉结尾的空白:rstrip()
去掉两端的空白:strip()
2.4数字
运算:+ - * / ** 备注:两个乘号(**)表示乘方运算
将数字转为字符串: str(11)
在python3中,可以直接运算,一般都对,在python2中则要考虑浮点数和整数的区别。
2.5注释
单行注释: #这是注释
多行注释: '''这是注释'''
import this
1.开机答题软件,(电脑一开机的输入密码,改为答题,初步设定为选择题,答对了才可以进入。)
2.
第二章
2.1第一个程序:
print("Hello Python World!")
2.2变量
命名:只能包含字母,数字,下划线,不能数字打头,不能有空格,不能用关键字,应简短有效
注意:使用小写的python变量名比较好。
方法:可对数据进行的操作。 格式为:变量名.方法名() 例: name.title()
2.3字符串
格式:python中,用括号括起来的都是字符串,单引号和双引号都行。
修改大小写:
title()以首字母大写的方式显示每个单词,即将每个单词的首字母改为大写。
upper() 全部大写
lower() 全部小写
拼接字符串:
用+相连: "hello," + "world"
空白:非打印字符,包括 空格,制表符 ,换行符
删除空白:
去掉开头的空白:lstrip()
去掉结尾的空白:rstrip()
去掉两端的空白:strip()
2.4数字
运算:+ - * / ** 备注:两个乘号(**)表示乘方运算
将数字转为字符串: str(11)
在python3中,可以直接运算,一般都对,在python2中则要考虑浮点数和整数的区别。
2.5注释
单行注释: #这是注释
多行注释: '''这是注释'''
import this
第三章 列表简介
3.1列表
定义:一系列按特定顺序排列的元素
格式:用方括号表示列表,并用逗号来分割其中的元素
例:bicycles = ['trek','cannondale','redline','specfalized']
访问:列表是有序集合,通过索引访问,索引从0开始,-1返回最后一个元素
例:bicycles = ['trek','cannondale','redline','specfalized']
print(bicycles[0])
3.2操作列表
motorcycles = ['honda','yemaha','suzuki']
修改: motorcyctes[0] = 'ducati'
添加:
末尾追加:append() motorcycles.append('ducati')
中间插入:insert() motorcycles.insert(0,'ducati')
删除:
直接去掉:del del motorcycles[0]
取出末尾的元素:pop() motorcycle = motorcycles.pop()
取出任一位置元素:pop() motorcycle = motorcycles.pop(1)
根据值删除:remove() motorcycles.remove('ducati')
3.3列表排序
永久排序: 字母正序:sort() 字母倒序:sort(reverse=True) 例:list.sort()
临时排序: 字母正序:sorted() 字母倒序:sorted(reverse=True) 例:list.sorted()
反转排序: reverse() 例:reverse(list)
获取长度: len() 例:len(list)
第四章 操作列表
4.1 遍历
for循环:增强for循环和普通for循环
例: for name in names:
print(name)
or: for i in range(0,len(names)):
print(names[i])
4.2 注意事项
命名:尽量用单数和复数,好区别:如 for cat in cats:
缩进:for循环中执行的代码必须缩进,才能正常循环。
冒号:for循环语句的冒号是标识循环开始的,必须有。
4.3数值列表
列表很适合存储数字集合。
一个范围: range(m,n) 注:m-开始 n-结尾 含头不含尾
指定步长: range(m,n,x) 注:m-开始 n-结尾 x-步长 含头不含尾
装换为列表:numbers = list(range(1,6))
统计函数:
digits = [1,2,3,4,5,6,7,8,9,0]
min(digits)
max(digits)
sum(digits)
列表解析: 用一行代码生成列表
例: aquares = [value for value in range(0,10)]
4.4 切片
定义:通过指定索引,获取列表的一个子集
players = ['charles','martina','michael','florence','eli']
players[0:3],players[1:4],players[:3],players[2:],players[-3:],players[:]
遍历:for player in players[:3]:
复制列表:创建一个包含整个列表的切片 [:]
my_foods = ['pizza','falafel','carrot cake']
friend_foods = my_foods[:]
4.5 元组
定义:不可修改的列表,用圆括号()来包裹标识. dimensions = (200,50)
遍历:for dimension in dimensions:
修改元组变量:重新给变量赋值
3.1列表
定义:一系列按特定顺序排列的元素
格式:用方括号表示列表,并用逗号来分割其中的元素
例:bicycles = ['trek','cannondale','redline','specfalized']
访问:列表是有序集合,通过索引访问,索引从0开始,-1返回最后一个元素
例:bicycles = ['trek','cannondale','redline','specfalized']
print(bicycles[0])
3.2操作列表
motorcycles = ['honda','yemaha','suzuki']
修改: motorcyctes[0] = 'ducati'
添加:
末尾追加:append() motorcycles.append('ducati')
中间插入:insert() motorcycles.insert(0,'ducati')
删除:
直接去掉:del del motorcycles[0]
取出末尾的元素:pop() motorcycle = motorcycles.pop()
取出任一位置元素:pop() motorcycle = motorcycles.pop(1)
根据值删除:remove() motorcycles.remove('ducati')
3.3列表排序
永久排序: 字母正序:sort() 字母倒序:sort(reverse=True) 例:list.sort()
临时排序: 字母正序:sorted() 字母倒序:sorted(reverse=True) 例:list.sorted()
反转排序: reverse() 例:reverse(list)
获取长度: len() 例:len(list)
第四章 操作列表
4.1 遍历
for循环:增强for循环和普通for循环
例: for name in names:
print(name)
or: for i in range(0,len(names)):
print(names[i])
4.2 注意事项
命名:尽量用单数和复数,好区别:如 for cat in cats:
缩进:for循环中执行的代码必须缩进,才能正常循环。
冒号:for循环语句的冒号是标识循环开始的,必须有。
4.3数值列表
列表很适合存储数字集合。
一个范围: range(m,n) 注:m-开始 n-结尾 含头不含尾
指定步长: range(m,n,x) 注:m-开始 n-结尾 x-步长 含头不含尾
装换为列表:numbers = list(range(1,6))
统计函数:
digits = [1,2,3,4,5,6,7,8,9,0]
min(digits)
max(digits)
sum(digits)
列表解析: 用一行代码生成列表
例: aquares = [value for value in range(0,10)]
4.4 切片
定义:通过指定索引,获取列表的一个子集
players = ['charles','martina','michael','florence','eli']
players[0:3],players[1:4],players[:3],players[2:],players[-3:],players[:]
遍历:for player in players[:3]:
复制列表:创建一个包含整个列表的切片 [:]
my_foods = ['pizza','falafel','carrot cake']
friend_foods = my_foods[:]
4.5 元组
定义:不可修改的列表,用圆括号()来包裹标识. dimensions = (200,50)
遍历:for dimension in dimensions:
修改元组变量:重新给变量赋值
4.6 代码编写格式指南
PEP8
缩进:4个空格
行长: 不超过80字符
注释行长不超过72字符
空行:分割代码块
PEP8
缩进:4个空格
行长: 不超过80字符
注释行长不超过72字符
空行:分割代码块
第五章 if语句
5.2 条件测试:值为 Ttue 或 Flase 的表达式。
相等:=
不等:!=
多条件:and age>22 and age<36
or age>22 or age==18
列表中是否包含特定值:in not in
例:requested = ['1','2','3']
'1' in requested
'2' not in requested
布尔表达式:
5.3 if语句
if
if-elif
if-elif-else
5.4 if处理列表
检查特殊元素:循环套if
确定列表不为空:if套循环
第六章 字典
6.1 定义:用花括号包裹的一系列键值对。键值之间用冒号分隔,键值对之间用逗号分隔。
例: alien_0 = {'color':'green','points':'5'}
6.2 访问:print(alien_0['color'])
添加:依次指定字典名,用方括号括起的见和相关联的值
例:alien_0['x_position'] = 0
修改:依次指定字典名,用方括号括起的键和与该键相关联的新值
删除:del 字典名[要删除的键]
6.3 遍历:
遍历所有键值对:items():返回一个键值对列表
例: for key,value in alien.items():
遍历所有键:keys():返回一个键的列表:
例:for key in alien.keys(): 或者 for key in alien:
按顺序遍历所有键:用sorted()先排序再遍历
例: for key in sorted(alien.keys()):
遍历字典中的所有值:values(): 返回一个值的列表
例: for value in alien.values():
剔除重复项再遍历值: set()
例: for value in set(alien.values()):
6.4 嵌套:
定义:将一系列字典存储在列表中,或将列表作为值存储在字典中。
字典列表:
在字典中存储列表:
在字典中存储字典:
第7章 用户输入和while循环
7.1用户输入字符串: input()
字符串转数字 : int()
求模运算符: %
7.2 while循环
格式: while 条件:
使用标志:
结束循环:break
结束循环余下代码,开始下个循环 continue
用途:在循环的途中修改字典,列表。
第8章 函数
8.1 定义:带名字的代码块。用于完成具体的工作
格式:
def 函数名(参数):
代码块
8.2 实参和形参
实参:调用函数的时候传递给函数的实际值。
形参:定义函数的时候括号中的变量名。
关键字实参:在调用方法的时候指明形参。格式类似于: 函数名(形参=实参)
默认值:在定义函数的时候设置默认值。 格式类似于: def 函数名(形参=默认值)
实参不匹配错误:实参数量不对时。
8.3 返回值:函数中用return关键字返回值,调用方法的时候用变量接收
实参可选,不必填的参数设置默认值
8.4 传递列表
8.5 传递任意数量的实参
def make_pizza(*toppings): *表明这个是一个参数的元组。可以接受任意数量的参数
def make_pizza(size,*suppings): 结合使用位置实参和任意数量实参
def_build_profile(first,last,*user_info): 使用任意数量的关键字实参,user_info传递键值对
8.6 将函数存储在模块中
模块:扩展名位.py的文件。
导入整个模块:在同一目录层级下, 直接导入: import module_name
使用模块中的函数: module_name.function_name()
导入特定函数: from module_name import function_name
from module_name import function_0,function_1,function-2
使用as给函数指定别名:from module_name import function_name as 别名
使用as给模块指定别名:import module_name as 别名
导入模块中所有函数: from module_name import *
8.7 函数编写指南:
函数名称具有描述性,只用小写字母和下划线。
必须有注释,在函数定义后面。文档字符串格式。
函数之间用两行空行分开。
第9章 类
类:表示现实世界中的事物和情景。定义一大类对象都有的通用行为。
对象:基于类创建,具备类的通用行为和独特个性。
实例化:根据类来创建对象。
9.1 创建和使用类
定义: class Dogs(): #类名首字母要大写 class ClassName():
方法: def __init__(self,name,age): #构造方法,self就是this。 可供类中所有方法使用。
error: Dog() takes no arguments 注意init两边是双下划线,
属性:name,age 可以通过实例访问的变量。 #self.age = age self.name = name
9.2 根据类创建实例
dog = Dogs('豆豆',6)
修改属性的值:
直接通过实例进行修改:
my_new_car.odometer_reading = 23
通过方法进行设置:
my_new_car.update_odometer(23)
通过方法进行递增:
my_new_car.increment_odometer(100)
9.3 继承
一个类继承另一个类时,它将自动获得另一个类的所有属性和方法。原有的类称为父类,新类
称为子类,子类继承了父类的所有属性和方法,同时还可以定义自己的属性和方法。
创建子类时,父类必须包含在当前文件中,且位于子类前面。定义子类时,在括号中指定父类的名
字。
方法__init__()必须接受创建父类所需的信息。且在方法中有一个特殊函数super().__init__()
将父类和子类关联起来。让子类实例包含父类的所有属性。父类也叫超类。
重写:子类中和父类名字相同的方法。
将实例用过属性:将类的一部分作为一个独立的类提取出来。
9.4 导入类
将类存储在模块中,然后在模块中导入类。
导入单个类:
from car import Car
my_car = Car(...)
在一个模块中存储多个类:from car import Car,ElectricCar
导入整个模块:
import car
my_beetle = car.Car(...)
导入模块中的所有类: from module_name import *
在一个模块中导入另一个模块:
9.5 Python 标准库
顺序字典: from collections import OrderedDict
9.6 类编码风格
类名:驼峰命名法,首字母大写,不用下划线
实例名/模块名:小写,单词之间用下划线隔开
类注释:类定义后面加文档字符串,描述类的功能。
分割方法:一个空行
分割类:两个空行
导入顺序:先导入标准模块库,再添加一个空行,再导入自己编写的模块。
第10章 文件和异常
异常:Python创建的特殊对象,用于管理程序运行时出现的错误。
10.1 从文件中读取数据
read() : 一次性读取整个文件内容。推荐使用read(size)方法,size越大运行时间越长
readline() :每次读取一行内容。内存不够时使用,一般不太用
readlines() :一次性读取整个文件内容,并按行返回到list,方便我们遍历
全部读取:
with open('pi_digits.txt') as file_object:
contents = file_object.read()
print(contents)
with 标识用,不用手动打开(open),关闭(close)
#相对路径报错,不知道是不是notepad++的问题。绝对路径可以找到文件。直接点击文件运行也可以,就是在
# notepad++中运行找不到。
逐行读取:
with open(filename) as file_object:
for line in file_object:
print(line.rstrip())
注:文件读取的本质是用迭代器一个个读,因而一个文件读到最后以后,再调用读取的方法,就读不到东西了。
放到列表中:
with open(filename) as file_object:
lines = file_object.readlines()
10.2 写入文件
write(string)需要传入一个字符串做为参数,否则会报错
writelines(list)既可以传入字符串又可以传入一个字符序列,并将该字符序列写入文件
注意 :writelines()必须传入的是字符序列(字符串列表),不能是数字序列
with open('F:pythonStudylearning_python.txt','a') as file_object:
file_object.write('追加了一句话。')
open参数: a - 追加 w - 直接写 r - 只读
10.3 异常
格式: try-exists-else
例: try:
print(5/0)
exists:
print("You can't divide by zero!")
else:
print('success')
10.4 存储数据
json模块用来存取数据,很方便的转为python可以读取的数据类型。
存:json.dump(数据,文件)
取:json.load(文件)
重构:代码写好后,将代码划分为一系列完成具体工作的函数,这样的过程称为重构。
第11章 测试代码
测试模块:unittest
单元测试:用于核实函数的某个方面没有问题。
测试用例:是一组单元测试。
全覆盖式测试用例:
具体用法:
1.导入unittest测试模块。导入要测试的方法或类。
2.创建测试类,继承了unittest.TestCase类。没有__init__方法,直接写测试方法。测试方法的名字用test开头
后面的单词最好具有描述性,说清这个方法是测试什么的。
3.在测试方法中调用需要测试的方法,然后用断言方法来判断是否通过测试
断言方法: self.assertEqual(方法返回值,预计返回值)
4.在最后面用 unittest.main() 启用这个测试用例。
断言方法:
assertEqual(a,b) 核实 a == b
assertNotEqual(a,b) 核实 a != b
assertTrue(x) 核实 x 为 True
assertFalse(X) 核实 x 为 False
assertIn(item,list) 核实 item 在 list 中
assertNotIn(item,list) 核实 item 不在 list 中
setUp():测试类的初始化方法,用于创建一个需要测试的类的单例。
5.2 条件测试:值为 Ttue 或 Flase 的表达式。
相等:=
不等:!=
多条件:and age>22 and age<36
or age>22 or age==18
列表中是否包含特定值:in not in
例:requested = ['1','2','3']
'1' in requested
'2' not in requested
布尔表达式:
5.3 if语句
if
if-elif
if-elif-else
5.4 if处理列表
检查特殊元素:循环套if
确定列表不为空:if套循环
第六章 字典
6.1 定义:用花括号包裹的一系列键值对。键值之间用冒号分隔,键值对之间用逗号分隔。
例: alien_0 = {'color':'green','points':'5'}
6.2 访问:print(alien_0['color'])
添加:依次指定字典名,用方括号括起的见和相关联的值
例:alien_0['x_position'] = 0
修改:依次指定字典名,用方括号括起的键和与该键相关联的新值
删除:del 字典名[要删除的键]
6.3 遍历:
遍历所有键值对:items():返回一个键值对列表
例: for key,value in alien.items():
遍历所有键:keys():返回一个键的列表:
例:for key in alien.keys(): 或者 for key in alien:
按顺序遍历所有键:用sorted()先排序再遍历
例: for key in sorted(alien.keys()):
遍历字典中的所有值:values(): 返回一个值的列表
例: for value in alien.values():
剔除重复项再遍历值: set()
例: for value in set(alien.values()):
6.4 嵌套:
定义:将一系列字典存储在列表中,或将列表作为值存储在字典中。
字典列表:
在字典中存储列表:
在字典中存储字典:
第7章 用户输入和while循环
7.1用户输入字符串: input()
字符串转数字 : int()
求模运算符: %
7.2 while循环
格式: while 条件:
使用标志:
结束循环:break
结束循环余下代码,开始下个循环 continue
用途:在循环的途中修改字典,列表。
第8章 函数
8.1 定义:带名字的代码块。用于完成具体的工作
格式:
def 函数名(参数):
代码块
8.2 实参和形参
实参:调用函数的时候传递给函数的实际值。
形参:定义函数的时候括号中的变量名。
关键字实参:在调用方法的时候指明形参。格式类似于: 函数名(形参=实参)
默认值:在定义函数的时候设置默认值。 格式类似于: def 函数名(形参=默认值)
实参不匹配错误:实参数量不对时。
8.3 返回值:函数中用return关键字返回值,调用方法的时候用变量接收
实参可选,不必填的参数设置默认值
8.4 传递列表
8.5 传递任意数量的实参
def make_pizza(*toppings): *表明这个是一个参数的元组。可以接受任意数量的参数
def make_pizza(size,*suppings): 结合使用位置实参和任意数量实参
def_build_profile(first,last,*user_info): 使用任意数量的关键字实参,user_info传递键值对
8.6 将函数存储在模块中
模块:扩展名位.py的文件。
导入整个模块:在同一目录层级下, 直接导入: import module_name
使用模块中的函数: module_name.function_name()
导入特定函数: from module_name import function_name
from module_name import function_0,function_1,function-2
使用as给函数指定别名:from module_name import function_name as 别名
使用as给模块指定别名:import module_name as 别名
导入模块中所有函数: from module_name import *
8.7 函数编写指南:
函数名称具有描述性,只用小写字母和下划线。
必须有注释,在函数定义后面。文档字符串格式。
函数之间用两行空行分开。
第9章 类
类:表示现实世界中的事物和情景。定义一大类对象都有的通用行为。
对象:基于类创建,具备类的通用行为和独特个性。
实例化:根据类来创建对象。
9.1 创建和使用类
定义: class Dogs(): #类名首字母要大写 class ClassName():
方法: def __init__(self,name,age): #构造方法,self就是this。 可供类中所有方法使用。
error: Dog() takes no arguments 注意init两边是双下划线,
属性:name,age 可以通过实例访问的变量。 #self.age = age self.name = name
9.2 根据类创建实例
dog = Dogs('豆豆',6)
修改属性的值:
直接通过实例进行修改:
my_new_car.odometer_reading = 23
通过方法进行设置:
my_new_car.update_odometer(23)
通过方法进行递增:
my_new_car.increment_odometer(100)
9.3 继承
一个类继承另一个类时,它将自动获得另一个类的所有属性和方法。原有的类称为父类,新类
称为子类,子类继承了父类的所有属性和方法,同时还可以定义自己的属性和方法。
创建子类时,父类必须包含在当前文件中,且位于子类前面。定义子类时,在括号中指定父类的名
字。
方法__init__()必须接受创建父类所需的信息。且在方法中有一个特殊函数super().__init__()
将父类和子类关联起来。让子类实例包含父类的所有属性。父类也叫超类。
重写:子类中和父类名字相同的方法。
将实例用过属性:将类的一部分作为一个独立的类提取出来。
9.4 导入类
将类存储在模块中,然后在模块中导入类。
导入单个类:
from car import Car
my_car = Car(...)
在一个模块中存储多个类:from car import Car,ElectricCar
导入整个模块:
import car
my_beetle = car.Car(...)
导入模块中的所有类: from module_name import *
在一个模块中导入另一个模块:
9.5 Python 标准库
顺序字典: from collections import OrderedDict
9.6 类编码风格
类名:驼峰命名法,首字母大写,不用下划线
实例名/模块名:小写,单词之间用下划线隔开
类注释:类定义后面加文档字符串,描述类的功能。
分割方法:一个空行
分割类:两个空行
导入顺序:先导入标准模块库,再添加一个空行,再导入自己编写的模块。
第10章 文件和异常
异常:Python创建的特殊对象,用于管理程序运行时出现的错误。
10.1 从文件中读取数据
read() : 一次性读取整个文件内容。推荐使用read(size)方法,size越大运行时间越长
readline() :每次读取一行内容。内存不够时使用,一般不太用
readlines() :一次性读取整个文件内容,并按行返回到list,方便我们遍历
全部读取:
with open('pi_digits.txt') as file_object:
contents = file_object.read()
print(contents)
with 标识用,不用手动打开(open),关闭(close)
#相对路径报错,不知道是不是notepad++的问题。绝对路径可以找到文件。直接点击文件运行也可以,就是在
# notepad++中运行找不到。
逐行读取:
with open(filename) as file_object:
for line in file_object:
print(line.rstrip())
注:文件读取的本质是用迭代器一个个读,因而一个文件读到最后以后,再调用读取的方法,就读不到东西了。
放到列表中:
with open(filename) as file_object:
lines = file_object.readlines()
10.2 写入文件
write(string)需要传入一个字符串做为参数,否则会报错
writelines(list)既可以传入字符串又可以传入一个字符序列,并将该字符序列写入文件
注意 :writelines()必须传入的是字符序列(字符串列表),不能是数字序列
with open('F:pythonStudylearning_python.txt','a') as file_object:
file_object.write('追加了一句话。')
open参数: a - 追加 w - 直接写 r - 只读
10.3 异常
格式: try-exists-else
例: try:
print(5/0)
exists:
print("You can't divide by zero!")
else:
print('success')
10.4 存储数据
json模块用来存取数据,很方便的转为python可以读取的数据类型。
存:json.dump(数据,文件)
取:json.load(文件)
重构:代码写好后,将代码划分为一系列完成具体工作的函数,这样的过程称为重构。
第11章 测试代码
测试模块:unittest
单元测试:用于核实函数的某个方面没有问题。
测试用例:是一组单元测试。
全覆盖式测试用例:
具体用法:
1.导入unittest测试模块。导入要测试的方法或类。
2.创建测试类,继承了unittest.TestCase类。没有__init__方法,直接写测试方法。测试方法的名字用test开头
后面的单词最好具有描述性,说清这个方法是测试什么的。
3.在测试方法中调用需要测试的方法,然后用断言方法来判断是否通过测试
断言方法: self.assertEqual(方法返回值,预计返回值)
4.在最后面用 unittest.main() 启用这个测试用例。
断言方法:
assertEqual(a,b) 核实 a == b
assertNotEqual(a,b) 核实 a != b
assertTrue(x) 核实 x 为 True
assertFalse(X) 核实 x 为 False
assertIn(item,list) 核实 item 在 list 中
assertNotIn(item,list) 核实 item 不在 list 中
setUp():测试类的初始化方法,用于创建一个需要测试的类的单例。