大家好,小编为大家解答大一python题库及答案的问题。很多人还不知道大一python期末必考题,现在让我们一起来看看吧!
[个人向]知识点总结&课后习题解析
前言
经过了一个学期的python学习,终于…期末考试它来了!这里就大概总结一下这个学期所学到的知识吧,冲冲冲!
Python第一学期知识点
1.初识python
-
python的工作区域分为交互界面和编辑器,编辑器是让我们保存自己所写的一些代码/程序,交互界面是暂时性的运行某一段语句,并不能将语句保存,而编辑器可以保存我们所写的一长段语句。
-
编辑器相较于Anaconda自带的Spyder,本人偏向于IDLE这个原生的编辑器,能够在原生环境中编辑,可以更加理解Python语言的一些特性python创意turtle作品。
2.Python语言基础
2.1 - Python语法特点
特点 | 说明 |
---|---|
注释规则 | |
代码缩进 | |
编码规范 | 每个import语句只导入一个模块、不要行尾添加“;”等诸如此类的规范。 |
2.2 - Python中的变量
- Python中的保留字不可作为变量命名,例如if,for,True…
- Python的语言标识符命名只能由字母,下划线"_"和数字组成,而且第一个字符不能是数字,不能是保留字。
2.3 - 基本数据类型
2.3.1数据类型
数据类型 | 说明 |
---|---|
数字 | 整数(其中包括二级制、八进制、十六进制的数)、浮点数、复数(和数学上的一样),这些都可 直接用于计算 |
字符串 | 用一组单引号’ '或者双引号" "括起来的文本就是字符串,可以是数字类型,可以用于字符串操作 |
布尔类型 | 主要用来表示真假,可以用于循环和条件判断语句中的表示条件真假,也可用于计算,True=1,False=0 |
其中字符串还有一些特定的转义字符
转义字符 | 说明 | 转义字符 | 说明 |
---|---|---|---|
\ | 续行符 | \n | 换行符 |
\0 | 空 | \t | 水平指标符,用于横向调到下一指标位 |
" | 单个双引号 | ’ | 单个单引号 |
\\ | 一个反斜杠 | \f | 换页 |
\0dd | 八进制数,dd表示字符,如\012表示换行 | \xhh | 十六进制数,hh代表的字符,如\x0a代表换行 |
2.3.2 - 数据类型的转换
函数 | 作用 |
---|---|
int(x) | 将x转换成整数类型 |
float(x) | 将x转换成浮点数类型 |
complex(real [,imag]) | 创建一个复数 |
str(x) | 将x转换成字符串 |
repr(x) | 将x转换成表达式字符串,例如repr(‘123’)=" ‘123’ " |
eval(x) | 计算在字符串中的有效python表达式并返回计算的值,例如eval(‘1+2’)=3 |
chr(x) | 将字符x转换为它对应的整数值 |
hex(x) | 将一个整数x转换为一个十六机制的字符串 |
oct(x) | 将一个整数转换为一个八进制的字符串 |
P.S 这里的 int(x) 函数只会保留整数部分的数字,并不会为我们进行四舍五入的处理,例如int(2.6)=2而不是3,需要四舍五入处理的就需要使用 round(x,n) 函数。
Q:0.2+0.3 == 0.5会返回True?
相信大部分小伙伴都觉得会返回Ture,但是并不是每一次都会返回True。因为计算机中float浮点数类型的数据都是以二进制来保存的,因此会保存接近的数字来代替这个数字,因此计算中能不用float类型计算就不用,那么要如何解决小数计算的问题?这里就提现出了 round(x,n) 的用武之地了,x是数字或者变量,n是保留小数点后n位小数,round(x,n) 函数就能够保证像0.2 + 0.3 == 0.5这种小数计算返回的结果是True而不是有时会出现False。
2.4 - 基本输入和输出
x = input(‘请输入x’)
这里的x就是输入的内容保存在变量x中,注意!!!输入的内容全部为字符串,例如输入123,我们认为他是数字类型,但实际上是字符串类型的’123’,因此如果需要将x用于数学计算,需要使用上述的类型转换语句进行转换。
print(‘Hello World’)
这里就会在交互界面输出一句Hello World,print([, sep= , end=]) 函数可以用于输出字符串或者数字,但是如果要输出不同类型的字符串内容必须要用,分隔开,例如print(0.3,‘ABC’),然后其中的sep、end参数是对一些变量的设置。假如要print出不同类型的内容,那么上述格式输出的结果是0.3 ABC,会有空格,因为 print() 函数中不同类型的间隔符默认为一个空格,因此可以在sep=后面输入’’ 两个单引号来定义这些变量之间的间隔符为无;同时**print()**函数中每打印一行都会在末尾加一个 \n 换行符,因此只是使用语句print()不是会打印出没有东西,而是会打印出一个换行符,即换行。
3.运算符与表达式
3.1 - 运算符
算数运算符 | 说明 | 赋值运算符 | 说明 |
---|---|---|---|
+ | 加 | = | 简单的赋值运算 |
- | 减 | += | 加赋值 |
* | 乘 | -= | 减赋值 |
/ | 除 | *= | 乘赋值 |
% | 除之后返回余数 | /= | 除赋值 |
// | 除之后返回整数部分 | %= | 取余数赋值 |
** | 幂 | **= | 幂赋值 |
//= | 取整除赋值 | ||
逻辑运算符 | 说明 | ||
and | 逻辑 与 | 比较(关系)运算符 | 说明 |
or | 逻辑 或 | > | 大于 |
not | 逻辑 非 | < | 小于 |
== | 等于 | ||
位运算符 | 说明 | != | 不等于 |
& | 按位 与 | >= | 大于或等于 |
| | 按位 或 | <= | 小于或等于 |
^ | 按位 异或 | ||
~ | 按位 取反 | ||
<< | 左移位 | ||
>> | 右移位 |
3.2 - 运算符的优先级
** > ~,+,- > *,/,%,// > +,- > <<,>> > & > ^ > | > <,<=,>,>=,!=,==
4.流程控制语句
4.1 - 选择语句
4.1.1 - 单分支语句
if <表达式1>:
<语句块1>
4.1.2 - 二分支语句
if <表达式1>:
<语句块1>
else:
<语句块4>
二分支语句还有一种紧凑格式如下:
<语句块1> if <表达式1> else <语句块2>
4.1.3 - 多分支语句
if <表达式1>:
<语句块1>
elif <表达式2>:
<语句块2>
elif <表达式3>
<语句块3>
else:
<语句块4>
多分支语句会从上到下进行表达式的判断,一旦符合就会进入相对应的语句块执行,因此需要注意表达式之间的关系,根据实际情况来编辑。
4.2 - 循环语句
4.2.1 - while 循环
while .<条件表达式>:
<语句块>
表达式中如果填写True,那么就会形成死循环:下属语句块中如果没有break语句来跳出循环,那么就会一直执行循环不停止。
for <迭代变量> in <对象>:
<语句块>
这里的迭代变量,是会遍历对象的每一个元素,即字符串以及下文会提到的组合类型数据都可用于这里的对象。
for与while循环的最大区别就是,while可以执行死循环,for不可以,而且while循环是所有编程程序中通用的循环语法,for语句是python特有的语句。
4.3 - 循环中经常用到的保留字
字符 | 说明 |
---|---|
break | 跳出循环,即执行完前面语句块之后就停止循环 |
continue | 跳出本次循环直接进入下一次循环 |
pass | 占行符,不做任何事情 |
P.S 还有一种列表的紧凑格式:
lst = [<对象> for <迭代对象> in <list>]
这种格式的好处就是精简代码,不用赋值一个空列表,然后再循环添加到列表里面,一句就可以实现多句的内容,这里的对象可以是另外一个列表的内容也可以是一些数字。
5.组合数据类型
组合数据 | 说明 |
---|---|
列表 | 有序且可以对其中的元素进行操作 |
元组 | 不可对其中的元素进行操作,但是能用于很多映射函数的操作 |
字典 | 每一个键=值对都是无序的,可以通过键的操作来找到对应的值 |
集合 | 无序,可以对其中的元素进行操作,但是没有重复的元素 |
5.1- 列表
函数或方法 | 描述 |
---|---|
lst[i] = x | 替换列表lst第i+1个元素为x |
lst[i: j: k] = lst1 | 用列表lst1替换lst切片后所对应元素子列表 |
del lst[i] | 删除列表lst第i+1个元素 |
del lst[i: j: k] | 删除列表lst第i+1到第j以k为步长的元素 |
lst += lst1 | 更新列表lst,将列表lst1元素添加到列表lst中 |
lst *= n | 更新列表lst,其元素重复n次 |
lst.append(x) | 在列表lst最后增加一个元素x |
lst.clear() | 删除列表lst中所有元素 |
lst.copy() | 生辰给一个新列表,赋值lst中所有元素 |
ls.insert(i,x) | 在列表lst的第i个位置增加元素x |
ls.pop(i) | 将列表lst中第i+1位置元素去除并删除该元素 |
ls.remove(x) | 将列表lst中出现的第一个元素x删除 |
ls.reverse() | 将列表ls中的元素反转 |
注意,这里的lst.copy()语句就是用于创建两个一模一样的列表,假设现在有一个列表lst,想创建一个lst1与lst相同元素的列表作用于不同地方,那么不能用lst1 = lst,而是使用lst1 = lst.copy()。
5.2 - 元组
- 元组是一种序列类型,一旦创建就不能被修改。
- 使用小括号()或tuple()创建,元素间用逗号,分隔。
- 可以使用或不使用小括号。
- 元组类型的操作,跟上述的列表操作相似,但是不能修改创建后的元组,因此不存在append、del这种序列方法作用于元组上。
5.3 - 字典
函数或方法 | 描述 |
---|---|
del d[k] | 删除字典d中键k对应的数据值 |
k in d | 判断键k是否在字典d中,如果在返回 True ,否则False |
d.keys() | 返回字典d中所有的键信息 |
d.values() | 返回字典d中所有的值信息 |
d.items() | 返回字典d中所有的键值对信息 |
d.get(k, <default>) | 键k存在,则返回相应值,不在则返回 <default> 值 |
d.pop(k,<default>) | 键k存在,则去除相应值,不在则返回 <default> 值 |
d.popitem() | 删除所有的键值对 |
len(d) | 返回字典d中元素的个数 |
5.4 - 集合
- 集合类型与数学中的集合概念一致。
- 集合元素之间无序,每个元素唯一,不存在相同元素。
- 集合元素不可更改,不能是可变数据类型。
- 集合的操作方法跟上述的序列操作方法一致,只是不能修改其中的元素,集合用 大括号{} 表示,元素之间用逗号分隔,建立集合还可使用set()。
操作符及应用 | 描述 |
---|---|
S|T | 返回一个新集合,包括集合S和T中的所有元素 |
S - T | 返回一个新集合,包括在集合S但不在T中的元素 |
S&T | 返回一个新集合,包括同时在集合S和T中的元素 |
S ^ T | 返回一个心机和,包括集合S和T中的非相同元素 |
S <= T 或S < T | 返回 True 或 False ,判断S和T的子集关系 |
S >= T或S > T | 返回 True 或 False ,判断S和T的包含关系 |
6.字符串
6.1 - 字符串编码转换
编码大致分为 ASCII,GBK,GB2312,UTF-8 编码,其中 GBK和GB2312是我国制定的中文编码标准,使用一个字节表示一个字母,两个字节表示一个中文字符,UTF-8是国际通用的编码。
str.encode([encoding=‘utf-8’][,error=‘strict’])
编码转换使用到encode()语句,对象是str字符串类型,()里面的是可选参数,默认都是utf-8编码。
bytes.decode([encoding=‘utf-8’][,errors=‘strict’])
bytes表示要进行转换的二进制数据,通常用encode()方法转换的结果。
6.2 - 字符串常用操作
序列的操作方法也可用于字符串,例如len(),可以得到字符串的长度
for i in str:
print(i)
这个和print(str)不同,这里是将str中的所有字符串逐渐赋值给i,然后通过每一次循环print出i,这里print()出一个就会换行,因此输出的结果是竖着而不是全部一起输出,这个操作可以用于一些对输出文本进行加工。
函数及使用 | 描述 |
---|---|
len(x) | 长度,返回字符串的长度 |
str(x) | 任意类型x所对应的字符串形式 |
hex(x)或oct(x) | 整数x的十六进制或八进制小写形式字符串 |
chr(u) | x为Unicode编码,返回其对应的字符 |
ord(x) | x为字符,返回其对应的Unicode编码 |
6.3 - 字符串的处理
方法及使用 | 描述 |
---|---|
str.lower()或str.upper() | 返回字符串的副本,全部字符小写/大写 |
str.split(sep=None) | 返回一个列表,由str根据sep被分隔的部分组成 |
str.count(sub) | 返回字符sub在str中出现的次数 |
str.replace(old,new) | 返回字符串的副本,所有old字符被替换成new |
str.center(width[,fillchar]) | 字符串str根据宽度width居中,fillchar可选 |
str.strip(chars) | 从str中去掉在其左侧和右侧chars中列出的字符 |
str.join(iter) | 在iter变量除最后元素歪每个元素增加一个str |
6.4 - 字符串的格式化
- ‘%[-][+][0][m][.n]格式化字符串’%exp
其中-表示左对齐,+表示右对齐,0表示右对齐,正数前方元符号,负数前方加负号,用0填充空白处,m表示占有宽度,.n表示小数点后保留的位数
%字符串格式化中常用的格式化字符
格式字符 | 说明 | 格式字符 | 说明 |
---|---|---|---|
%s | 字符串(常用str()显示) | %r | 字符串(采用repr()显示) |
%c | 单个字符 | %o | 八进制整数 |
%d或%i | 十进制整数 | %e | 指数(基底写为e) |
%x | 十六进制整数 | %E | 指数(基底写为E) |
%f或者%F | 浮点数 | %% | 单个%号 |
- ‘格式化字符串{[index][:[[fill]align][sign][#][width][.precision][type]}’.format()
格式字符 | 说明 | 格式字符 | 说明 |
---|---|---|---|
S | 对字符串类型格式化 | b | 将十进制整数自动转换成二进制表示再格式化 |
D | 十进制整数 | o | 将十进制整数自动转换成八进制表示再格式化 |
C | 将十进制整数自动转换成对应的Unicode字符 | x或者X | 将十进制整数自动转换成十六进制表示 |
e或者E | 转换成 |
- f’{x}格式化字符串’
以上三种便是字符串格式化的操作,最后一种f’'的操作跟%的操作一样就不再重复。
7.函数的创建与调用
7.1 - 创建函数
def functionname([parameterlist]):
["‘comments’"]
[functionbody]
- funcionname:函数名称,在调用函数时使用
- parameterlist:可选参数,用于指定向函数中传递的参数。如果有多个参数,各参数间使用逗号分隔。如果不指定,则表示该函数没有参数。在调用时,也不指定参数。
定义函数一般放在程序的开头,在下面主程序的时候再进行调用以实现功能。
7.2 - 调用函数
funcionname([parameterlist])
这里就是调用了函数,这里的格式就跟上述定义函数一样,()中填了参数就是将参数传递给函数体,如果没有填,那么只是执行语句块functionbody。
7.3 - 参数传递
参数大致分为六种:形式参数,实际参数,位置参数 ,关键字参数,默认参数,可变参数
- 形式参数:写在定义函数里面的函数就叫做形式参数,用于函数体里面的参数传递
- 实际参数:在调用函数时填写的参数就叫做实际参数。
- 位置参数:必须按正确的顺序传到函数中,即调用时的数量和位置必须和定义时是一样的。
- 关键字参数:是指使用形式参数的名字来确定输入的参数值。
- 默认参数:调用函数时,如果没有指定某个参数会抛出异常,为参数设置默认值就可以解决这个问题。
- 可变参数:不定长参数,传入函数中的直接参数可以是任意个。
7.4 - 返回值
在函数里面运算得到的结果是只能用于函数体里面,没法在整个程序中使用,因此才会出现global全球变量和return返回值。
- global <变量> - 在后面写上的可以在全局中调用,要在函数体的开头声明。
- return <变量> - 用于返回值,可以是多个值。
8.模块
模块主要包括三种模块:内置模块,开源模块和自定义模块
- 内置模块:类似于math,os这种模块是python自带的,可以直接只用import <模块>或from <模块> import <函数>语句进行调用不需要再自行安装。
- 开源模块:类似于matplotlib,numpy这种模块就是第三方模块,需要自己使用pip进行安装才可以在python上使用。
- 自定义模块:自己定义的模块,模块就是.py自己编辑的函数文件,使用的前提是程序和模块放在同一个目录下。调用模块时,模块名字直接输入.py文件的名字即可。
import <模块> as name
有时我们会见到很长名字的模块名字,比如matplotlib.pyplot,每次调用函数的时候都极其麻烦,因此可以使用as对这个模块的前缀进行命名,例如:
import matplotlib.pyplot as plt
这样在调用matplotlib.pyplot.plot(x,y)绘制折线图的时候可以直接输入plt.plot(x,y)即可。
9.异常处理及程序调试
9.1 - 异常类型
异常 | 描述 |
---|---|
NameError | 尝试访问一个没有声明的变量引发的错误 |
IndexError | 索引超出序列范围引发的错误 |
IndentationError | 缩进错误 |
ValueError | 传入的值错误 |
KeyError | 请求一个不存在的字典关键字引发的错误 |
IOError | 输入输出错误 |
ImportError | 当import语句无法找到模块或from无法在模块中找到相应的名称时引发的错误 |
AttributeError | 尝试访问位置的对象属性引发的错误 |
TypeError | 类型不适合引发的错误 |
MemonryError | 内存不足 |
ZeroDivisionError | 除数为0引发的错误 |
SyntaxError | Python解释器语法错误 |
P.S 这里最后的SyntaxError,在python自带的编辑器IDLE中是弹窗警告,跟Spyder不同,Spyder可以直接抛出SyntaxError,而IDLE是抛出错误弹窗,这里需要注意!
9.2 - 异常处理语句
try:
block1
except [ExceptionName [as alias]]:
block2
[
except [ExceptionName [as alias]]:
block…
]
这是一次性捕捉的语句,block1就是捕捉block1里面的错误,然后抛出错误类型,如果block1中出现错误,就会立刻执行block2的语句。这里面的ExceptionName就是错误类型的名字,大小写必须区分!,在这里填上了错误类型,那么就会指定捕捉抛出的某个异常然后执行下面缩进的语句,因此在try后面可以添加多个except来捕捉不同类型的错误,从而执行不同的语句。[as alias]就是将错误原因赋值给alias,在后面可以print(alias)出错误原因。
try:
bloack1
except [ExceptionName [as alias]]:
block2
else:
block3
这里多加个else,意思就是在这个捕捉异常的语句中如果没有出现错误,那么就会执行else下面block3的内容,一旦出现错误就不会执行else下面的block3内容。
try:
bloack1
except [ExceptionName [as alias]]:
block2
else:
block3
finally:
block4
这里是最完整的异常处理语句了。在末尾加上finally语句,意思就是不管有没有对错,在执行完前面的语句之后都会执行block4的内容,
10.文件及目录操作
10.1 - 文件操作
10.1.1 - 文件的打开方式
在python中,想要操作文件需要先创建或者打开指定的文件并创建文件对象。这可以通过内置的open()函数实现。open()函数的基本语法格式如下:
file = open(filename[,mode[,buffering]])
- file:被创建的文件对象
- filename:要创建或者打开的文件对象,需要使用单引号或者双引号括起来。如果打开的文件和当前文件在同一个目录下,直接写文件名即可,否则需要制定完整路径。(文件面包括后缀)
- mode:可选参数,用于指定文件的打开模式。参数值如下:
值 | 说明 |
---|---|
r | 以只读模式打开文件。文件的指针将会放在开头 |
rb | 以二进制格式打开文件,并且采用只读模式。文件的指针将会放在文件的开头。一般用于非文本文件,如图片,声音等 |
r+ | 打开文件后,可以读取文件内容,也可以写入新的内容覆盖原有内容(从文件开头进行覆盖) |
rb+ | 以二进制格式打开文件,并且采用读写模式。文件的指针将会放在文件的开头,一般用于非文本文件,如图片,声音等 |
w | 以只读模式打开文件 |
wb | 以二进制打开文件,并且采用只写模式。一般用于非文本文件,如图片、声音等 |
w+ | 打开文件后,先清空原有内容,使其变成一个空的文件,对这个空文件有读写权限 |
wb+ | 以二进制格式打开文件,并且采用读写模式。一般用于非文本文件,如图片、声音等 |
a | 以追加模式打开一个文件。如果该文件已经存在,文件指针将会放在文件的末尾(即新内容会被写入到已有的内容之后),否则,创建新文件用于写入 |
ab | 以二进制格式打开文件,并且采用追加模式。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于写入 |
a+ | 以读写模式打开文件。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入已有内容之后),否则,创建新文件用于读写 |
注意: 表格中以r开头的参数使用的前提是文件必须存在,如果不存在会抛出错误。'w’模式及其衍生的模式,如果以这个模式打开的文件存在,就会将其覆盖,否则创建新文件。
以一般模式打开文件,文件指针都会放在开头,如果需要指针移位,可以使用seek()函数,其用法如下:
f.seek(i)
这里的seek(i)就是指定文件的指针在第i个字符,意思就是指定指针从第i个字符开始,要注意在utf-8编码中,一个中文字体算两个字符,一个英文字体算一个字符,如果指针里面的i填写不正确会抛出乱码异常。
除了上述的打开方式以外,还有使用with语句的打开方式:
with open(filename) as f:
with-body
这里是使用with语句进行打开文件,这种打开文件的方式较第一种直观,如果写入字符串进某个文件,不需要使用到关闭文件的操作,因为上面语句中把打开文件赋值给了一个变量,因此在使用结束之后必须要有关闭文件的操作才行。with语句中的open()函数跟上述的一模一样。
10.1.2 - 读取文件
读取文件的函数有以下几种:
函数 | 说明] |
---|---|
f.read(i) | 读取文件中i个元素,如果不填默认读取全部 |
f.readline() | 读取文件中一行元素,中间如果填写i的话就是读取i个元素 |
f.readlines() | 读取文件中所有元素,并且以换行符分隔(不去除分隔符,保留在上一行中)返回一个列表 |
10.1.3 - 写入文件
写入文件的方法有以下几种:
函数 | 说明 |
---|---|
f.write() | 写入字符串对象 |
f.writelines() | 写入字符串列表,但是不添加换行符 |
如果使用第一种方式打开文件,那么写入文件之后需要使用f.close()语句才可以对写入的内容进行保存,而且写入的内容不会在末尾添加换行符。
10.2 - 目录
在python中,内置了os模块及其子模块os.path用于对电脑目录或文件进行操作,在导入了os模块之后可以直接使用子模块os.path。
os模块提供的与目录相关的函数如下:
函数 | 说明 |
---|---|
getcwd() | 返回当前的工作目录 |
listdir(path) | 返回指定路径下的文件和目录信息 |
mkdir(path [,mode]) | 创建目录 |
makedirs(path1/path2…[,mode]) | 创建多级目录 |
rmdir(path) | 删除目录 |
removedirs(path1/path2…) | 删除多级目录 |
chdir(path) | 把path设置为当前工作目录 |
walk(top[,topdown[,onerror]]) | 遍历目录树,该方法返回一个元组,包括所有路径名、所有目录列表和文件列表3个元素 |
os.path模块也提供了一些操作目录的函数如下:
函数 | 说明 |
---|---|
abspath(path) | 用于获取文件或目录的绝对路径 |
exists(path) | 用于判断目录或者文件是否存在,如果存在则返回 True,否则返回 False |
join(path,name) | 将目录与目录或者文件名拼接起来 |
splitext() | 分离文件名和扩展名 |
basename(path) | 从一个目录中提取文件名 |
dirname(path) | 从一个路径中提取文件路径,不包括文件名 |
isdir(path) | 用于判断是否为有效路径 |
后语
感谢大家细心看到最后,以上便是本人在第一学期学到的知识,这是个人向的总结,可能不适合用于其他人,同时这个也是对自己的一份总结,看完觉得有用的可以收藏/点赞一下o( ̄▽ ̄)d~
以下是本人写过的一些文章:
[Python-2018年"泰迪杯"数据分析职业技能大赛B题任务一-个人代码分享]
https://blog.csdn.net/weixin_45921726/article/details/103537748
[Python-计算抛硬币出现连续10次正面朝上的概率的仿真实验]
https://blog.csdn.net/weixin_45921726/article/details/103513542