版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2025年全国信息素养大赛Python真题及答案和解析2025年全国信息素养大赛Python程序设计赛项(本科组)真题共分为客观题、编程题两大部分,总分100分,考试时长120分钟,允许使用官方Python文档、标准库手册作为参考资料,禁止访问第三方代码托管平台及AI辅助工具。第一部分客观题(总分30分)一、单项选择题(共10题,每题2分,共20分)题干:以下Python3.11及以上版本的语法中,关于match-case语句的使用,写法正确的是?
matchx:
case1|2:
print("小")
case3..5:
print("中")
case_:
print("大")
matchx:
case[a,b,*rest]:
print(f"前两个元素为{a},{b}")
casestr(s):
print(f"字符串类型:{s}")
case_:
pass
matchx:
caseint(x)ifx>10:
print("大于10的整数")
casex==0:
print("零")
case_:
pass
match(a,b):
case(x,y)ifx==y:
print("相等")
case(0,_):
print("第一个元素为0")
case(*,1):
print("第二个元素为1")答案:B解析:A选项中范围匹配应使用case3to5,Python无..范围运算符;C选项casex==0为错误写法,表达式需作为守卫条件放在if后,即casexifx==0;D选项(*,1)为元组解包错误写法,匹配第二个元素为1应使用case(_,1)。B选项的序列解包、类模式匹配均符合match-case语法要求。题干:根据PEP8编码规范,以下写法符合要求的是?A.导入模块时按照标准库、第三方库、本地库的顺序导入,每组之间空一行B.函数名采用大驼峰命名法,类名采用小写下划线命名法C.单行代码长度最多可以达到120个字符,超过必须换行D.运算符两端必须始终保留1个空格,包括函数参数默认值的=两端答案:A解析:B选项规范相反,函数采用小写下划线命名,类采用大驼峰命名;C选项PEP8官方推荐单行代码不超过79字符,注释和文档字符串不超过72字符,120为企业自定义规范,不属于PEP8要求;D选项函数参数默认值的=两端不需要空格,正确写法为deffunc(a=1):。题干:现有numpy数组arr=np.array([[1,2,3],[4,5,6],[7,8,9]]),以下操作输出结果为array([2,5,8])的是?A.arr[:,1]B.arr[1,:]C.arr[::2,1]D.arr[1,::2]答案:A解析:A选项选取所有行的第1列(索引从0开始),结果为[2,5,8];B选项选取第1行所有列,结果为[4,5,6];C选项选取步长为2的行(第0、2行)的第1列,结果为[2,8];D选项选取第1行步长为2的列,结果为[4,6]。题干:以下关于Python引用计数与垃圾回收的说法,错误的是?A.当一个对象的引用计数归零时,该对象会被立即回收B.循环引用是引用计数机制无法解决的问题,需要依赖分代回收机制处理C.使用del语句删除变量时,会直接释放对应对象占用的内存空间D.函数参数传递属于对象的引用传递,不会新增对象的内存拷贝答案:C解析:del语句仅删除变量对对象的引用,将引用计数减1,只有引用计数归零时才会释放内存,并非直接释放内存。其余选项表述均正确。题干:以下关于Pythonasyncio模块的说法,正确的是?A.协程函数的返回值可以直接通过调用函数获取,不需要awaitB.asyncio.run()函数可以在已经运行的事件循环中重复调用C.使用asyncwith语法可以简化异步上下文管理器的使用D.协程的切换开销比线程高,因此IO密集型场景优先使用多线程答案:C解析:A选项协程函数必须通过await才能获取返回值,直接调用返回的是协程对象;B选项asyncio.run()只能在主线程无运行事件循环时调用一次,不可重复调用;D选项协程切换开销远低于线程,IO密集型场景优先使用协程。题干:现有pandasDataFramedf,包含列[‘姓名’,‘班级’,‘成绩’],需要统计每个班级的平均成绩,且结果保留2位小数,以下写法效率最高的是?A.df.groupby('班级')['成绩'].mean().round(2)B.df.groupby('班级').agg({'成绩':lambdax:round(x.mean(),2)})C.df.groupby('班级')['成绩'].apply(lambdax:round(x.mean(),2))D.forclsindf['班级'].unique():avg=df[df['班级']==cls]['成绩'].mean();print(round(avg,2))答案:A解析:内置的mean、round均为矢量化操作,效率远高于自定义lambda和for循环,A选项无额外函数调用开销,性能最优。B、C选项的自定义lambda存在函数调用开销,D选项逐行遍历效率最低。题干:以下排序算法中,时间复杂度为O(nlogn)且空间复杂度为O(1)的是?A.快速排序B.归并排序C.堆排序D.冒泡排序答案:C解析:快速排序平均时间复杂度O(nlogn),最坏O(n²),空间复杂度O(logn)递归栈开销;归并排序时间复杂度O(nlogn),空间复杂度O(n);堆排序为原地排序,时间复杂度稳定O(nlogn),空间复杂度O(1);冒泡排序时间复杂度O(n²)。题干:使用Pythonrequests库发送POST请求提交JSON格式数据,以下写法正确的是?A.requests.post(url,data=json.dumps(data),headers={'Content-Type':'application/json'})B.requests.post(url,json=data)C.以上两种写法都正确D.以上两种写法都错误答案:C解析:requests库的json参数会自动将Python对象序列化为JSON字符串,且自动设置Content-Type为application/json;手动序列化data并设置请求头的写法也可实现相同效果,两种写法均正确。题干:需要匹配中国大陆11位手机号码,第一位为1,第二位为3-9,后9位为数字,以下正则表达式写法正确的是?
A.r'^1[3\-9]\d{9}$'B.r'^1[3,4,5,6,7,8,9]\d{9}$'C.r'1[3\-9]\d{9}'D.r'^1[3\-9]\d{10}$'
答案:A解析:B选项中括号内的逗号会被识别为普通字符,会匹配包含逗号的字符串;C选项无首尾锚点,会匹配包含11位手机号的更长字符串;D选项总位数为12位,不符合要求。A选项锚定首尾,第二位匹配3-9,后接9位数字,完全符合11位手机号规则。题干:以下关于Python类继承的多态实现,说法正确的是?A.Python的多态依赖于父类和子类的继承关系,没有继承就没有多态B.子类重写父类方法时,方法的参数列表必须和父类完全一致C.Python的鸭子类型允许不相关的类实现相同的方法名即可实现多态D.父类的私有方法可以被子类重写答案:C解析:A选项错误,鸭子类型不需要继承关系即可实现多态;B选项错误,Python为动态类型语言,重写方法不需要参数列表完全一致;D选项错误,父类私有方法会被名称改写(namemangling),子类无法直接重写。二、多项选择题(共5题,每题2分,共10分,多选、少选、错选均不得分)题干:以下Python内置函数中,属于高阶函数的有?A.mapB.filterC.sortedD.zipE.reduce答案:ABCE解析:高阶函数指接受函数作为参数或返回函数的函数,map、filter、sorted(接受key参数为函数)、reduce均符合高阶函数定义;zip仅将多个可迭代对象打包,不属于高阶函数。题干:以下关于Python生成器和迭代器的说法,正确的有?A.生成器是一种特殊的迭代器B.迭代器可以通过__next__()方法获取下一个元素,生成器不能C.生成器表达式的内存占用比列表推导式低,适合处理大规模数据D.迭代器遍历完成后可以重复遍历,不需要重新创建E.使用yield关键字定义的函数返回的是生成器对象答案:ACE解析:B选项错误,生成器属于迭代器,支持__next__()方法;D选项错误,迭代器为一次性遍历对象,遍历完成后为空,无法重复遍历。题干:以下pandas操作中,可以用于缺失值处理的有?A.df.dropna()B.df.fillna()C.df.isna()D.df.replace()E.erpolate()答案:ABCDE解析:dropna用于删除缺失值,fillna用于填充缺失值,isna用于检测缺失值,replace可将指定值(如np.nan)替换为有效值,interpolate用于插值填充缺失值,均可用于缺失值处理流程。题干:以下关于Python线程和进程的说法,正确的有?A.由于GIL的存在,Python多线程无法利用多核CPU的性能优势B.计算密集型任务优先使用多进程,IO密集型任务优先使用多线程或协程C.进程之间的内存空间是独立的,线程之间共享进程的内存空间D.threading模块创建的线程可以通过kill()方法直接终止E.multiprocessing模块的Queue可以用于进程之间的通信答案:ABCE解析:D选项错误,Pythonthreading模块未提供kill()方法,无法直接终止线程,需通过标志位实现优雅退出。题干:以下Python语法中,写法符合Python3.10+版本要求的有?A.a:int|str=10B.deffunc(a,b,/,c,d,*,e,f):passC.with(open('a.txt')asf1,open('b.txt')asf2):passD.matchx:case1|2|3:print("匹配")E.x=[iforiinrange(10)ifi\%2==0else0]
答案:ABCD解析:A选项为3.10+支持的联合类型注解,使用|代替Union;B选项为3.8+支持的位置仅参数(/前)、关键字仅参数(后)语法;C选项为3.10+支持的上下文管理器括号分组写法;D选项为3.10+支持的match-case或模式;E选项列表推导式语法错误,正确写法为x=[iifi\%2==0else0foriinrange(10)]。
第二部分编程题(总分70分)
一、基础编程题(20分)
问题描述:给定一个由小写英文字母组成的字符串s,需要对字符串进行如下处理:1.统计字符串中每个字符的出现频率,将出现频率大于等于3次的字符全部替换为字符’’;2.替换完成后,去除字符串中连续重复的’*’,只保留1个;3.最终返回处理后的字符串。输入要求:输入为一行字符串,仅包含小写英文字母,长度不超过10^5输出要求:输出处理后的字符串测试用例:输入aabbbccddeeeee输出aa*ccdd*;输入aaaaa输出*;输入abcdefg输出abcdefg评分标准:代码正确性占15分,时间复杂度优于O(n²)占3分,空间复杂度优化占2分参考答案代码
fromcollectionsimportCounter
importsys
defprocess_string(s):
freq=Counter(s)
#第一步替换高频字符
res=[]
forcins:
res.append('*'iffreq[c]>=3elsec)
#第二步去重连续*
final=[]
prev=None
forcinres:
ifc=='*'andprev=='*':
continue
final.append(c)
prev=c
return''.join(final)
if__name__=="__main__":
s=sys.stdin.readline().strip()
print(process_string(s))解析:1.时间复杂度:Counter统计频率为O(n),两次线性遍历字符串为O(n),总体复杂度O(n),可满足1e5长度输入的性能要求;2.空间复杂度:使用两个列表存储中间结果,总体O(n),若需进一步优化可将字符串转为列表后原地修改,降低额外空间开销;3.易错点:若采用逐次遍历统计频率会导致O(n²)的时间复杂度,长输入下会超时;使用正则替换连续*的效率低于线性遍历,不推荐使用。二、进阶编程题(25分)问题描述:某高校选课系统需要处理学生的选课冲突检测,现有n个选课记录,每个记录包含课程编号、课程开始时间、课程结束时间(时间均为整数,单位为分钟)。要求实现如下功能:1.对于给定的k个查询,每个查询输入一个学生的所选课程编号列表,判断该学生的课程是否存在时间冲突;2.时间冲突定义为两门课程的时间区间存在重叠,即课程A(s1,e1)和课程B(s2,e2)满足s1<e2且s2<e1则判定为冲突;3.若存在冲突,返回最早发生冲突的两门课程的编号(较小编号在前,较大编号在后);若不存在冲突,返回字符串”NOCONFLICT”。输入要求:第一行输入整数n(1<=n<=1e4),接下来n行每行输入课程id、开始时间s、结束时间e;接下来输入整数k(1<=k<=100),接下来k行每行输入m+1个整数,第一个数为m(所选课程数,1<=m<=100),后续为m个课程编号输出要求:每个查询输出一行结果测试用例:输入4门课程[101030,1022050,1034060,1047090],查询[3101102104]输出101102,查询[2103104]输出NOCONFLICT评分标准:代码正确性占20分,查询效率优化占3分,异常处理占2分参考答案代码
importsys
defmain():
data=sys.stdin.read().split()
ptr=0
n=int(data[ptr])
ptr+=1
course_map={}
for_inrange(n):
cid=int(data[ptr])
s=int(data[ptr+1])
e=int(data[ptr+2])
course_map[cid]=(s,e)
ptr+=3
k=int(data[ptr])
ptr+=1
for_inrange(k):
m=int(data[ptr])
ptr+=1
cids=list(map(int,data[ptr:ptr+m]))
ptr+=m
#校验课程合法性
courses=[]
valid=True
forcidincids:
ifcidnotincourse_map:
valid=False
break
s,e=course_map[cid]
courses.append((s,e,cid))
ifnotvalid:
print("NOCONFLICT")
continue
#按开始时间排序
courses.sort()
conflict=None
foriinrange(1,len(courses)):
prev_s,prev_e,prev_id=courses[i-1]
curr_s,_,curr_id=courses[i]
ifcurr_s<prev_e:
conflict=(min(prev_id,curr_id),max(prev_id,curr_id))
break
print(f"{conflict[0]}{conflict[1]}"ifconflictelse"NOCONFLICT")
if__name__=="__main__":
main()解析:1.效率分析:预处理课程映射为O(n),每个查询排序为O(mlogm),相邻课程比较为O(m),100次查询总操作量约为7e4,完全满足性能要求;2.冲突判断逻辑:排序后仅需比较相邻课程即可,若存在非相邻课程冲突,则中间相邻课程必然存在冲突,可保证找到最早发生的冲突;3.输入优化:采用一次性读取全部输入的方式,比逐行读取效率更高,适合大数据量输入场景。三、综合编程题(25分)问题描述:实现一个简单的商品库存管理系统,支持如下操作:1.进货操作:add商品id数量进货价,为对应商品增加库存,采用先进先出的出库规则,出库时优先扣减最早进货的库存,成本按对应批次进货价计算;2.出库操作:sale商品id数量售价,扣减对应商品库存,返回本次出库的总利润(利润=总售价-对应批次总成本),库存不足则操作失败返回0;3.查询操作:query商品id,返回当前商品的总库存数量和总成本,商品不存在则返回”00”。输入要求:第一行输入整数q(1<=q<=1e5),接下来q行每行对应一个操作输出要求:sale操作输出利润,query操作输出总库存和总成本,add操作无输出测试用例:输入7次操作:add1001105、add1001206、sale1001158输出35、query1001输出1590、sale1001158输出30、sale1001510输出0、query1001输出00评分标准:代码正确性占20分,均摊时间复杂度达到O(1)占3分,边界处理占2分参考答案代码
fromcollectionsimportdeque
importsys
defmain():
input=sys.stdin.readline
#商品映射:key=商品id,value=(批次队列,总库存,总成本)
goods={}
q=int(input())
for_inrange(q):
parts=input().strip().split()
op=parts[0]
cid=int(parts[1])
ifop=='add':
num=int(parts[2])
price=int(parts[3])
ifcidnotingoods:
goods[cid]=(deque(),0,0)
q_deque,total_stock,total_cost=goods[cid]
q_deque.append((num,price))
total_stock+=num
total_cost+=num*price
goods[cid]=(q_deque,total_stock,total_cost)
elifop=='sale':
num=int(parts[2])
sale_price=int(parts[3])
ifcidnotingoodsorgoods[cid][1]<num:
print(0)
continue
q_deque,total_stock,total_cost=goods[cid]
need=num
cost_sum=0
whileneed>0:
curr_num,curr_price=q_deque[0]
ifcurr_num<=need:
cost_sum+=curr_num*curr_price
need-=cu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年河南省特岗教师招聘考试真题及答案
- 2026浙江事业单位招聘考试(中医学)历年参考题库含答案详解3卷
- 2026年班主任工作方法与艺术课件
- 2026河南机关事业单位工勤技能岗位等级考试(仓储管理员·初级/五级)历年参考题库含答案详解2卷
- 2026河北省机关事业单位工人技能等级考试(纤维检验工)历年参考题库含答案详解2卷
- 2026河北省住院医师规范化培训结业理论考核(麻醉科)历年参考题库含答案详解3卷
- 2026河北机关事业单位工人技能等级考试(水轮发电机组值班员)历年参考题库含答案详解2卷
- 2026河北教师招聘考试(教育基础知识/教育理论)历年参考题库含答案详解2卷
- 2026江西省委党校在职研究生招生考试(社会主义市场经济理论)历年参考题库含答案详解3卷
- 2026江西事业单位招聘考试(医技“三基”)历年参考题库含答案详解2卷
- 逻辑学基础知识
- 2025-2026学年新七年级上学期开学摸底考试语文试卷(重庆专用)
- 应急管理执法考试题库(附答案)
- 爱情合同协议书搞笑
- 眼科学角膜病试题及答案
- T∕CACM 010-2017 中医药单用联合抗生素治疗常见感染性疾病临床实践指南 盆腔炎性疾病
- 《物联网基础知识》课件
- 2024年国家大剧院公开招聘专业技术及一般管理人员33人历年高频500题难、易错点模拟试题附带答案详解
- 2024年秋季1530安全教育记录
- 小孩办身份证的委托书范本
- DL-T5704-2014火力发电厂热力设备及管道保温防腐施工质量验收规程
评论
0/150
提交评论