前言
先来听一个恐怖故事😲
在一个月黑风高的夜晚🌒,林大夕可同学埋头于昏黄的台灯下,为不久之后的Python期末考试做着复习。时间不多了,他把重点放在输入输出,字符串、列表、字典的操作上,至于函数与类,只是匆匆扫了一眼,他认为凭借着在字符串、列表、字典上较为熟练的操作,应该就勉强能及格了。
可万万没想到的是,不久之后的考场上,在浏览考题的那半分钟里,仿佛是有数道惊雷在耳边炸响——他复习的内容全都没考… 题目净是些诸如带有可变参数的函数、用类实现发牌等等。
这样一来,林大夕可同学的补考也就随之提上了日程。

这两个月以来,我断断续续地为Python补考做了很多准备🙇🏻♂️,包括
- 阅读Python Cookbook约1/3的内容
- 阅读Python官方文档中的入门教程与部分标准库参考
- 完成PTA上的浙大版《Python 程序设计》题目集与学校老师出的5套题目集
在经历了这个过程后,很多Python相关的知识都能够灵活运用了~ 🥳
然而到目前为止,学校还没通知补考时间和补考地点。再加上对翻书马冬梅,考试孙红雷
的墙裂担忧,我便把各种知识点与题型进行了系统性的总结,等到补考(很可能安排在下学期)前也不用到时候再四处找零散的复习资料了,将这份总结看上一看、练上一练,应该会有事半功倍的效果。
同时,希望这份Python总结也能够帮助到很多正在为学校里的Python考试
(尤其是试题以编程题居多的考试)而做着准备🧑🏻💻的小可爱们~
一、知识储备
1. 输入输出
1.1 输入
1.1.1 拆分输入数据
使用map()
与split()
将输入数据进行拆分
注:map()
与split()
的组合会自动忽略空格
a, b, c = map(int, input().split()) # split()中为将元素拆分的标志,默认为空格
value = b*b - 4*a*c
print(value)
1.1.2 设定截止位
只要#
之前的输入内容
a = input()
s = ''
for i in a:
if i == '#':
break
s = s + i # 将'#'前的输入数据储存到s中
1.1.3 去调输入前后的空格
strip()
:去掉元素前后方的空格,但中间的空格不去掉
s1 = input().strip()
s2 = input().strip()
print(s1)
print(s2)
1.1.4 所输即所得
eval()
:直接将字符串当作有效的表达式(可以暂且理解为直接去掉字符串的双引号)
test = eval(input())
# 尝试输入内容1:[1, 2, 3, 4, 5]
# 尝试输入内容2:{'John': 89, 'Dutton': 95}
print(test)
print(type(test)) # 查看经过eval转化后的类型
result_dict = {
"+": "x+y", "-": "x-y", "*": "x*y", "/": "x/y if y!=0 else 'divided by zero'"}
x = int(input())
op = input()
y = int(input())
result = eval(result_dict[op])
print(result)
1.2 输出
1.2.1 格式化输出format
: | <填充> | <对齐> | <宽度> | , | <.精度> | <类型> |
---|---|---|---|---|---|---|
引导符号 | 用于填充的单个字符 | < 左对齐 > 右对齐 ^居中对齐 | 输出宽度 | 千位分隔符 | 小数部分的精度 | 整数类型或浮点数类型 |
{index : space . decimal_precision conversion_type}
a, b = map(int, input().split(","))
for i in range(a, b):
print("{:^6d} | {:^6d} | {:^6d} | {:^6d}".format(i, i**2, i**3, i**4))
1.2.2 end
# python默认输出会换行
# 使用end=''可以将前后输出内容连接在一行
print("Linda", end='_')
print("Silk")
2. 列表、元组、集合、字典

# 创建空列表
empty_list = []
empty_list = list()
# 创建空元组
empty_tuple = ()
empty_tuple = tuple()
# 创建空集合
empty_set = {
} # ❌错误!!!此方法用于创建字典
empty_set = set()
# 创建空字典
empty_dict = {
}
empty_dict = dict()
2.1 列表
⚠️注意:像 insert
,remove
或者 sort
能够修改列表中元素的方法,没有打印出返回值(它们返回默认值 None
,这是Python中所有可变数据结构的设计原则)。
举个栗子🌰
hosts = ['Dolores', 'Angela', 'Charlotte']
# 1. insert修改了原来的列表
hosts.insert(1, 'William')
print(hosts) # 直接调用原列表名,会得到修改后的列表
new_hosts = hosts.insert(2, 'Teddy') # 若创建一个变量存放返回结果,变量的值会变为None
print(new_hosts)
# 2. index并未修改原来的列表
position = hosts.index('Dolores') # 可创建一个变量存放返回结果
print(position)
2.1.1 增、删、改、查
①. 增加/插入
-
append()
:在list的最后加入一个元素
courses = ['History', 'Math', 'Physics'] courses.append('Art')
-
extend()
:在list的最后加入一个列表
courses = ['History', 'Math', 'Physics'] courses_2 = ['Art', 'Education'] courses.extend(courses2)
-
insert()
:在list的某个位置加入一个元素
courses = ['History', 'Math', 'Physics'] courses.insert(0, 'Art')
②. 删除
-
remove()
:删除list中的特定元素courses = ['History', 'Math', 'Physics'] courses.remove('Math')
-
pop()
:移除list最后一个元素courses = ['History', 'Math', 'Physics'] courses.pop()
③. 修改
courses = ['History', 'Math', 'Physics']
courses[0] = 'Art'
④. 查询
-
index()
:查询某元素的在列表中的位置(索引)courses = ['History', 'Math', 'Physics', 'CompSci'] print(courses.index('CompSci'))
-
in
:查询某元素是否在列表中courses = ['History', 'Math', 'Physics', 'CompSci'] print('Art' in courses)
列表中用到:index()
, in
字符串中用到:find()
, count()
, in
- 使用
find()
时,若查询的元素存在,返回首次出现的位置索引;若不存在,返回 -1 - 使用
count()
时, 若查询元素出现,返回出现次数;若未出现,返回 0 - 使用
in
时,返回值为True或False
2.1.2 切片
语法:list_name [start_index : stop_index : step]
courses = ['History', 'Math', 'Physics', 'CompSci']
print(courses[0:2])
# step
print(courses[0:3:2])
# 若step为负,则代表反向
print(courses[-1:0:-1])
# 理解切片
# 将索引视作指向字符之间 ,第一个字符的左侧标为0,最后一个字符的右侧标为n,其中n是字符串长度。
# +---+---+---+---+---+---+
# | P | y | t | h | o | n |
# +---+---+---+---+---+---+
# 0 1 2 3 4 5 6
# 注意:切片的开始总是被包括在结果中,而结束不被包括 <range()与之相同>。这使得s[:i] + s[i:]总是等于s
# word = 'Python'
# print(word[:2] + word[2:])
2.1.3 排序
-
sort()
/sorted()
顺序courses = ['Math', 'History', 'Physics', 'CompSci'] # 1. sort() # sort()会改变原列表顺序 courses.sort() print(courses) # 2. sorted() # sorted()不会改变原列表顺序,它会返回一个排序后的版本 # 需创建一个变量来接收返回值 sorted_courses = sorted(courses) print(sorted_courses)
-
reverse()
/reversed()
/sort()
/[::-1]
反转 / 倒序courses = ['Math', 'History', 'Physics', 'CompSci'] # 1. reverse() # reverse()会改变原列表顺序 courses.reverse() print(courses) # 2. reversed() # sorted()不会改变原列表顺序,它会返回一个排序后的版本 # 需创建一个变量来接收返回值 reversed_courses = reversed(courses) print(reversed_courses) # 3. sort() # 用包含申明的sort方法 courses.sort(reverse = True) print(courses) # 4. [::-1] print(courses[::-1])
2.1.4 去重
使用set()
,因集合
中没有重复的元素
num_list = [1, 2, 3, 1, 2, 4, 2, 5, 3, 2, 6, 7]
print(set(num_list))
# 若要将去重的结果以列表表示
print(list(set(num_list)))
2.1.5 列表与字符串间的转化
列表 --> 字符串:join()
字符串 --> 列表:split()
courses = ['History', 'Math', 'Physics', 'CompSci']
# 以逗号和空格结合列表中的元素,将其变为一长串字符串
course_str = ', '.join(courses)
# 使用split()将字符串重新变换为列表
new_list = course_str.split(', ')
2.1.6 列表推导式
列表推导式的结构是由一对方括号所包含的以下内容:一个表达式,后面跟一个 for
子句,然后是零个或多个 for
或 if
子句。
其结果将是一个新列表,由对表达式依据后面的 for
和 if
子句的内容进行求值计算而得出。
举个栗子🌰
# 为了创建一个求平方的列表
# 1. 普通方法
squares = []
for x in range(10):
squares.append(x**2)
print(squares)
# 2. 列表推导式
squares = [x**2 for x in range(10)] # for前方的内容为返回值
print(squares)
# 用列表推导式来将输入值处理为矩阵
m, n = map(int, input().split()) # m为行,n为列,其间用空格隔开
matrix = []
for i in range(m): # 重复m次(m行)
s = input() # 输入n个数,每个数之间用空格隔开
matrix.append([int(n) for n in s.split()]) # ⚠️注意:将每个元素转化为整型
print(matrix)
2.1.7 最值 / 求和
对于可迭代对象
,可以直接用sum()
, max()
, min()
方法来进行快速计算
nums = [1, 5, 2, 6, 3, 4]
print(min(nums))
print(max(nums))
print(sum(nums))
2.2 元组
courses = ('History', 'Math', 'Physics')
print(courses)
courses[0] = 'Art' # ❌错误: 元组内元素为只读,不可更改
print(courses)
2.3 集合
courses = {
'History', 'Math', 'Physics', 'CompSci', 'Math'}
# 重复执行多次,输出结果不同
# 因set不注重内部元素顺序
# set会自动消除元素重复部分
print(courses)
# 当判断某元素是否在一群元素中时,set是首选项
print('Math' in courses)
集合间的运算
cs_courses = {
'History', 'Math', 'Physics', 'CompSci'}
art_courses = {
'History', 'Math', 'Art', 'Design'}
# 交集(共有的元素)
print(cs_courses.intersection(art_courses))
# 不同(独有的元素)
print(cs_courses.difference(art_courses))
# 并集(所有的元素)
print(cs_courses.union(art_courses))
2.4 字典
从某种程度上来说,可以将字典看做一个自定义索引(index)
的列表
-
列表中的某个元素可以表示为:
list[index]
-
字典中的某个值可以表示为:
dict[key]
student = {
'name': 'John', 'age': 25, 'courses': ['Math', 'CompSci']}
# get方法可以使得在字典中缺少要查询的值时显示出默认或自定义的结果,而不是抛出异常
# 括号内第二个参数为自定义默认输出内容
print(student.get('name'))
print(student.get('phone', 'Sorry. Not Found~'))
# ------------------------
# 添加
student['phone'] = '199-8011-8011'
# 更新
student['name'] = 'Jane'
print(student)
# ------------------------
# 使用update可以一次更新多个值!!!
student.update({
'name': 'Silk', 'age': 100, 'phone': '188-0525-7633'})
print(student)
# ------------------------
# 删除 方法一:使用del
del student['age']
# 删除 方法二:使用pop
# pop会删除该值,但也会同时返回删除的值,需用变量来接收
age = student.pop('age')
print(student)
print(age)
# ------------------------
# 查看长度
print(len(student))
# 查看键
print(student.keys())
# 查看值
print(student.values())
# 成对展现键与值
print(student.items())
重点
# 以键循环
for key in student:
print(key)
# 键、值循环
for key, value in student.items():
print(key, value)
3. 函数、类、异常
3.1 函数
函数参数中arg
表示:传入的一个参数
函数参数中有单星号的*args
表示:将参数以元组
的形式导入(不限个数)
函数参数中有双星号的**kwargs
表示:将参数以字典
的形式导入(不限个数)
from datetime import date
def mission(arg, *args, **kwargs):
information = []
for i in