尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Python程序设计期末理论笔试题及答案解析(高频考点+易错点)

Python程序设计期末理论笔试题及答案解析(高频考点+易错点) 简介面向Python初学与期末备考人群的《Python程序设计》理论笔试题带答案资料包帮助快速梳理基础语法与高频考点。资源围绕变量、数据类型、控制流、函数、异常处理、文件操作、正则表达式和字符串操作等核心内容整理了20道选择题、填空题、阅读程序题、简答题及编程题并逐题给出答案与解析适合考前自测和知识查漏。包体为1个PDF文件大小仅244KB便携易用。已有4292人学习下载是高校学生和自学Python者考前冲刺的实用资料。 我整理了一份《Python程序设计》期末考试理论笔试题带答案。标题看着简单但这类资料其实是很多学生期末周最需要的东西。跟你们说实话我当年学Python的时候也是四处找题刷因为光看课本不做题到了考场上真的会懵。理论笔试不像上机操作它考察的是你对语法细节、运行逻辑、概念理解的掌握深度很多平时写代码没注意过的“怪癖”笔试里全给你挖出来。这份试题不是网上随便拼凑的那种而是结合了近几年高校《Python程序设计》课程的常见考点、高频易错点以及我自身踩坑经验总结出的模拟卷。从题型分布来看基本覆盖了绝大多数院校期末笔试的固定板块单项选择题、填空题、简答题、程序阅读题、编程题。每个题我都附了详细解析重点题目标注了易错点和记忆技巧。1. 考情分析与复习重点1.1 大多数院校Python期末笔试的出题逻辑先聊聊这门课期末笔试到底考什么。以我了解到的多所高校出题风格来看Python程序设计基础课的期末考试笔试部分通常占60%到70%上机实操占30%到40%。理论笔试侧重考察这几个层次第一层是语法细节记忆第二层是程序运行结果分析第三层是问题解决思路第四层是手写代码能力。其中最容易丢分的是第二层和第三层。程序运行结果分析题目说白了就是“人类模拟CPU”你要在脑子里把代码一步步跑完输出什么就是什么。很多同学平时用IDE跑代码习惯了报错了就顺手改但对程序执行过程本身缺乏推演能力到笔试就露馅。我见过太多学生在阅读题上明明答案就差一个换行符或者一个逗号结果白白扣掉好几分。1.2 依据高频考点圈定复习范围从热搜词里能看出来大家在搜的东西基本可以归类为几个方向Python基础语法for循环、while循环、列表字典操作、Python安装环境配置pycharm、vscode环境配置、Python的就业或实践方向爬虫、数据分析。这跟期末笔试的命题方向几乎完全吻合。尤其需要注意的是期末笔试命题的“重灾区”集中在字符串方法、列表推导式、字典的键值操作、函数默认参数、局部变量与全局变量、异常处理、lambda表达式、文件读写模式、面向对象的基本概念。这些知识点每一个都能出阅读题和编程题而且都是学生容易粗心犯错的地方。所以在做这份模拟卷之前我建议你先把这些知识点整体过一遍再拿卷子自测效果会好很多。2. 试题正卷部分2.1 一、单项选择题每题2分共15题共30分下列哪个选项是Python中合法的变量名 A. 2name B. _name C. for D. name-1答案B解析Python变量名由字母、数字、下划线组成不能以数字开头不能是关键字。A以数字开头错误C的for是关键字D包含减号运算符非法。B虽以下划线开头但是合法变量名。很多人会觉得下划线开头的变量名“难看”但它在Python里是完全合法的而且在类内部使用双下划线开头还有特殊含义私有属性这点笔试也常考。表达式3 * 2 ** 3 // 4 % 2的值是 A. 0 B. 1 C. 2 D. 3答案B解析Python运算符优先级中**最高所以先算2的三次方等于8。然后等优先级运算符从左到右依次计算3 * 8 2424 // 4 66 % 2 0。这里有两个考点一是记住**的优先级高于乘除二是整除//和取余%优先级相同必须从左往右算。很多同学上课学过优先级但做题时凭感觉跳步结果就错了。关于列表lst [1, 2, 3, 4]下列哪种写法能正确得到[2, 3] A. lst[1:3] B. lst[1:2] C. lst[2:4] D. lst[1:-2]答案A解析列表切片左闭右开。lst[1:3]取索引1和2的元素即2和3。B选项取索引1到2之前只拿到[2]。C选项取索引2到4之前得到[3, 4]。D选项索引-2对应倒数第二个元素也就是3所以切片是索引1到倒数第2个之前还是只有[2]。切片是笔试必考内容也是实际编码高频操作务必掌握负索引和省略写法的具体行为。下列代码的输出结果是 s hello python print(s[-6:])A. hello B. python C. lo pyt D. llo py答案B解析s字符串长度为12s[-6:]表示从倒数第6个字符开始一直取到末尾。数一下hello python中空格占一个位置倒数第6个字符正好是p所以输出python。这道题考负索引与切片组合属于阅读题的基础题型。如果这道题都做错说明切片还没真正理解建议多画下标示意图练习。关于字典下列说法正确的是 A. 字典的键可以是列表 B. 字典的值必须是不可变类型 C. 字典的键必须是不可变类型 D. 字典的值不能重复答案C解析字典的键必须可哈希也就是不可变类型如字符串、数字、元组。列表是可变类型不能作为键。字典的值可以是任意类型而且可以重复。这是笔试选择题最爱挖的坑。另外提一句两个内容相同的元组作为键在字典中会被视为同一个键这也是常考点。下列哪个语句不是Python合法的异常处理关键字 A. try B. except C. finally D. throw答案D解析Python异常处理结构包括try、except、else、finally。throw是Java和C等语言的语法Python中主动抛出异常的关键字是raise。这个题目看起来简单但说明了一个普遍问题很多同学是学了多门编程语言的容易发生语法混淆。记住学Python就按Python的规矩来笔试不会因为你学过Java就给你加分。以下函数定义调用f(5)的结果是 def f(a, b2, c3): return a b * cA. 15 B. 11 C. 17 D. 报错答案B解析调用时只传了第一个实参5b和c使用默认参数值。结果 5 2 * 3 11。这里考的是默认参数的使用同时也可以延伸思考假设调用f(5, c4)结果就是5 2 * 4 13。默认参数和关键字参数结合使用也是高频考点做题时注意区分“按位置传参”和“按关键字传参”。Python中用于生成随机整数的函数是 A. random.random() B. random.randint() C. random.choice() D. random.shuffle()答案B解析randint(a, b)返回闭区间[a, b]内的随机整数。random()返回[0.0, 1.0)的浮点数。choice()从序列中随机选一个元素。shuffle()用于原地打乱列表顺序。这属于模块记忆型题目没有技巧就是要背。我建议复习时把random模块的常用函数整理成表不光笔试能用做爬虫时写User-Agent轮换也要用到。下列代码的输出结果是 for i in range(1, 5): if i 3: continue print(i, end )A. 1 2 3 4 B. 1 2 4 C. 1 2 D. 1 2 3答案B解析循环从1到4当i等于3时continue跳过当前迭代不执行print。所以输出1 2 4。注意print里end 把默认的换行变成了空格所以输出在同一行。很多同学知道continue后还是会把3打出来就是因为对执行时机理解不到位。另外如果题干把continue换成break输出则是1 2。这类变体题目要灵活应对。列表lst [3, 1, 2]执行lst.sort()后lst的值是 A. [3, 1, 2] B. [1, 2, 3] C. [2, 1, 3] D. None答案B解析列表的sort()方法对原列表进行原地排序不返回新列表但原列表会被修改为有序状态。和它形成对比的是sorted()函数sorted()会返回一个新的排好序的列表不影响原列表。这个区别笔试和面试都爱考务必要记住。实际写代码时如果你不需要保留原列表顺序用sort()更节省内存。下列哪个选项可以正确打开文件并以追加模式写入 A. open(a.txt, r) B. open(a.txt, w) C. open(a.txt, a) D. open(a.txt, rb)答案C解析r只读w覆盖写入a追加写入rb以二进制只读。追加模式是a这个没什么好讨价还价的就是硬记。不过我可以提供一个记忆技巧a代表append追加w代表write但会覆盖原有内容r代表read。用with语句管理文件上下文是更推荐的做法可以自动关闭文件笔试的简答题有时会考这个知识点。关于Python中的元组下列说法正确的是 A. 元组创建后可以修改元素 B. 元组是不可变类型 C. 元组只能包含数字元素 D. 元组和列表没有任何区别答案B解析元组的不可变性体现在创建后不能增删改元素。虽然元组内部如果包含可变对象比如列表那个列表本身的内容可以变化但这个知识点一般不会挖这么深。元组可以作为字典的键而列表不行这是两者最重要的区别之一。笔试偶尔会出判断题“元组可以作为字典的键”这句话是对的。下列代码的输出结果是 x 10 def func(): x 20 return x func() print(x)A. 20 20 B. 10 20 C. 20 D. 10答案D解析函数内部的x 20是局部变量不影响全局变量x 10。调用func()后函数内部的x被赋值为20并返回但外部x仍然是10。最后print(x)输出10。这题是全局变量和局部变量的经典考法。如果函数内部要修改全局变量必须先用global x声明。这个考点不仅笔试考实际开发中也容易造成困惑值得反复理解。下列哪种数据类型是有序且可变的 A. 列表 B. 元组 C. 集合 D. 字典答案A解析列表有序、可变元组有序、不可变集合无序、可变字典有序Python 3.7起保持插入顺序、可变。严格来说这题放在过去有争议因为Python 3.6之前字典无序但Python 3.7之后官方确认了字典保持插入顺序。所以现在如果选项里同时出现字典和列表最佳答案还是列表。集合无序的特性导致它不能通过索引访问元素这点也常拿来出判断题。表达式bool([])的值是 A. True B. False C. None D. 报错答案B解析空列表、空字符串、空字典、空集合、数字0都对应布尔值False。这题属于Python的“真值测试”考点。在写的条件语句里if lst:判断列表是否为空就是利用了这种特性。2.2 二、填空题每空2分共10空共20分Python中定义函数使用关键字______定义类使用关键字______。答案defclass解析这个送分题没有任何技巧纯记忆。但我要多说一句考场上真的有人会临时想不起来def怎么写因为平时IDE里敲两三个字母就联想出来了。建议考前手写几遍基础关键字找找手感。表达式len(Python)的结果是______。答案6解析len()函数返回序列的长度。Python这个单词有6个字母不加引号的话注意区分字符串和变量名的差别。若问题是len(python)同样的答案。注意区分中文字符和英文字符一个中文字符的len()结果也是1不是2。lambda x: x * 2是一个______函数。答案匿名解析lambda表达式创建的是匿名函数常用于简单操作或者作为参数传递给高阶函数比如sorted的key参数。关于lambda我补充一个很常见的笔试变体list(map(lambda x: x ** 2, [1, 2, 3]))的结果是多少答案是[1, 4, 9]。lambda和map配合使用的经典考法务必掌握。在Python中使用______语句可以捕获并处理异常。答案try/except或try解析try块中放入可能出错的代码except后接处理异常的代码。也可以写成try...except...finally完整结构。注意大小写except不是excepting也不是exception。将字符串123转换为整数使用______函数。答案int()解析int(123)的结果是整数123。字符串转整数时如果内容不是纯数字比如int(12.3)或int(abc)会抛ValueError异常。笔试经常出转换失败的问题问你是否报错、报什么错所以这里一定要记清楚。用于清除列表所有元素的方法名是______。答案clear()解析lst.clear()可以直接清空列表的所有元素原列表变为空列表[]。注意它和lst []的区别clear()是原地修改而重新赋值只是把变量指向一个新列表。笔试如果考到原列表是否被其他变量引用时这个区别就很重要了。文件操作完成后应该调用______方法关闭文件。答案close()解析虽然用了with语句后不需要手动调用close()但传统的文件操作模式中close()是标准动作。填空题就直接填close。注意括号不要漏写笔试填空题空括号也算分的经常有同学明明知道答案括号忘写被扣分。Python中获取用户键盘输入的函数是______。答案input()解析这是最基础的函数之一不管什么语言都逃不掉。注意input()返回的类型永远是字符串所以需要数字时必须先转换类型。比如age int(input(请输入年龄))这种写法在第二章就开始出现但考场上仍然有人对使用int()包一层感到犹豫。代表逻辑“真”的关键字在Python中是______。答案True解析注意True首字母大写。Python中布尔值只有True和False两种都是大写开头。很多从C语言转过来的同学会写成true或者TRUE这在Python里都是不对的。如果真的在考试中写错那只能说是习惯问题没有别的原因。循环语句中提前结束整个循环应使用______关键字。答案break解析break可以提前跳出整个循环体continue则只是跳过本次循环继续下一次。这两个的对比是必考题。题目如果问“跳过本次循环”答案就是continue如果问“结束整个循环”答案就是break。一字之差答案不同。3. 简答题与程序输出题精讲3.1 三、简答题共3题共20分简述Python中和is的区别。6分答案要点比较两个对象的值是否相等is比较两个对象的身份是否相同即是否指向内存中的同一块地址。对于整数、字符串等不可变对象Python可能会进行缓存导致部分情况下is判断也为True但不应依赖这个行为。实际编码中推荐用判断值相等is通常用于和None作比较例如if x is None:。这个知识点虽然基础但期末笔试的简答题并不少见。答的时候不要只说一句话就完事最好举一个例子说明。比如a [1, 2, 3] b [1, 2, 3] print(a b) # True值相同 print(a is b) # False不同对象这个例子写上去哪怕表述不太专业阅卷老师也能看出你是真理解了。我之前帮老师改过卷子最怕看到压根不展开的“答案”一看就是背书背下来的根本没有理解。什么是列表推导式请用列表推导式生成1到10之间的偶数列表。6分答案要点列表推导式是Python提供的一种简洁创建列表的语法结构基本结构为[表达式 for 变量 in 可迭代对象 if 条件]。本题答案[i for i in range(1, 11) if i % 2 0]结果为[2, 4, 6, 8, 10]。这道题在简答题里不算难但关键在于书写格式。千万注意列表中for和if的顺序不要写成[i if i % 2 0 for i in range(1, 11)]这种写法是语法错误的。条件判断要放在for的后面这是初学最容易犯的错误。略微变体一下如果需要奇数的平方列表可以写成[i ** 2 for i in range(1, 11) if i % 2 ! 0]这种变体在选择题里也经常出现。简述Python中可变对象与不可变对象的区别并举例说明。8分答案要点可变对象创建后内容可以修改如列表、字典、集合不可变对象创建后内容不可修改如数字、字符串、元组。不可变对象作为函数参数时在函数内部修改不会影响外部变量可变对象作为参数时在函数内部修改会影响原对象。这题得分率普遍不高因为很多学生能背出概念但举不出好例子或者解释不清函数传参的行为。建议答题时这样写def append_item(lst): lst.append(4) my_list [1, 2, 3] append_item(my_list) print(my_list) # [1, 2, 3, 4]原列表被修改了这个例子能体现可变对象在函数中会被修改的特征。而字符串的例子def change_str(s): s world my_str hello change_str(my_str) print(my_str) # hello原字符串不变把这两个例子都写出来8分基本就稳了。3.2 四、程序阅读题共2题共15分写出运行结果写出以下程序的输出结果。7分total 0 for i in range(1, 6): if i % 2 0: continue total i print(结果是:, total)答案结果是: 9解析range(1, 6)生成1、2、3、4、5。当i是偶数2和4时continue跳过累加。所以只累加1 3 5total 9。这个题虽是基础题但可以故意改成让i是奇数continue答案就变成2 4 6。考试时一定要看清是continue还是break是奇还是偶一字之差结果完全不同。写出以下程序的输出结果。8分def fun(a, b[]): b.append(a) return b print(fun(1)) print(fun(2))答案[1] [1, 2]解析这是一个非常经典的Python陷阱题。默认参数b[]在函数定义时只初始化一次后续调用如果没有传入b会复用同一个列表对象。第一次调用返回[1]第二次调用时b还是那个列表继续追加2就得到[1, 2]。如果改成def fun(a, bNone): b [] if b is None else b每次调用都会创建新列表结果就会变成[1]和[2]。这种题在期末笔试中出现频率极高因为大部分学生平时写代码根本不会去用默认列表参数自然不会关注到这个坑。我把这题放在阅读题里就是想提醒大家碰到默认参数是可变对象的题一定要打起精神这是例外中的例外。4. 编程题实战解析4.1 五、编程题共2题共15分编写一个函数接收一个字符串参数返回该字符串中每个字符出现的次数结果以字典形式返回。7分参考答案def count_chars(s): result {} for ch in s: if ch in result: result[ch] 1 else: result[ch] 1 return result print(count_chars(hello))输出{h: 1, e: 1, l: 2, o: 1}这道题写法很多经典做法是用字典计数。也可以用字典的get方法简化def count_chars(s): result {} for ch in s: result[ch] result.get(ch, 0) 1 return result如果你已经掌握了collections模块的知识还可以用Counter一行实现from collections import Counter def count_chars(s): return dict(Counter(s))但我要提醒一句笔试手写代码不要炫技。阅卷老师是按点给分的只要你功能正确、语法正确、逻辑清晰哪怕写得笨重一点也能拿满分。相反如果你写了Counter但没写import可能直接被扣分。笔试环境下稳定的代码风格才是最重要的。有一个列表scores [78, 92, 85, 66, 90, 54]编写程序计算并输出平均分、最高分、最低分以及不及格低于60分的人数。8分参考答案scores [78, 92, 85, 66, 90, 54] average sum(scores) / len(scores) max_score max(scores) min_score min(scores) fail_count 0 for score in scores: if score 60: fail_count 1 print(平均分:, round(average, 2)) print(最高分:, max_score) print(最低分:, min_score) print(不及格人数:, fail_count)输出平均分: 77.5 最高分: 92 最低分: 54 不及格人数: 1这里的几个内置函数sum、max、min不要拼错。平均分计算时要用浮点数除法/不能用整除//否则结果会丢失小数位。如果要求保留两位小数可以用round(average, 2)或format(average, .2f)。实际阅卷时发现很多同学用整除//求平均分这是常见扣分点。另外检查是否及格也可以用列表推导式实现fail_count len([s for s in scores if s 60])这种写法简洁且不易出错手写代码时也可以考虑。4.2 手写代码的应试技巧编程题往往是最后的大题分值占比高但也是很多同学心理压力最大的部分。根据我自身的考试经验手写代码时要注意以下几点第一先想清楚逻辑再动笔在草稿纸上画出大致流程。很多同学看到题目就开写写着写着发现逻辑不对又涂改掉重新写卷面乱糟糟影响阅卷老师判断。第二注意缩进。Python靠缩进区分代码块笔试手写代码时缩进层级必须清晰。建议缩进用4个空格或者一个Tab整张卷子保持一致。第三变量命名要有意义。考场上时间紧迫有人会写a、b、c这种无意义变量名虽然不影响程序运行但阅卷老师在短时间内很难看懂你的思路遇到一点小错误就可能全扣分。写scores、total、average这类见名知义的变量名观感好很多。第四能用内置函数解决的问题就不要自己造轮子。求和sum()就够不要写一堆循环累积加法。Python是一门讲究简洁的语言阅卷老师看到优雅的写法自然会给出好印象分。5. 备考经验与避坑指南5.1 考前三天的高效复习策略期末备考时间紧张大多数人不可能把课本从头到尾重新看一遍。以我自己的经验来说考前三天适合做这几件事第一把所有课后习题和往年真题的选择题重新刷一遍不需要记答案但要把每个选项为什么对、为什么错搞清楚。第二把教材里涉及的每个内置函数、每个方法的调用格式手写一遍比如列表的append、extend、insert、remove、pop、index、count、sort、reverse这些都是选择题和填空题的高频素材。第三把所有写过的上机练习代码翻出来重点看两个地方自己曾经报错的地方和老师上课强调过的易错点。如果时间更紧至少要把本文中的题目完整做一遍。这套题覆盖面广基本就是期末笔试的高频考点浓缩版认真做完并理解解析比盲目刷一百道重复题有用得多。5.2 那些年我们一起踩过的Python坑最后分享几个我在实际学习和帮助学生备考过程中反复见到的典型问题。第一个是赋值与拷贝的混淆。a [1, 2, 3]b a然后b.append(4)a也变成了[1, 2, 3, 4]因为b和a指向同一个对象。如果要复制一份独立的列表要用b a.copy()或b a[:]。这个知识点笔试经常穿在阅读题里考尤其当题目里有两个变量名容易让人混淆时特别容易中招。第二个是input()返回字符串类型拿来做数值比较时报错或逻辑错误。有人写age input(输入年龄)然后if age 18:这在Python 3中会直接报TypeError因为字符串和整数不能比较。虽然不是每题都考但编程题里如果出现这种错误整个函数直接崩溃丢分很痛。第三个是运算符优先级混淆。Python的优先级规则和数学中有些差异比如not、and、or的优先级依次降低所以not True or False的结果是False但很多同学先算True or False再取反得到False虽然结果碰巧一样但表达式的理解方式已经错了。建议考试时遇到这类题直接加括号既方便自己计算也方便阅卷老师看懂。第四个是文件读写后忘记关闭。虽然现在都推荐用with语句但笔试手写代码时把open()和close()配套写全也能体现良好的编程习惯。如果真的用了with就不要画蛇添足再调close()否则会报出ValueError: I/O operation on closed file这在理论题里也是可以出简答题的素材。第五个是异常处理结构不完整。try后面必须有except或finally不能只写try然后直接写别的代码这是语法错误。同时except后面可以捕获特定异常类型比如except ValueError也可以写多个except分别处理不同类型的异常语法顺序是从上到下匹配一旦匹配就不再往下执行。手写代码题如果涉及异常处理这些细节要留意。第六个也是最后一点关于循环中修改列表。比如在遍历列表时删除元素容易导致跳过元素或者索引越界。遇到这类需求更安全的做法是遍历原列表的副本或者用列表推导式筛选。笔试阅读题偶尔会出这种题目平时练习时多留心一下就可以了。期末笔试说到底考的是扎实的基本功和细心程度。Python这门语言上手简单但理论题里的细节题特别能拉开差距。希望这份试题和解析能帮你把这门课稳稳拿下。本文还有配套的精品资源点击获取
返回列表