版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2025年9月GESP编程能力认证Python等级考试四级真题(含答案)第一部分单项选择题(共15题,每题2分,总计30分)以下关于Python面向对象魔术方法的描述,正确的是()A.__str__方法必须返回字符串类型,未重写时调用该方法会抛出语法错误B.__del__方法在对象被垃圾回收时自动调用,主动使用del关键字删除对象引用时必然会立即触发该方法C.重写__add__方法可以实现自定义类的实例使用+运算符进行运算D.类的__init__方法是构造方法,返回值可以设置为布尔类型表示实例化是否成功【答案】C【解析】A选项错误,未重写__str__方法时,调用该方法会默认返回对象的内存地址字符串,不会抛出语法错误;B选项错误,del关键字仅删除对象的引用,当对象的引用计数清零时才会触发__del__方法,若存在其他引用指向该对象,__del__方法不会立即执行;C选项正确,__add__是运算符+对应的魔术方法,重写后可支持自定义类实例的加法运算;D选项错误,__init__方法默认返回None,若显式指定其他返回值,解释器会抛出TypeError异常。某开发者自定义异常类代码如下,以下调用和捕获逻辑符合规范的是()classInputError(ValueError):def__init__(self,msg,input_val):
self.msg=msg
self.input_val=input_valA.抛出异常语句:raiseInputError(“输入非法”,123)B.捕获异常时可以通过exceptValueErrorase:捕获该类异常,但无法获取e.input_val属性C.自定义异常类必须显式继承Exception类,否则无法被抛出D.捕获该异常后必须调用raise语句重新抛出,否则会导致程序逻辑错误【答案】A【解析】A选项正确,自定义异常的抛出方式与内置异常一致,可直接传入构造方法所需参数;B选项错误,InputError是ValueError的子类,通过ValueError捕获的异常实例仍保留子类的所有属性,可正常访问e.input_val;C选项错误,自定义异常类只要继承BaseException及其子类即可被抛出,无需直接继承Exception;D选项错误,捕获异常后可根据业务需求直接处理,无需强制重抛。以下正则表达式中,可以精确匹配中国大陆11位手机号码(仅匹配1开头,第二位为3-9,后9位为0-9数字,无其他多余字符)的是()
A.r’^1[3-9]$'B.r'1[3-9]\d{9}'C.r'^1[3-9]\d{8}$’
D.r’^1[2-9]$’
【答案】A【解析】B选项无首尾锚定字符,会匹配如””这类包含手机号的字符串,无法实现精确匹配;C选项匹配的数字总长度为10位,不符合11位手机号的要求;D选项第二位允许取值为2,不符合中国大陆手机号号段规则;A选项中^匹配字符串开头,$匹配字符串结尾,[3-9]限定第二位取值范围,匹配后续9位数字,可实现精确匹配。
4.下列Python递归函数运行时会触发RecursionError的是()(默认Python解释器递归深度上限为1000)A.计算斐波那契数列第100项的递归实现函数B.计算1到1000累加和的递归实现函数C.二分查找递归实现,查找长度为2000的有序列表中的元素D.快速排序递归实现(基准值取中间元素),排序长度为500的完全逆序列表【答案】B【解析】A选项斐波那契递归实现的递归深度等于所求项数,第100项的递归深度为100,远低于递归深度上限;B选项累加1到1000的递归实现,递归深度为1000,超出Python默认递归深度限制(实际可用递归深度约为997),会触发RecursionError;C选项二分查找的递归深度为log2(n),长度为2000的列表递归深度约为11,不会溢出;D选项基准值取中间元素的快速排序,逆序列表的递归深度约为log2(500)≈9,不会溢出。以下关于PythonJSON模块操作的描述,正确的是()A.json.dump()方法可以将Python对象序列化为字符串后写入文件对象B.包含自定义类实例的列表可以直接使用json.dump()序列化到文件C.json.load()方法从文件读取JSON数据时,会自动将JSON数组转换为Python元组D.序列化时指定ensure_ascii=False参数可以保证中文正常写入文件,不会显示为Unicode编码【答案】D【解析】A选项错误,json.dump()方法直接将Python对象序列化后写入文件对象,无需先转换为字符串,json.dumps()才是将对象序列化为字符串的方法;B选项错误,自定义类实例不属于JSON支持的原生数据类型,无法直接序列化,需要指定自定义序列化函数;C选项错误,json.load()会将JSON数组转换为Python列表,而非元组;D选项正确,ensure_ascii参数默认为True,会将非ASCII字符转义为Unicode编码序列,设为False即可保留原字符编码。用栈实现括号匹配校验,输入字符串为”{HYPERLINK()}“,校验过程中栈的最大深度为()A.2B.3C.4D.5【答案】B【解析】校验过程为:字符’{‘入栈,栈深度1;字符’[‘入栈,栈深度2;字符’(‘入栈,栈深度3;字符’)‘匹配栈顶’(‘弹出,栈深度2;字符’]‘匹配栈顶’[‘弹出,栈深度1;字符’(‘入栈,栈深度2;字符’)‘匹配栈顶’(‘弹出,栈深度1;字符’}‘匹配栈顶’{’弹出,栈深度0。全过程栈的最大深度为3。有如下代码,运行输出结果为()classAnimal:defspeak(self):
print("animalspeak")classDog(Animal):defspeak(self):
print("woof")classCat(Animal):defspeak(self):
print("meow")deffunc(animal:Animal):animal.speak()func(Dog())func(Cat())func(Animal())A.woofmeowanimalspeakB.依次抛出类型错误C.animalspeak三次D.woofmeow两次,最后抛出异常【答案】A【解析】该代码是面向对象多态特性的典型实现,子类Dog和Cat都重写了父类Animal的speak()方法,调用时会根据实例的实际类型执行对应的方法,因此先后输出woof、meow、animalspeak,不会抛出类型错误。有正则表达式r’()-()-()‘,匹配字符串”2025-09-20”,获取匹配到的月份值的方式正确的是()
A.re.match(r’()-()-()‘,“2025-09-20”).group(0)
B.re.match(r’()-()-()‘,“2025-09-20”).group(1)
C.re.match(r’()-()-()‘,“2025-09-20”).group(2)
D.re.match(r’()-()-()’,“2025-09-20”).group(3)
【答案】C【解析】正则表达式的分组编号从1开始,group(0)返回整个匹配的完整字符串,group(1)返回第一个分组匹配的年份,group(2)返回第二个分组匹配的月份,group(3)返回第三个分组匹配的日期,因此正确选项为C。现有包结构如下:mypackage/__init__.py
module_a.py
subpackage/
__init__.py
module_b.py现在在module_a.py中导入module_b.py中的函数func,相对导入写法正确的是()A.fromsubpackage.module_bimportfuncB.from.subpackage.module_bimportfuncC.frommypackage.subpackage.module_bimportfuncD.from..subpackage.module_bimportfunc【答案】B【解析】A、C选项为绝对导入写法,需要mypackage在系统模块搜索路径sys.path中才能正常执行,不符合相对导入的要求;D选项中..代表当前包的上级目录,module_a.py所在的目录与subpackage同级,无需回退到上级目录;B选项中.代表当前包目录(mypackage),可正确定位到subpackage下的module_b模块。单向链表的节点定义为classNode:definit(self,val,next=None):self.val=val;self.next=next,现有链表头节点head,指向1->2->3->4->None,要在2和3之间插入值为5的节点,操作顺序正确的是()A.new_node=Node(5);new_node.next=head.next.next;head.next.next=new_nodeB.new_node=Node(5);head.next.next=new_node;new_node.next=head.next.nextC.new_node=Node(5);new_node.next=head.next;head.next=new_nodeD.new_node=Node(5);head.next=new_node;new_node.next=head.next【答案】A【解析】head.next为值为2的节点,head.next.next为值为3的节点,插入新节点时需要先将新节点的next指针指向原节点3,再将节点2的next指针指向新节点,避免链表断裂;B选项会丢失原节点3的引用,导致链表断裂;C选项实现的是将新节点插入1和2之间;D选项逻辑错误,会导致链表自环。运行以下代码,输出结果为()deffunc():try:
a=1/0
return1
exceptZeroDivisionError:
return2
finally:
return3print(func())A.1B.2C.3D.抛出异常【答案】C【解析】finally块的代码无论是否发生异常都会执行,若finally块中存在return语句,会覆盖try和except块中的返回值,因此最终返回3。归并排序算法对长度为n的列表进行排序,其平均时间复杂度和最坏时间复杂度分别为()A.O(nlogn)O(n²)B.O(nlogn)O(nlogn)C.O(n²)O(nlogn)D.O(n²)O(n²)【答案】B【解析】归并排序采用分治思想,无论输入列表的有序性如何,都需要将列表拆分到单个元素再合并,因此平均和最坏时间复杂度均为O(nlogn)。以下关于PythonCSV模块操作的描述,错误的是()A.csv.reader()返回的可迭代对象,每一行默认以列表形式返回B.csv.DictReader()可以将CSV文件的第一行作为键,每一行数据转换为字典C.使用csv.writer写入CSV文件时,若要写入的字段包含逗号,会自动用双引号包裹该字段D.读取CSV文件时必须指定encoding=’utf-8’参数,否则会出现乱码【答案】D【解析】CSV文件的编码取决于创建时使用的编码,可能为gbk、gb2312等,并非必须使用utf-8编码,需根据文件实际编码指定参数,因此D选项描述错误,其余选项均为CSV模块的正确特性。有如下代码,运行输出结果为()classMyClass:count=0
def__init__(self):
self.count+=1a=MyClass()b=MyClass()MyClass.count+=3print(a.count,b.count,MyClass.count)A.113B.003C.444D.114【答案】A【解析】MyClass.count为类属性,初始值为0;实例化a时,self.count+=1会为a创建实例属性count,赋值为1,不会修改类属性;同理b的实例属性count为1;后续修改类属性MyClass.count为3,不会影响实例属性的值,因此输出为113。有序列表为[1,3,5,7,9,11,13],用二分查找算法查找元素12,查找过程中比较的元素依次是()A.7,11,13B.7,13,11C.5,11,13D.7,9,13【答案】A【解析】二分查找过程为:初始左边界left=0,右边界right=6,中间索引mid=(0+6)//2=3,比较元素7<12,更新left=4;第二次mid=(4+6)//2=5,比较元素11<12,更新left=6;第三次mid=6,比较元素13>12,更新right=5,循环结束未找到元素,因此比较顺序为7,11,13。第二部分判断题(共10题,每题2分,总计20分)Python中类的私有属性是指以双下划线开头且不以双下划线结尾的属性,无法在类外部直接访问,也无法通过任何方式间接访问。()【答案】×【解析】私有属性可以通过_类名__私有属性名的方式在类外部间接访问,例如obj._MyClass__attr即可获取实例obj的私有属性__attr。递归函数必须有基线条件(递归出口),否则会无限递归,最终触发RecursionError。()【答案】√【解析】基线条件是递归停止的边界,若无基线条件,递归深度会持续增加直至超出解释器限制,触发递归深度错误。正则表达式中的元字符”.”可以匹配任意字符,包括换行符。()【答案】×【解析】默认模式下元字符”.”不匹配换行符,只有指定re.DOTALL标志时才会匹配包括换行符在内的所有字符。用队列实现广度优先搜索(BFS)时,元素的出队顺序和入队顺序一致。()【答案】√【解析】队列是先进先出的线性结构,因此出队顺序与入队顺序完全一致。JSON格式支持的数据类型包括整数、字符串、列表、字典、元组、布尔值和None。()【答案】×【解析】JSON格式不支持元组类型,Python元组序列化到JSON时会被转换为数组(对应Python列表)。Python中自定义异常类的构造方法必须调用父类的构造方法,否则无法正常抛出。()【答案】×【解析】自定义异常类只要继承BaseException及其子类即可正常抛出,调用父类构造方法是为了复用父类的args等内置属性,并非强制要求。对文件进行读写操作后,只要程序正常退出,操作系统会自动关闭文件,所以不需要显式调用close()方法,也不会出现资源泄漏。()【答案】×【解析】若程序运行过程中出现异常退出,未关闭的文件会导致资源泄漏,且写入缓冲区的数据可能丢失,因此需显式调用close()或使用with上下文管理器自动关闭文件。面向对象的封装是指将类的属性和方法隐藏起来,只对外暴露必要的访问接口,提高代码的安全性和可维护性。()【答案】√【解析】封装是面向对象三大特性之一,核心是隐藏内部实现细节,仅对外提供可控的访问接口,避免外部直接修改内部状态导致的逻辑错误。归并排序是稳定排序算法,而快速排序是不稳定排序算法。()【答案】√【解析】稳定排序是指排序后值相等的元素相对顺序不变,归并排序的合并过程不会改变相等元素的相对顺序,属于稳定排序;快速排序的基准值交换过程可能打乱相等元素的相对顺序,属于不稳定排序。Python中导入同一个模块多次,模块中的代码只会在第一次导入时执行一次。()【答案】√【解析】Python导入模块时会将已导入的模块缓存到sys.modules中,后续重复导入会直接读取缓存,不会重复执行模块代码。第三部分编程题(共3题,总计50分)学生成绩统计(15分)【题目描述】现有一个CSV格式的成绩文件score.csv,文件第一行为表头,包含字段:学号、姓名、语文、数学、英语,后续每行为一名学生的成绩,分数均为0-100的整数。请编写程序完成以下要求:
(1)读取score.csv文件的所有内容,若文件不存在,输出”文件不存在”并结束程序;若文件中某一行的成绩字段不是合法整数,跳过该行继续处理。(2)计算每名学生的总分,统计所有学生的总分平均分(保留2位小数)。(3)输出总分最高的学生信息,格式为”最高分学生:学号姓名总分”,若有多名学生总分相同且最高,按文件出现顺序输出第一个。【输入描述】无直接输入,读取当前目录下的score.csv文件【输出描述】第一行输出”总分平均分:X.XX”,第二行输出最高分学生信息【示例输入(score.csv内容)】学号,姓名,语文,数学,英语2025001,张三,89,92,952025002,李四,95,88,962025003,王五,90,95,962025004,赵六,88,abc,90【示例输出】总分平均分:271.67最高分学生:2025003王五281【参考答案】importcsvtotal_sum=0valid_count=0max_total=-1max_stu_info=“”try:withopen("score.csv",'r',encoding='utf-8')asf:
reader=csv.DictReader(f)
forrowinreader:
#校验成绩字段合法性
try:
chinese=int(row['语文'])
math=int(row['数学'])
english=int(row['英语'])
exceptValueError:
continue
#计算总分
stu_total=chinese+math+english
total_sum+=stu_total
valid_count+=1
#更新最高分记录
ifstu_total>max_total:
max_total=stu_total
max_stu_info=f"{row['学号']}{row['姓名']}{stu_total}"
#计算平均分
ifvalid_count==0:
avg=0.00
else:
avg=total_sum/valid_count
#输出结果
print(f"总分平均分:{avg:.2f}")
print(f"最高分学生:{max_stu_info}")exceptFileNotFoundError:print("文件不存在")【评分标准】异常处理逻辑正确(文件不存在捕获、非法成绩跳过):4分总分和平均分计算正确,小数位数符合要求:5分最高分统计正确,多同分情况取第一个:4分输出格式完全符合要求:2分后缀表达式求值(20分)【题目描述】后缀表达式(逆波兰表达式)是一种将运算符写在操作数之后的表达式,不需要括号即可明确运算顺序。例如中缀表达式”3+4*2/(1-5)“对应的后缀表达式为”342*15-/+“。请编写程序实现后缀表达式的求值功能,要求如下:
(1)输入的后缀表达式中,操作数均为非负整数,运算符仅包含+、-、*、/四种,其中除法为整数除法,向下取整,运算符和操作数之间用空格分隔。(2)使用栈结构实现求值逻辑,禁止使用eval()等直接执行表达式的函数。(3)支持多位数操作数,例如”123+“的结果为15。(4)若表达式不合法(运算符数量不足、操作数数量不足、出现非法字符、除零错误),输出”表达式非法”。【输入描述】一行字符串,为待求值的后缀表达式【输出描述】表达式合法则输出对应的整数结果,否则输出”表达式非法”【示例1输入】342*15-/+【示例1输出】1【示例2输入】123+5*【示例2输出】75【示例3输入】12+*【示例3输出】表达式非法【参考答案】importmathstack=[]operator_set={‘+’,‘-’,’*‘,’/’}is_valid=Trueitems=input().strip().split()foriteminitems:ifitemnotinoperator_set:
#校验操作数合法性
ifnotitem.isdigit():
is_valid=False
break
stack.append(int(item))
else:
#校验操作数数量是否足够
iflen(stack)<2:
is_valid=False
break
b=stack.pop()
a=stack.pop()
ifitem=='+':
res=a+b
elifitem=='-':
res=a-b
elifitem=='*':
res=a*b
elifitem=='/':
#校验除零错误
ifb==0:
is_valid=False
break
res=math.floor(a/b)
stack.append(res)最终栈中只能有一个元素,否则表达式非法ifnotis_validorlen(stack)!=1:print("表达式非法")else:print(stack[0])【评分标准】栈结构实现逻辑正确,入栈出栈操作符合要求:6分多位数操作数解析和合法性校验正确:3分四则运算逻辑正确,除法向下取整处理正确:5分所有非法场景判断正确(操作数不足、运算符不足、非法字符、除零):4分输出格式符合要求:2分员工薪资计算系统(15分)【题目描述】某公司有两类员工:全职员工和兼职员工,需要实现一个薪资计算系统,要求如下:(1)定义基类Employee,包含属性:员工编号(id)、姓名(name),方法cal_salary(),用于计算月薪,基类中该方法默认返回0。(2)定义全职员工类FullTimeEmployee,继承Employee,新增属性:基本工资(base_salary)、绩效奖金(bonus),cal_salary()方法返回基本工资+绩效奖金。(3)定义兼职员工类PartTimeEmployee,继承Employee,新增属性:时薪(hourly_wage)、工作时长(work_hours),cal_salary()方法返回时薪*工作时长。(4)创建员工列表,包含若干全职和兼职员工实例,遍历列表输出所有员工的姓名和月薪,格式为”姓名:月薪”,月薪保留整数。【输入描述】第一行输入整数n,表示员工总数,接下来n行每行输入一名员工的信息,格式如下:全职员工:F编号姓名基本工资绩效奖金兼职员工:P编号姓名时薪工作时长【输出描述】按输入顺序输出每名员工的姓名和月薪【示例输入】3F1001张三80002000P2001李四15080F1002王五90001500【示例输出】张三:10000李四:12000王五:10500【参考答案】classEmployee:def__init__(self,emp_id,name):
self.emp_id=emp_id
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026事业单位工勤技能-江西-江西广播电视天线工一级(高级技师)历年参考题库含答案详解3套试卷
- 中医治疗胆囊炎医案讲解
- 静脉曲张中医案例分享
- 2026下半年小学教师资格证考试小学综合素质高频考点试卷及解析
- 疫情课学生心理健康教育
- 单元七 交通事故无人机救援
- 校外机构消防安全规范
- 消防安全宣传车模型设计
- 2026及未来5年中国地毯抽洗剂数据监测研究报告
- 2026及未来5年中国回力小车数据监测研究报告
- 县域经皮冠状动脉介入治疗合理用药与综合管理指南课件
- 2026保密教育线上培训考试试题(附完整答案及解析)
- 2026四川省现代种业发展集团种芯农业有限公司招聘财务人员(会计岗)1人笔试历年常考点试题专练附带答案详解
- 安徽宣城市绩溪皖能抽水蓄能发电有限公司招聘笔试题库2026
- 反恐怖防范安全风险评估工作指南(试行)
- 2026四川成都交通投资集团有限公司第一批次校园招聘15人笔试历年常考点试题专练附带答案详解
- 江西省2026年重点学校初一新生入学分班考试试题及答案
- 食品公司内部标签审核制度
- 纤维检验员测试验证考核试卷含答案
- 《2026年》化妆品配方研发工程师高频面试题包含详细解答
- mdsap培训课件教学课件
评论
0/150
提交评论