首页 / 资讯中心 / 文章详情

Python期末复习指南:六类考点与代码模板全解析

Python期末复习指南:六类考点与代码模板全解析 ★ FEATURED ARTICLE
简介一份面向K12阶段Python学习者的期末复习知识点整理覆盖输入输出、字符串操作、列表操作、自定义排序、桶排序、二分查找、条件执行、函数与模块、异常处理、面向对象等10个专题适合备考期末、系统回顾基础语法与常见算法。资源为单个docx文档封装共1个文件压缩包仅865KB下载后可直接用Word打开按章节速览或打印复习均可。目前已有439人学习浏览内容针对性强且示例丰富。文档以条目加代码示例的方式呈现不仅梳理了列表去重并保持顺序、切片逆序的内存特征、深浅拷贝差异、进制转换等易错点还通过具体案例演示了二分查找和桶排序的实现思路能帮助读者在考前快速识别高频考点、巩固薄弱环节也可作为日常上机练习的速查手册。1. 一张Python期末复习地图先看懂六类考点期末复习最怕的不是题难而是不知道从哪里下手。把考过的卷子翻出来对比一下Python这门课其实就考六块内容基础输入输出与字符串操作、列表与切片、排序与去重、常用算法与内置函数、数据类型的底层细节、函数与面向对象。对K12阶段用Python备考的人来说前面两块是机考程序题的“送分题”但很多人恰恰挂在input().split()和print()的参数上后面两块是选择题和判断题的“扣分坑”考的全是平时没留意的边界行为。这份复习笔记按“先基础操作、再算法、后理论细节”的顺序把期末卷子上可能出现的考点全部串成一张地图每一条都配上可直接默写的代码段复习时对着过一遍就行。2. 输入输出与字符串机考的入场券2.1 input().split() 与 map() 的三种组合机考第一行代码多半是读数据但这一行就有三种写法分别对应三种场景混用必出 bug。第一种是用map()批量接收并转换类型a, b, c map(int, input().split())input()读进来的是字符串.split()默认按空格把字符串切成一串map(int, ...)再把每个切片转成整数最后解包给三个变量。注意一点input().split()的括号里如果什么都不写就是按“任意空白字符”切分空格、制表符、换行都算。第二种是用一个变量接收得到的是字符串列表A input().split()此时A的类型是list里面的元素全是字符串。如果你后面拿它做数值运算必须先转类型。第三种是用多个变量直接接收字符串A, b input().split()这种方式适合“字符之间用什么分隔取决于 split() 函数”的题目比如输入格式是a,b就写input().split(,)。考试里最常见的翻车点是把第一种和第二种混用——接收端是两个变量输入却有三段数据直接抛ValueError。2.2 print() 的参数不只是把东西打出来print()是期末选择题的常客需要把签名记牢print(*objects, sep , end\n, filesys.stdout, flushFalse)objects要输出的对象可多个用逗号分隔。sep多个对象之间的分隔符默认是空格。想输出逗号分隔就写sep,。end结尾字符默认\n。写end可以取消换行。file输出到哪默认sys.stdout可以改成文件对象。flush是否刷新缓冲区默认False。考试里最容易出判断题的是file和flush这两个冷门参数。很多人只记得sep和end看到filesys.stdout就懵。其实你就理解成“print 默认往屏幕写带上filexxx就往文件写”flushTrue表示立即把缓冲区的内容写出去一般只在实时日志场景用。2.3 字符串处理的常用方法字符串这边有一个高频操作排序 去重。经典写法是先转成集合去重再排序输出s list(set(input())) s.sort() print(.join(s))拆开解释字符串转set自动去重list()包一下让它可以排序sort()原地按字典序排列最后.join(s)把字符列表拼回字符串。这个组合套路在“统计字符种类”和“按字典序输出”的题目里几乎是模板。另外蓝桥系算法题从 2022 年这类题的出法来看字符串处理还会结合输入格式来考。比如读入一串逗号分隔的数据然后按“首次出现顺序去重”输出s1 input().split(,) s2 list(set(s1)) print(sorted(s2, keys1.index))set(s1)去重但集合本身无序所以用sort(keys1.index)按照它们在原列表里第一次出现的位置排序达到“去重且保序”的效果。这里list(set(s1))的顺序是随机的必须靠key参数拉回来漏了这一步输出顺序就会跟原串对不上。字符串的删除和填充方法也容易在选择题里出现strip()删除字符串两端的指定字符默认删空白。lstrip()只删左边。rstrip()只删右边。ljust(n)字符串长度不够n时在右边补空格到n位超了就直接返回原串。partition(sep)按分隔符切成三段返回三元组(分隔符之前, 分隔符本身, 分隔符之后)没找到分隔符就返回(原字符串, , )。.join(x.split())去掉字符串里的指定字符再拼回来本质是“先切掉再重组”。3. 列表操作与排序去重最容易拿分的算法基础3.1 列表的三种逆序方式和两种排序后果列表逆序是期末必考点三种方式各有各的脾气lst [1, 2, 3, 4, 5] # 方式1sort(reverseTrue)原地降序排序 lst.sort(reverseTrue) # 方式2reverse()原地反转 lst.reverse() # 方式3切片 [::-1]生成新列表原列表不变 new_lst lst[::-1]三者区别必须背清楚前两种会改变原列表第三种产生一份新副本原列表原封不动。切片方式要额外占内存因为它把元素复制了一份而且可读性不如前两者但如果你需要“保留原列表、单独拿逆序结果”只能用切片。排序场景下sort()和sorted()的选择题陷阱lst.sort()是原地排序返回None打印它输出None但lst本身已经变了。sorted(lst)返回排序后的新列表原列表不变。同理lst.reverse()返回Nonereversed(lst)返回一个迭代器。很多人考场上写print(lst.sort())结果控制台输出None当场蒙住。记住一句话原地操作的方法返回 None返回新对象的是函数。3.2 sort() 的 key 参数数位排序实战sort()有两个可选参数key和reverse。key接收一个函数排序时先用这个函数算出每个元素的“排序键”reverseTrue表示降序。竞赛真题的经典考法是按“数字各位之和”排序。比如给定 1 到 n按每个数各位数字之和从小到大排序求和相同就按数值本身排然后输出第 m 个数n int(input()) # 范围上界 m int(input()) # 第 m 个数 s list(range(1, n 1)) s.sort(keylambda x: sum(int(i) for i in str(x))) print(s[m - 1])代码里str(x)把数字变成字符串int(i) for i in str(x)遍历每一位并转回整数sum()求和得到“数位和”lambda 把它作为排序键。注意列表下标从 0 开始取第 m 个要写成s[m - 1]。这道题的复习价值在于排序不只是排数字大小key参数让你完全自定义“按什么排”这是期末最后一道大题的常见考点。3.3 桶排序/计数思想字典模拟桶桶排序的应用题通常长这样输入一串自然数统计每个数字出现的次数按自然数从小到大输出“数字 次数”。n int(input()) num_list list(map(int, input().split())) count_dict {} for num in num_list: count_dict[num] count_dict.get(num, 0) 1 sorted_nums sorted(count_dict.keys()) for num in sorted_nums: if count_dict[num] 0: print(num, count_dict[num])这里的关键是dict.get(num, 0)键不存在时返回默认值 0存在就返回当前计数然后加 1。这比写if num in count_dict再分支要简洁是期末考里非常实用的计数模板。排序输出时只对键排序因为count_dict.keys()已经天然去重。3.4 二分查找模板二分查找是所有排序题的“后续动作”在有序列表中查找目标值def find(nums, target): left, right 0, len(nums) - 1 while left right: mid (left right) // 2 if nums[mid] target: return mid elif nums[mid] target: left mid 1 else: right mid - 1 return -1 a list(map(int, input().split())) a.sort() target int(input()) print(find(a, target))复习时务必注意循环条件。上面这份代码里写的是while left right对应区间只有一个元素时不进循环如果目标恰好是那个元素会直接返回-1。更稳妥的写法是while left right这样单个元素的区间也能被检查到。考场上如果发现“只有一个数查不到”先检查这里。4. 数据类型与比较运算期末客观题的丢分重灾区4.1 可变与不可变类型期末考试判断题最爱问“下面哪个是可变类型”。把这张表背熟考试时基本不用犹豫类型可变性说明数值int/float/complex不可变重新赋值是绑定新对象字符串 str不可变不能修改中间字符元组 tuple不可变单元素元组要加逗号列表 list可变append/extend/sort 都是原地操作字典 dict可变键不可变值可变集合 set可变元素不可下标访问这道题还有一种考法列表中存元素哪些能放、哪些不能放。集合的元素可以是元组因为元组不可变但不能是列表因为列表可变的 hash 值会变。同理列表不能作为字典的键字符串和元组可以。4.2 序列、映射与集合的底层细节序列类型包含字符串、列表、元组共同点是元素之间存在先后关系、通过序号访问。字典是映射类型存的是“键值对”不支持双向索引——你能通过键找值但不能通过值找键。集合这边有三个容易混淆的考点集合自动升序排列自动去重所以无法添加相同数值。集合不能用下标访问元素也不能用del删除部分元素要删就删除整个集合或用remove/discard。集合之间比较大小是看“包含关系”不是看元素个数。{1,2} {1,2,3}结果为True因为后者包含前者。还有一个经典的元组坑a (3) # 类型是 int b (3,) # 类型是 tuple单个元素的元组必须有逗号否则括号只是优先级的符号。4.3 比较运算与进制转换的易错细节这里集中整理几个选择题高频细节每条都是“看懂了就不会错”的送分题0.4 - 0.1 0.3的结果是False。浮点数在二进制下无法精确表示比较两个小数是否相等不要用用math.isclose()。复数之间只能比较是否相等不能比较大小。complex对象没有大小关系。两个元组比较时先比元素个数个数相同再从左到右逐位比较元素元素类型不同则无法比较。int(abc, x)表示把 x 进制下的字符串abc转换成十进制整数。x的范围是 2 到 36且每一位数字不能超过x-1。例如int(123, 16) 1*16^2 2*16 3 291。a b、a | b是按二进制位进行的运算不是逻辑与和逻辑或。a[:0] [a, b]可以在列表头部插入元素a[0:0]是空列表切片本身就是浅复制。4.4 赋值与拷贝共享引用还是独立副本这是列表考点里翻车率最高的一个必须动手敲一遍x [1, 2, 3] y x # 共用同一个列表id相同一方改全变 z x[:] # 浅拷贝新列表id不同互不影响 y.append(4) # x 也变成 [1, 2, 3, 4] z.append(5) # x 不受影响仍是 [1, 2, 3, 4]y x只是把x的引用复制了一份两者指向同一块内存“列表的切片是浅复制”这句话要背下来x[:]虽然生成了新列表但如果列表里装的是可变对象内层对象仍然是共享引用。考试里画内存图题只要看到直接赋值就默认两边联动看到切片、copy()就默认是独立头对象。5. 函数、作用域与面向对象从语法到设计思想5.1 函数定义的边界行为函数部分的选择题通常围绕这几条展开if __name__ __main__:的作用是保证代码可重用。当这个文件被当作脚本直接运行时条件成立被别的模块import时条件不成立避免执行测试代码。函数内可以用global声明全局变量用nonlocal修改嵌套函数外层的变量。变量作用域的查找优先级局部 外部nonlocal 全局 内建。globals()返回当前作用域所有全局变量的字典locals()返回局部变量的字典这两个函数名在判断题里经常出现。函数形参的默认值在定义时求值不是每次调用时求值——这条虽然正文没细讲但复习时看到“默认参数为可变对象”的题要警惕建议用None占位再在函数内部判断。迭代器与生成器也是一组固定考点iter()和next()是迭代器的两个核心方法函数里含yield语句就是生成器函数调用它返回生成器对象。生成器是惰性求值的用for遍历时逐个产生值。5.2 lambda 与内置函数速查期末卷子上有几组内置函数基本年年出现map(func, seq)把seq的每个元素传给func返回新序列。map(int, input().split())就是把每个字符串转成整数。enumerate(seq)同时拿到计数器默认从 0 开始和元素值返回元组序列。divmod(a, b)返回(a // b, a % b)用两个变量接收商和余数。ord(char)查看字符的 Unicode 编码值。isinstance(obj, class)判断对象是否属于某个类或类型的实例。任何对象都是object的实例所以isinstance(x, object)永远为True。random.choices(population, klength)从序列中随机选 k 个字符允许重复random.sample(population, k)随机选 k 个不允许重复。生成随机验证码常用string.ascii_letters string.digits作为字符池。5.3 类、构造函数与私有命名规则面向对象这部分先把基础背熟三个基本特征封装、继承、多态。构造函数名称固定为__init__创建对象时自动调用。类内部用def定义方法实例方法的第一个参数必须是self代表实例本身。实例方法只能在创建对象之后调用因为方法内部要引用实例的属性而这些属性在__init__执行后才存在。类的命名通常首字母大写方法名全小写、单词间用下划线连接。协变名词的那个坑类里以下划线开头的命名有三种含义判断题最爱混着考_xxx约定俗成的“私有”属性提醒别人别直接调用但 Python 不强制。__xxx双下划线开头、不以双下划线结尾会触发名字改名Name Mangling外部实际访问名变成_类名__xxx。__xxx__双下划线开头结尾是特殊方法比如__init__一般由 Python 解释器调用。写类的时候最常见的报错是missing 1 required positional argument: self原因就是没创建对象直接调用了实例方法。记住先对象 类名()再对象.方法()。6. 考前一周的复习清单与查漏补缺方法期末复习最后一周不要再看整本书直接对着下面的清单自测每一条能不看代码写出来就算过关考点模块自测方法出错信号输入输出5 秒内写出map(int, input().split())三件套分不清 split 返回列表还是字符串列表排序说出sort()与sorted()的区别写print(lst.sort())不觉得有问题去重保序默写sorted(set(lst), keylst.index)去重后顺序乱了数位排序默写keylambda x: sum(int(i) for i in str(x))忘记str(x)导致报错二分查找能说出left right和left right的区别单元素列表查不到目标数据类型10 秒内说出五种可变/不可变类型觉得元组是可变的浮点数比较知道用math.isclose()还在用比较小数拷贝与引用说清y x与y x[:]的内存差异认为复制了列表我的复习习惯是把所有“返回 None”的方法单独列一页纸。list.sort()、list.reverse()返回Nonelist.append()、list.extend()也返回None——它们都是原地操作打印必出None。每次考场上看到有人盯着None发呆我就知道他又踩了这个坑。从那以后每次遇到“方法还是函数”的判断题我强制自己先问一句“它会改变原对象吗”再决定返回值是什么。这个方法帮我避开了几乎所有排序相关的选择题陷阱。最后分享一个考前两小时的快速过法把这份笔记里的代码块全部遮住只看题目脑子里默写代码写不出来就标红考前一小时只看标红部分。把输入输出三件套、排序 key 参数、去重保序、二分查找这四段模板背到肌肉记忆期末程序题的基本盘就稳了。希望这份整理能帮到你复习顺利。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站