Python期末复习模拟卷:核心考点与易错题解析
简介面向Python期末备考的进阶模拟卷适合高校学生自测和教师出题参考。PDF文件共1个大小651KB轻量易用。已有4955人浏览学习口碑较有参考性。卷面包含20道选择题、5道填空题、5道程序分析题及编程题总分100分题型由易到难贴近期末出题风格覆盖面向对象、文件操作、Turtle绘图、异常处理、数据分析、Pandas、Matplotlib、正则表达式、网络爬虫和BeautifulSoup等核心模块。资源随附参考答案与知识点解析帮助核对正误并理解考点。题目中包含诸多典型陷阱如Turtle中goto()不改变方向、文件二进制写用wb、Series索引s_1[2]与s_1.loc[B]值不同、ndarray的size属性统计元素个数、正则^(ab|a)$不能匹配abba、requests发送POST用data或json参数、BeautifulSoup通过parent属性取父节点以及Pandas的merge默认内连接、Matplotlib的bar绘制条形图等。这些辨析能帮助学习者从典型错误中加深理解快速定位薄弱环节无论是考前突击还是日常巩固都是高效的复习材料。 每到期末总有一批学生夹着笔记本问我老师Python这门课到底怎么复习考试会考什么我的回答通常是一句话别去背题要把考点背后的原理搞懂。不过说实话光看知识点清单复习确实容易迷失方向翻十遍目录不如实打实做一套覆盖核心考点的模拟卷。我今天把这份Python编程期末模拟卷整理出来主要依据Python入门类课程最常见的考纲设计覆盖基础语法、数据结构与容器、函数、文件操作、异常处理、面向对象等核心模块题型包括选择题、程序阅读题、程序填空题和综合编程题每道题都带完整参考答案和解析。解析部分我会专门说清楚正确答案为什么对、干扰项错在哪、期末阅卷时大家最容易被扣分的习惯点在哪。正在备考期末的同学可以按考试时间限时做一遍想给新人做Python入门测评的开发者也可以直接拿这套题当题库参考。1. 这套模拟卷的考点分布期末Python到底在考什么1.1 高频考点与分值权重期末卷子不会出偏题怪题翻来覆去考的永远是那几个模块。我按大部分院校教材的章节顺序把核心考点和分值权重整理成一张表方便你对照自己的薄弱环节模块核心考点常见题型参考权重基础语法变量与数据类型、运算符、字符串、输入输出选择、填空15%-20%流程控制if/for/while、break/continue、循环else选择、程序阅读10%-15%数据容器列表、元组、字典、集合、推导式选择、程序阅读、填空20%-25%函数参数传递、返回值、lambda、递归、作用域程序阅读、编程15%-20%文件与异常open/with、读写模式、try/except/finally填空、编程10%-15%面向对象类与实例、继承、魔法方法、self编程题10%-15%标准库random、datetime、json、collections选择、综合题5%-10%这张表不是让你去背权重而是提醒你数据容器和函数几乎占去半壁江山复习时精力要优先压在这两块。很多同学一上来死磕面向对象结果列表推导式和参数传递还没过关最后的分数自然不好看。1.2 题型设计逻辑我这套卷子没有把题目按章节顺序平铺而是故意打乱模拟真实考试的感觉。选择题主要考判断力比如两个长得差不多的语法哪个才是对的程序阅读题考读代码能力适合用来区分背过和真懂了编程题则看动手能力阅卷时重点看逻辑结构、边界处理和输出格式。做这套卷子的时候不建议一边翻书一边做。你先按考试节奏限时90分钟写完再对照答案看解析。如果做程序阅读题时只能写出答案、说不出理由那这个知识点还没真正长在你身上考场上换个说法就又懵了。2. 基础语法题精讲看似送分其实藏着三个易错点2.1 变量赋值不是把值放进盒子选择题读下面的程序写出 print(x) 的输出结果。x 10 y x y 20 print(x)参考答案是 10。很多同学第一次看到这类题会选20理由是y都改了x还能不变吗。问题出在把变量理解成了盒子以为赋值的操作是把10复制一份放进两个盒子其实Python里的变量更像标签赋值是让标签贴到一个对象上。整数是不可变对象y x只是让y和x指向同一个10y 20则是让y改贴到新的20上x从头到尾没动过。真正危险的是把这个模型套到列表上如果写成x [1, 2, 3]; y x; y.append(4)再打印x结果是[1, 2, 3, 4]。因为列表是可变对象y和x贴的是同一个对象append是在对象内部修改两个标签看到的都是修改后的样子。这个不可变对象赋值互不影响、可变对象赋值会共享修改的对比几乎是每年期末的保留考题。2.2 字符串切片step-1 的反向陷阱填空题s Python写一个表达式取出倒序字符串 nohtyP。参考答案是s[::-1]。切片三个位置分别是 start:stop:stepstep为-1表示从右往左取start和stop都不写就是取整个序列。这道题看着简单错误率却很高最常见的错误答案是s[5:0:-1]输出是nohty少了最前面的P。原因在于stop是开区间取到索引1就停了根本取不到索引0。同样容易栽的地方还有s[1:4]很多同学会以为是取索引1到4共4个字符实际只取索引1、2、3结果是yth。记住切片是前闭后开区间这个规则可以救你不少分。复习时顺便把字符串常用方法过一遍比如split、join、replace、strip期末考试选择题里常拿这些来凑两个迷惑选项。2.3 逻辑短路and 和 or 返回的不一定是布尔值程序阅读题写出下面两个表达式的结果。result1 0 and 10 result2 0 or 10参考答案是 0 和 10不是False和True。Python的and和or返回的是参与运算的对象本身计算规则是and表达式左侧为假就直接返回左侧否则返回右侧or表达式左侧为真就直接返回左侧否则返回右侧。这就是短路求值。这个考点在期末卷里出现频率很高但很多人因为平时只写if a and b从没想过结果值是什么考场上一遇到x a or default这种写法就发懵。它其实是一种很实用的编程技巧比如从配置里取值时name input_name or 默认值可以在用户没输入时自动兜底。理解短路求值之后再遇到[] or ok返回ok、1 and 5返回5这类选择题就都不会慌。3. 函数题解析默认参数、循环else和lambda的正确理解3.1 可变默认参数定义时求值的后果程序阅读题读下面的代码写出第二次调用 add_item 的打印结果。def add_item(item, items[]): items.append(item) return items print(add_item(1)) print(add_item(2))参考答案是 [1] 和 [1, 2]。第一个print输出[1]没有悬念问题全在第二次调用。默认参数 items[] 是在函数定义的时候创建的不是每次调用都新建一个空列表所以第二次调用时传入的还是第一次用过的那个列表对象自然变成了[1, 2]。这道题几乎每届都有学生栽根因是不理解默认参数在定义时求值这一机制。如果想写每次调用都独立的效果标准写法是def add_item(item, itemsNone): if items is None: items [] items.append(item) return items期末复习遇到这类题不要只记答案要动手在解释器里敲一遍然后改一版itemsTrue看看报什么错印象会深很多。3.2 for...else循环结束后才执行的代码块程序阅读题判断输出结果。num 17 for i in range(2, num): if num % i 0: print(不是质数) break else: print(是质数)参考答案是是质数。for...else是Python里容易被忽略的语法当循环正常走完也就是没有被break中断时else块会执行如果循环中途break了else块不会执行。17没法被2到16之间的任何整数整除循环自然结束所以执行else打印是质数。很多同学不知道这个结构第一反应是用一个flag变量标记是否break然后循环外面再判断flag。这种写法不算错但代码更啰嗦而且容易漏掉reset flag的边界情况。能把for...else用对的人至少说明你翻过一遍官方文档不是只看了速成视频。不过要注意while...else也是同样的规则期末选择题偶尔会拿while来混淆。3.3 lambda与sorted按字典值排序的正确姿势编程填空现有字典 scores要求按分数从高到低排序并输出排序后的字典。scores {张三: 88, 李四: 95, 王五: 70} sorted_scores dict(sorted(scores.items(), keylambda x: x[1], reverseTrue)) print(sorted_scores)运行结果应该是 {李四: 95, 张三: 88, 王五: 70}。这里sorted默认按第一个元素排也就是字典的键但题目要按值排所以要用key参数告诉它取每个条目的第2个元素作为排序依据。lambda x: x[1]就是干这个的它接收一个元素返回排序要用的关键字。reverseTrue表示降序。这个知识点常见错误有两个一是直接写 sorted(scores)结果排的是键输出顺序完全不对二是lambda里写 return x[1]导致语法报错lambda的表达式本身就是返回值不需要、也不允许写return。考场上如果没把握可以先在草稿纸上写list(scores.items())看一眼数据结构再决定key函数怎么写。4. 容器与推导式把代码从能跑提升到写得漂亮4.1 列表去重保序set真的不是万能答案程序填空题已知 nums [3, 1, 3, 2, 1, 2, 4]要求写一行代码去重并保持元素第一次出现的相对顺序。一个简洁答案是result list(dict.fromkeys(nums))dict.fromkeys(nums)利用字典键唯一的特点把nums里的元素作为键构造一个字典键的顺序在Python 3.7及以上版本里保持插入顺序再转回列表就兼顾了去重和保序结果是[3, 1, 2, 4]。很多同学会直接写list(set(nums))去重没问题但set是无序的输出顺序无法保证在某些版本的Python解释器里跑出来的顺序可能跟预期完全不同。考试中如果题目明确要求保持原顺序set方案会被扣分。另一种列表推导式的做法[x for i, x in enumerate(nums) if x not in nums[:i]]也能实现但每次都要切片判断效率低考试时写出来没问题实际工程里数据量一大就不推荐。4.2 列表推导式的条件位置if到底写在哪编程填空题用列表推导式生成1到10之间所有偶数的平方。result [x ** 2 for x in range(1, 11) if x % 2 0]结果是[4, 16, 36, 64, 100]。这里最容易出错的写法是[x ** 2 if x % 2 0 for x in range(1, 11)]直接语法报错。原因是推导式里if的位置不同含义完全不同if放在for后面是过滤条件只有条件为真的元素才参与前面的表达式如果想把if放前面必须写成完整的三目表达式也就是x ** 2 if x % 2 0 else 0这样会把所有1到10的数字都保留下来只是奇数对应0。期末考试里如果给你三目表达式让你推导式改写或者反过来你心里要清楚一个条件在for前、一个条件在for后行为差别是变换每个元素和过滤某些元素。别看错了。4.3 元组解包与交换变量右侧先求值的顺序程序阅读题写出 print(a, b) 的输出结果。a, b 1, 2 a, b b, a b print(a, b)参考答案是 2 3。很多人看到第二行就懵了以为a已经被改成2了那a b会不会是2加2。其实Python的赋值操作会先完整计算右侧的表达式再把结果按位置解包赋给左侧。也就是说b和a b是在赋值发生前就求好了值分别是2和3然后a拿到2b拿到3。这个机制的经典应用就是a, b b, a交换变量不需要临时变量。期末程序阅读题很喜欢拿这种写法来考求值顺序你只要记住一句话赋值号的右边永远是先算完的不管左边长什么样。如果题目再进阶一点把右侧换成a 1, b 1同理右侧算完再赋值思路完全一样。5. 文件与异常处理综合编程题的完整答法5.1 with open的正确姿势与编码坑编程题读取 data.txt统计文件总行数和单词总数单词以空格分隔。参考答案with open(data.txt, r, encodingutf-8) as f: line_count 0 word_count 0 for line in f: line_count 1 word_count len(line.split()) print(line_count, word_count)用with打开文件最大的好处是出异常或代码结束时文件会被自动关闭不需要手动调用close。很多教材还在教f open(...)然后f.close()但如果中间代码抛异常close可能永远轮不到执行文件句柄就漏掉了。考试时用with是标准加分写法。编码参数是我要重点强调的读中文文本推荐显式写 encodingutf-8否则在Windows默认编码环境下很容易出现UnicodeDecodeError期末机考环境里这就是硬伤。还有遍历文件对象用 for line in f是一行一行读不需要一次性把所有内容塞进内存。如果题目数据量写的是大文件这种逐行处理的写法就是阅卷官想看到的答案。5.2 try/except/else/finally的执行顺序程序阅读题写出下面代码的输出。try: x int(abc) except ValueError: print(值错误) except: print(其他错误) else: print(没有异常) finally: print(结束)参考答案是两行值错误、结束。int(abc)会抛出ValueError被第一个except捕获打印值错误else块只会在try块没有异常时执行这里不会执行finally块无论有没有异常都会执行所以最后打印结束。这道题考察的是完整异常结构的顺序。答题时要注意两个地方一是except的顺序很重要ValueError要写在通用except的前面因为异常匹配是从上往下找第一个能匹配的二是finally和else别搞混finally是无论怎样都执行else是只有没异常才执行。如果题目把except写成except:那它捕获一切异常包括ValueError输出就变成其他错误这两个选项经常摆在一起迷惑人。5.3 CSV学生成绩汇总比单纯split更稳的方案编程题已知 scores.csv 文件包含表头和两列数据姓名、成绩计算平均分并输出所有不及格低于60分的学生姓名。参考答案import csv with open(scores.csv, encodingutf-8) as f: reader csv.reader(f) next(reader) # 跳过表头 scores [(row[0], int(row[1])) for row in reader] avg sum(s for _, s in scores) / len(scores) failed [name for name, s in scores if s 60] print(f平均分: {avg:.1f}) print(不及格:, .join(failed))这里有几个容易出问题的细节。第一必须用 next(reader) 跳过表头否则第一行姓名、成绩会被当成数据处理int(成绩)直接报错。第二成绩要用 int() 转成整型字符串不能比较大小。第三用csv模块读取比自己手动 split(,) 更可靠因为csv标准里字段可能带引号、逗号split会拆错。第四平均分的输出建议用 f-string控制小数位数例如{avg:.1f}这是阅卷时明确看格式的点。如果题目没有提供scores.csv的具体内容考试时完全可以先print(list(reader))看一眼数据长什么样再决定跳过几行表头。没有数据情况下直接凭空写代码反而容易踩坑。6. 面向对象综合题类设计、继承与阅卷人眼中的评分点6.1 银行账户类从类名到方法签名的标准写法编程题设计一个BankAccount类包含owner账户名和balance余额两个属性提供deposit(amount)存款方法和withdraw(amount)取款方法取款金额超过余额时提示余额不足。参考答案class BankAccount: def __init__(self, owner, balance0): self.owner owner self.balance balance def deposit(self, amount): self.balance amount return self.balance def withdraw(self, amount): if amount self.balance: print(余额不足) return False self.balance - amount return self.balance__init__方法负责初始化实例属性balance默认给0这样创建账户时可以只传owner也可以直接给一个初始余额。每个方法的第一个参数必须写self否则调用时会报missing 1 required positional argument之类的错这是新手最常见的翻车点。这里说一个容易被忽略的设计点withdraw方法里先判断、再操作这是一道安全校验题。无论取款还是转账凡是涉及金额变动的操作都要先校验再变更状态。如果题目还要求存款金额必须大于0同样在deposit里加一个判断。复习时多想想这些边界情况考试编程题拿到满分的概率会大很多。6.2 继承与super()输出判断题的拿分点程序阅读题写出 print 的结果。class Animal: def __init__(self, name): self.name name def speak(self): return ... class Dog(Animal): def __init__(self, name): super().__init__(name) self.sound 汪汪 def speak(self): return self.sound dog Dog(旺财) print(dog.name, dog.speak())参考答案是旺财 汪汪。Dog类继承Animal类自己定义__init__时通过super().init(name)先执行父类的初始化逻辑把name属性设好然后才添加自己特有的sound属性。speak方法在子类里被重写了调用时走子类版本返回汪汪。这道题的核心是两点一是super()的写法子类想复用父类__init__就必须手动调用不然name属性压根不会初始化二是方法重写子类里定义了同名方法父类的方法就被覆盖。如果类里还定义了__str__魔法方法print(对象)就会调它来生成可读输出否则打印出来是一长串内存地址这个知识点在期末选择题里也常出现。6.3 阅卷时我看到过的那些扣分细节综合编程题在期末卷里分值最高也是最容易丢分的地方。我批改过几百份卷子有几类问题几乎年年出现专门列出来提醒一下。忘写self方法定义里第一个参数没有self调用时第一个实参就会被误认为self导致参数错位。print和return混用题目要求返回计算结果时你在方法里print主程序再print一次输出里多出一行None这个None就是因为函数没返回值。类名和变量名的规范类名推荐用驼峰方法名和变量名用小写加下划线虽然不规范不会被直接扣语法分但整体印象分多少有影响。只写主流程不处理边界比如取款时余额不足、存款金额为负数、列表为空时求平均这些情况能想到一个写一个都是实打实的加分点。有同学问我考试时间不够综合题最后没写完怎么办。我的建议是先把类的框架、属性和方法签名搭出来再把每个方法里最核心的判断逻辑写上就算最后一两行没补完阅卷也能看出你掌握了类的基本结构比完全空白拿到的分多得多。7. 考前几天我是建议学生这样用这套卷子的模拟卷做完了答案也对完了剩下的时间怎么安排也很重要。我的建议是不要急着刷第二套新题先把这套卷子里的错题归个类是语法细节丢了分还是程序阅读的思路不对又或是编程题的书写规范问题。按错误类型去翻教材对应章节比盲目刷题效率高得多。考前最后一天我不建议再做新题了。把这份卷子里的程序阅读题拿出来不看答案自己在草稿纸上重新推一遍输出结果再把两道综合编程题手写一遍注意缩进和格式。手写代码和敲键盘的感觉完全不同期末机考时很多人会突然忘记某个方法名怎么拼但这种肌肉记忆反而靠写才能留下来。上考场时记得两件事第一程序阅读题就算不确定也要把思路写在旁边有时推理过程也能拿部分分第二编程题写完一定要心里模拟一遍数据流比如循环边界、字典键是否存在、异常路径会不会触发这些细节往往决定最终分数档位。准备充分的人考场上就会发现这套卷子给了你底气。本文还有配套的精品资源点击获取

相关新闻

最新新闻

日新闻

周新闻

月新闻