
简介这份资源是面向K12阶段及高校初学者的Python程序设计期末考试题合集共22页以PDF形式呈现适合用于期末复习、自测与教学参考。题目覆盖语法、数据结构、控制流、函数、错误处理等核心概念题型包括选择题、概念填空、阅读程序并回答问题、程序填空和程序设计五类能较全面地检验编程基础与逻辑思维。压缩包内共1个PDF文件约302KB结构紧凑便于打印或在线查阅。内容预览显示试题涉及表达式求值、保留字识别、列表与字符串操作、循环执行次数比较、自顶向下逐步求精、形参与实参传递、归并排序复杂度、计算思维特征等具体考点并附有部分答案解析可帮助读者理解易错点。目前已有2389人学习下载适合需要系统刷题、查漏补缺的Python学习者使用。1. 从一份 22 页的 Python 期末卷子说起每年六月高校机房里总有一批人对着屏幕上的SyntaxError发呆。Python 程序设计期末测评通常是一份 22 页左右的卷子前半部分是选择、填空、读程序写结果后半部分是编程题最后往往还压着一两道综合应用题。它考的不是你会不会背list.append()的拼写而是你能不能在一小时内把顺序结构、分支、循环、函数、文件读写串起来解决一个具体问题。这份卷子的难点集中在三处读程序写结果要求你精确模拟解释器的执行顺序编程题要求你处理边界输入综合题要求你把多个知识点拼装成完整逻辑。新手容易在缩进和类型转换上丢分有经验的人反而容易在“想太多”上翻车——题目要的是标准解法不是工程最优解。下面按考试实际会遇到的顺序把每一类题型的解法、参数和踩坑点讲清楚。2. Python 期末卷子的题型拆解与顺序结构程序设计题2.1 选择题和填空题到底在考什么选择题高频考点集中在四块可变类型与不可变类型的区别、is与的差异、切片越界行为、以及运算符优先级。填空题则偏爱内置函数的返回值比如sorted()和sort()的区别、range()的三个参数、字符串方法的返回值是原串还是新串。一个典型陷阱是a [1,2,3]; b a; b.append(4)问a的值。答案是[1,2,3,4]因为列表是可变对象赋值传递的是引用。如果换成b a[:]或b a.copy()a就不受影响。这类题在 22 页卷子里通常占 15 到 20 分丢分往往不是因为不会而是因为看题太快。提示做读程序题时在草稿纸上画出变量表逐行更新每个变量的当前值比在脑子里模拟可靠得多。2.2 顺序结构程序设计题的固定套路顺序结构题是整份卷子里最送分的部分但每年都有人在这里翻车。常见形式是给一个公式或业务规则要求输入若干值、计算、输出结果。比如“输入圆的半径计算并输出面积和周长保留两位小数”。# 顺序结构典型题计算圆面积和周长 import math radius float(input(请输入半径)) # 输入必须转 floatinput 返回的是 str area math.pi * radius ** 2 # ** 优先级高于 * perimeter 2 * math.pi * radius print(f面积{area:.2f}) # :.2f 表示保留两位小数 print(f周长{perimeter:.2f})这段代码的逻辑很直白先拿到输入再做计算最后格式化输出。参数上要注意三点。第一input()永远返回字符串不转float或int直接参与算术运算会报TypeError。第二math.pi比手写3.14精度高考试里如果题目没指定就用math.pi。第三f{x:.2f}的格式化写法比round()更稳因为round()在银行家舍入规则下可能给出意外结果。顺序结构题最常见的失分点是输出格式。题目要求“输出面积和周长”你输出面积: 12.34还是面积12.34在自动判题系统里可能就是 0 分和满分的区别。建议养成习惯先看题目给的样例输出逐字符对齐。2.3 输入输出的边界处理期末卷子的编程题通常会给一组样例输入输出但判题时用的测试数据往往包含边界情况。整数输入要考虑负数、零、极大值浮点数要考虑精度字符串要考虑空串和前后空格。# 处理多值输入的标准写法 data input().split() # 按空白切分返回列表 a, b int(data[0]), int(data[1]) # 逐个转换避免 map 后忘记 list 化 # 如果一行有不确定个数的整数 nums list(map(int, input().split())) total sum(nums) print(total)split()不带参数时按任意空白字符切分能同时处理空格和制表符。map(int, ...)返回的是迭代器Python 3 里必须用list()包一层才能直接索引或打印。如果题目说“输入若干行每行一个整数以 0 结束”那就不能用固定次数的input()得用循环加终止条件。3. 分支与循环读程序写结果的精确模拟方法3.1 if-elif-else 的执行顺序陷阱分支结构本身不难难的是嵌套和短路求值。看这道典型题x 10 if x 5: if x 8: print(A) elif x 6: print(B) else: print(C)输出是A。很多人会误以为elif会继续判断但elif只在同级if不成立时才执行。嵌套时else永远匹配最近的未配对if缩进决定了归属。读程序题里如果出现多层嵌套建议从最内层往外逐层标注条件是否成立。另一个高频陷阱是and和or的短路特性。if x ! 0 and 10 / x 1这种写法当x为 0 时不会报ZeroDivisionError因为and左边为假就直接跳过右边。考试里经常用这个特性出题问“程序是否报错”。3.2 for 循环与 range 的三个参数range()是期末卷子里出现频率最高的内置函数之一。它的三个参数形式range(start, stop, step)决定了循环次数和取值序列。写法取值序列循环次数range(5)0,1,2,3,45range(1,5)1,2,3,44range(0,10,2)0,2,4,6,85range(5,0,-1)5,4,3,2,15range(0)空0读程序题常考for i in range(5, 0, -1)的循环体执行次数答案是 5 次因为stop是开区间不包含 0。如果写成range(5, 0)而不给步长默认步长是 1循环体一次都不执行因为从 5 开始每次加 1 永远到不了 0。# 累加求和的标准写法 total 0 for i in range(1, 101): # 1 到 100 total i print(total) # 5050这段代码的逻辑是初始化累加器然后逐个累加。参数上注意range(1, 101)的stop写 101 才能包含 100。考试里如果要求“求 1 到 n 的和”把 101 换成n 1即可。3.3 while 循环与 break/continue 的配合while循环在期末卷子里通常和break、continue一起考。break跳出整个循环continue跳过本次剩余语句进入下一次判断。读程序题里经常出现while True加break的结构要求写出最终输出。# 猜数字游戏的简化版统计 1 到 100 中第一个能被 7 整除的数 i 1 while True: if i % 7 0: print(i) break i 1输出是 7。这里while True是死循环靠break退出。如果题目改成“输出 1 到 100 中所有能被 7 整除的数”就不能用break得用for循环或while i 100。考试里要看清“第一个”还是“所有”这两个词决定了用不用break。注意while循环里如果忘记更新循环变量会变成死循环。判题系统遇到死循环通常直接判超时不给部分分。4. 函数、文件与综合编程题的落地写法4.1 函数定义与参数传递的得分点期末卷子的函数题一般要求“定义函数实现某功能并调用验证”。评分点通常包括函数名是否正确、参数个数是否匹配、是否有返回值、调用时是否传了正确类型的实参。def is_prime(n): 判断 n 是否为素数返回 bool if n 2: return False for i in range(2, int(n ** 0.5) 1): if n % i 0: return False return True # 调用验证 for num in [1, 2, 7, 9, 11]: print(num, is_prime(num))这段代码的逻辑是小于 2 的数直接返回False然后从 2 试到sqrt(n)只要有一个能整除就返回False全部试完没找到因子就返回True。参数上int(n ** 0.5) 1是为了覆盖平方根取整后的边界比如n9时sqrt(9)3range(2, 4)会试到 3正确判定 9 不是素数。函数题最常见的失分点是忘记return只写了print。题目要求“返回”就必须用return要求“输出”才用print。另外默认参数和关键字参数偶尔会考比如def f(a, b2)调用时f(1)和f(1, 3)的区别。4.2 文件读写的标准模板文件操作在 22 页卷子里通常出现在最后几页分值高但套路固定。常见要求是“读取文件统计某内容写入新文件”。# 统计文件中每个单词出现的次数写入结果文件 from collections import Counter with open(input.txt, r, encodingutf-8) as f: text f.read() words text.split() # 按空白切分成单词列表 counter Counter(words) # 直接统计频次 with open(output.txt, w, encodingutf-8) as f: for word, count in counter.most_common(): f.write(f{word}: {count}\n)逻辑分三步读文件、统计、写文件。参数上encodingutf-8必须写否则中文环境可能报UnicodeDecodeError。with open(...) as f会自动关闭文件比手动f.close()安全。Counter.most_common()返回按频次降序排列的列表如果题目要求按字母序输出就改成sorted(counter.items())。文件题最容易丢分的地方是路径和模式。r只读文件不存在会报FileNotFoundErrorw写入会清空原文件a追加。考试里如果题目说“在原文件末尾添加”就必须用a而不是w。4.3 综合应用题的拆解策略综合题通常给一段业务描述要求写完整程序。比如“输入一批学生成绩计算平均分、最高分、最低分并输出不及格学生名单”。这类题不要一上来就写代码先拆成四步输入、存储、计算、输出。# 学生成绩统计综合题 n int(input(请输入学生人数)) scores [] names [] for i in range(n): line input().split() names.append(line[0]) scores.append(float(line[1])) avg sum(scores) / len(scores) print(f平均分{avg:.2f}) print(f最高分{max(scores):.2f}) print(f最低分{min(scores):.2f}) print(不及格名单) for name, score in zip(names, scores): if score 60: print(name)这段代码用两个平行列表存姓名和成绩计算部分直接用内置函数sum、max、min输出部分用zip配对遍历。参数上float(line[1])把成绩转成浮点数避免整数除法问题。如果题目要求“按成绩降序输出”可以在最后加sorted(zip(scores, names), reverseTrue)。综合题的评分通常按功能点给分输入正确给 2 分计算正确给 3 分输出格式正确给 2 分。所以即使算不出平均分也要把输入和输出框架写出来能拿的分先拿到。5. 用 Python 筛选一样的元素与考试排错技巧5.1 列表去重与筛选相同元素的三种写法期末卷子里经常出现“找出两个列表中都存在的元素”或“筛选出列表中重复出现的元素”。这类题在热搜里对应“python筛选一样的”实际考的是集合运算和计数。# 方法一集合交集适合找共同元素 a [1, 2, 3, 4, 5] b [3, 4, 5, 6, 7] common list(set(a) set(b)) print(common) # [3, 4, 5]顺序不保证 # 方法二列表推导保持原顺序 common_ordered [x for x in a if x in b] print(common_ordered) # [3, 4, 5] # 方法三统计频次找出重复元素 from collections import Counter c Counter(a b) duplicates [k for k, v in c.items() if v 1] print(duplicates) # [3, 4, 5]方法一最快但集合是无序的如果题目要求“按原列表顺序输出”就不能用。方法二保持顺序但x in b在b很大时是 O(n) 查找整体 O(n²)。方法三适合找“出现次数大于 1”的元素Counter的items()返回键值对v 1筛选出重复项。提示考试里如果没要求顺序优先用集合运算代码短且不容易错。如果要求顺序用列表推导。5.2 常见报错信息与快速定位期末机考时报错信息就是最好的提示。下面这张表覆盖了 90% 的考试报错。报错原因修法SyntaxError少括号、少冒号、缩进混用看报错行号检查上一行末尾IndentationError空格和 Tab 混用全选统一转空格TypeError字符串和数字直接运算用int()或float()转换ValueError转换的字符串不是合法数字检查输入是否含字母或空串IndexError列表下标越界检查range边界和len()KeyError字典键不存在用dict.get(k, 默认值)ZeroDivisionError除数为 0加if判断SyntaxError的报错行号有时指向下一行因为解释器读到下一行才发现上一行没写完。IndentationError在机房电脑上特别常见因为不同编辑器对 Tab 的宽度定义不同。建议在 VS Code 里把editor.insertSpaces: true和editor.tabSize: 4设好避免混用。5.3 时间分配与检查清单22 页卷子通常给 90 到 120 分钟。建议分配选择题和填空题 20 分钟读程序写结果 20 分钟编程题每题 15 分钟综合题 25 分钟留 10 分钟检查。检查时按这个顺序过一遍输入是否转了类型、循环边界是否包含端点、输出格式是否和样例一致、函数是否有return、文件是否用了with open。最后一条特别重要如果题目要求“输出结果”你的程序只计算不打印判题系统拿不到任何输出直接 0 分。考试前把input().split()、list(map(int, ...))、f{x:.2f}、with open(...) as f这几个模板默写一遍考场上直接套比现场想快得多。本文还有配套的精品资源点击获取