点击上方蓝字·关注我们



CCF编程能力等级认证,英文名Grade Examination of Software Programming(以下简称GESP),由中国计算机学会发起并主办,是为计算机和编程学习者提供学业能力验证的平台。GESP旨在提升青少年计算机编程能力,培训机构编编程教育水平,推广和普及计算机和编程教育。
GESP考察语言为图形化(Scratch)编程、Python编程及C++编程,主要考察学生掌握相关编程知识和操作能力,熟悉编程各项基础知识和理论框架,通过设定不同等级的考试目标,让学生具备编程从简单的程序到复杂程序设计的编程能力,为后期专业化编程学习打下良好基础。
本次为大家带来的是2025年12月Python一级认证真题解析。
Python一级
2025年12月
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
答案 | B | A | A | C | B | A | C | A | D | B | C | A | D | C | C |
第1 题 近日,空中客车公司表⽰,约6000架空客A320系列飞机需要紧急更换一种易受太阳辐射影响的飞行控制软件。空客表⽰,在对一起飞行事故分析后的结果显⽰,强烈的太阳辐射可能会损坏飞行控制系统所需的关键数据,导致判断失误,进而引发飞行异常。那这里的飞行控制系统执行判断的部件最可能是下面的( )。
A.辐射传感器
B.处理器
C.内存单元
D.输出设备
【参考答案】B
【答案解析】处理器(CPU)是计算机系统的核心,负责执行运算、逻辑判断和指令控制等核心操作;A选项辐射传感器仅用于检测辐射,C选项内存单元仅用于存储数据和指令,D选项输出设备仅用于呈现处理结果,因此执行判断的部件是处理器选B
第2 题 下面的Python代码在集成开发环境中运行时,提⽰有“invalid character”错误 。可能的原因是( ):
A. L1行代码中的逗号很可能是中文逗号,应该改为英文逗号。
B. L1行应该分为两行,分别是 a = 3 和 b = 4 。
C.代码运行前没有保存到文件。
D. L2和L3不能分为两行,应合并为一行。
【参考答案】A
【答案解析】Python编译器对字符编码敏感,中文逗号(,)属于无效字符,而英文逗号(,)才是语法允许的分隔符,这是“invalid character”错误的常见原因;B选项Python支持一行多变量赋值,无需拆分;C选项未保存文件通常提示保存相关错误,而非无效字符;D选项print语句可分行书写,不会导致无效字符错误。因此选A
第3 题 下面有关Python变量的说法,正确的是( )。
A.不可以用for作为变量名,因为for是Python的关键字(保留字) 。
B. _tnt 不可以是变量名,因为变量名的第一个字符必须是英文字母。
C. _tnt_ 不可以是变量名,因为最后一个字符容易与减号混淆。
D.可以用print作为变量名,因为print是关键字,但这不是好习惯, 因为print有约定的功能与含义。
【参考答案】A
【答案解析】不能使用关键字(保留字)作为变量名,`for`是关键字,因此A选项正确,变量名第一个字符可以是英文字母或下划线(_),_tnt`符合规则,B选项错误;_tnt_`满足变量命名规则,字母、数字、下划线组成,不与关键字冲突,C选项错误;print是内置函数名,不是关键字
第4 题Python表达式2+3*4**2的值为( )。
A. 20
B. 50
C. 52
D. 80
【参考答案】B
【答案解析】Python中运算符优先级:幂运算(**)>乘法(*)>加法(+),需按优先级计算:先算幂运算:4 ** 2 = 16,再算乘法:3 * 16 = 48,最后算加法:2 + 48 = 50。因此表达式结果为50,选B
第5 题 下面的Python代码执行后,其输出是( )。

A. 4 4
B. 3 3
C. 3 4
D. 4 3
【参考答案】A
【答案解析】Python支持链式赋值,b = a = 4 等价于 a = 4 后 b = a,赋值顺序从右往左;第一步a = 3 使a的值为3,第二步a = 4 覆盖a的原有值(a变为4),第三步b = a 使b的值也为4;最终print输出a和b的值均为4,选A
第6 题 下面的Python代码执行时如果先输入 10 回车后输入 20 并回车,其输出是( )。

A. 30=30
B. 1020=1020
C. int(N+M)=1020
D.错误提⽰
【参考答案】C
【答案解析】Python中input()函数读取的内容默认是字符串类型,因此N和M均为字符串;字符串拼接运算符+会将两个字符串直接连接,而非数值相加,即N+M = "10"+"20" = "1020";int(N+M)将拼接后的字符串转为整数1020,格式化输出后结果为“int(N+M)=1020”,选C
第7 题 某个整数很长很长,形如:1232123212321… …,其规律是从1开始逐一升高到3然后逐一降低到1,然后又逐一升高到3,一直到很长很长 。编写程序,判断从左开始第N位数是几? 假设从左到右第1位为1。在横线处应该填入的代码是( )。
A. N % 4
B. N // 4
C. N % 3
D. N // 3
【参考答案】A
【答案解析】分析数字规律:1、2、3、2、1、2、3、2……,可发现周期为4(每4位重复一次“1232”);用N对4取余(N%4)可确定第N位在周期中的位置:N%4=1 → 第1位(1);N%4=2 → 第2位(2);N%4=3 → 第3位(3);N%4=0 →第4位(2),与代码逻辑(M≠0输出M,M=0输出2)完全匹配;B选项为整除,无法定位周期位置;C、D选项周期判断错误(规律周期不是3)。因此选A
第8 题 下面Python代码执行后的输出是( )。
A. 99 99
B. 100 99
C. 99 100
D. 100 100
【参考答案】B
【答案解析】range(100)生成0~99的整数序列,循环共执行100次;每次循环tnt加1,初始tnt=0,循环结束后tnt=100;循环变量i在最后一次循环中取值为99,循环结束后i的值保持为99;因此print输出tnt和i的值分别为100和99,选B
第9 题 有关下面Python代码的说法,错误的是( )。
A. range(1 ,10 ,2 )改为range(1 ,11 ,2 ) 结果相同。
B.range(1 ,10 ,2 )改为range(0 ,10 ,2 ) 结果相同。
C. tnt += i 与 tnt = tnt + i 效果相同。
D. tnt += i 与 tnt = i + tnt 效果相同。
【参考答案】B
【答案解析】原代码中range(1,10,2)生成1、3、5、7、9,tnt累加和为1+3+5+7+9=25;A选项range(1,11,2)生成1、3、5、7、9,累加和不变,说法正确;B选项range(0,10,2)生成0、2、4、6、8,累加和为0+2+4+6+8=20,与原结果不同;C选项是的简写,效果相同,说法正确;D选项加法满足交换律,i + tnt与tnt + i结果一致,效果相同,说法正确。因此错误的是B选项
第10 题 下面Python代码执行后输出是( )。
A. 10#20#30#40#50#60#70#80#90#
B. 90#
C. 90
D.没有输出
【参考答案】B
【答案解析】range(10,100,10)生成10、20、30、…、90;循环中判断i%10==0,所有i均满足该条件,因此每次循环都执行continue(跳过后续print语句);循环结束后,i的值保持为最后一次循环的取值90;循环外执行print(i, end="#"),输出“90#”,选B
第11 题 两个正整数,只要不相等,就一直进行如下操作:最大数减去最小数得到一个值,该值和两个数的最小数构成新的两个正整数,重复操作,直到两个数相等,此时输出该数 。下面的Python代码用于实现该操作,横线处应该填写的代码是( )。
A.
B.
C.
D.

【参考答案】A
【答案解析】根据题意转换成代码即可,核心规则是:若N>M,用N-M替换N;若M>N,用M-N替换M,重复至N=M。当N>M时,N=N-M(更新大数为差值);当M>N时,M=M-N,完全符合规则,因此选A。
第12 题 如果一个正整数能被3整除,或者某一位能被3整除,则称之为“漂亮数”,如12是漂亮数因为能被3整除,311是漂亮数因为含有3,22不是漂亮数因为不能被3整除也不含有3。下面的Python用于判断正整数 N 是否为漂亮数,横线处应该填入的代码是( )。
A. N % 10 == 0
B. N % 3 % 10 == 0
C. N % 10 % 3
D. N % 10 % 3 == 0
【参考答案】D
【答案解析】代码逻辑:先判断N是否能被3整除,是则为漂亮数;若不能,则逐位判断是否有数字能被3整除,有也为漂亮数。逐位判断的核心是:用N%10获取当前个位数字,判断该数字是否能被3整除,即个位数字%3==0,判断个位数字是否能被3整除,符合题意。因此选D
第13 题 下面的Python代码执行后海龟最终朝向是( ) 。(默认初始朝向东, 即屏幕右侧)
A.东(0° )
B.南(270° 或-90° )
C.西(180° )
D.北(90° )
【参考答案】B
【答案解析】turtle默认初始朝向为东(0°);turtle.right(angle)表示顺时针旋转angle度:初始朝东,执行forward(100)后仍朝东;执行right(90),顺时针旋转90°,朝向变为南;执行forward(50)后朝向不变,仍为南。因此最终朝向是南,选B
第14 题 为在Python Turtle中输出如下图形,代码横线处应填入( )。
A. turtle .home()
B. turtle .goto(0 ,0 )
C. turtle . reset()
D. turtle .home(0 ,0 )
【参考答案】B
【答案解析】分析图形特征,12条等长射线从原点出发,夹角30°,代码逻辑:循环12次,每次绘制一条射线,返回原点,再左转30°准备下一条射线。A选项turtle.home()表示回到原点并朝向初始方向(东),会覆盖左转30°的效果;B 选项turtle.goto(0,0)表示移动到原点,不改变当前朝向,符合逻辑;C选项turtle.reset()表示重置画布,清除图形、回到原点、恢复初始朝向,会导致绘制失败;D选项turtle.home()无参数,语法错误。因此选B
第15 题 为在Python Turtle中输出如下图形,代码横线处应填入( )。

A. 20 * i
B. 20 * (i + 1 )
C. 20 * i , steps = 4
D. 20 * (i + 1 ) , steps = 4
【参考答案】D
【答案解析】图形特征为6个大小递增的正方形,turtle.circle()函数中steps=4表示绘制正四边形;循环6次需生成6个递增的正方形,半径应从20开始(i从0开始,20*(i+1)对应20、40、…、120),A选项20*i当i=0时半径为0,无法绘制第一个正方形;B选项无steps=4,绘制的是圆形,不是正方形;C选项i=0时半径为0,且第一个图形缺失;D选项半径递增且steps=4绘制正方形,符合图形要求
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
答案 | × | √ | √ | × | × | × | √ | √ | √ | √ |
第 1题 鸿蒙是华为公司开发的一款操作系统,那么它能够将正确的源程序翻译成目标程序,并运行 。( )
【参考答案】×
【答案解析】操作系统的核心功能是管理计算机硬件和软件资源(如内存、CPU、外设等),为程序运行提供环境;而将源程序翻译成目标程序的是编译器(如Python解释器、C++编译器),并非操作系统。鸿蒙系统仅能运行编译后的目标程序,无法直接翻译源程序,说法错误
第 2题Python表达式10**0 .5和10**1/2的结果并不相同 。( )
【参考答案】√
【答案解析】计算两个表达式结果:10 ** 0.5 表示10的平方根,结果约为3.1623;10 ** 1 / 2 表示10的1次方除以2,结果为5;两个表达式结果不同,说法正确
第 3题 下面Python代码执行后将输出 1 。( )
【参考答案】√
【答案解析】循环变量i从0开始:i=0时,i%3==0成立,执行continue(跳过break);i=1时,i%3==0不成立,执行break;循环结束后i的值为1,print输出1,因此该说法正确
第 4题 下面Python代码中的range(-10)改为range(10)执行结果相同 。( )

【参考答案】×
【答案解析】range(-10)生成的序列为空,Python中range(start, end)默认start=0,end=-10时无有效序列,循环一次不执行,tnt最终为0;range(10)生成0~9的序列,循环执行10次,tnt累加0+1+2+…+9=45;两者执行结果不同,因此该说法错误
第 5题 下面Python代码执行后将输出99, 因为range(100)不包括100 ,而是到99 。( )

【参考答案】×
【答案解析】range(100)生成0~99的序列,共100个元素,循环执行100次,每次cnt加1,初始cnt=0,循环结束后cnt=100;题干中“输出99”的结论错误,且原因解释混淆了“循环次数”和“循环变量取值范围”,该说法错误
第 6题 下面的Python代码能用于判断输入的正整数是否为对称数 。所谓对称数是指从左到右或从右到左读该数 ,其值相同 ,如 121 或414 等是对称数 ,而 123 不是对称数 。 ( )

【参考答案】×
【答案解析】代码逻辑错误:循环中n被不断整除10直至为0;最终判断的是0 == new_number,而非原数与反转数相等;正确逻辑应先保存原数,如original = n,循环结束后判断original == new_number。因此该代码无法正确判断对称数,说法错误
第 7题 下面的Python代码执行后将输出-100。( )

【参考答案】√
【答案解析】range(-100,100)生成-100、-99、…、99的序列,该序列中除-100外,其余数字均可两两配对(-99和99、-98和98、…、-1和1),每对和为0;所有数字累加和为-100 + 0 = -100,print输出-100,说法正确
第 8题 下面Python代码执行后 ,其输出是-50 。( )

【参考答案】√
【答案解析】代码逻辑是交替累加/减1~100的数字:1 - 2 + 3 - 4 + … + 99 - 100;每两个数字为一组(1-2=-1、3-4=-1、…、99-100=-1),共50组,总和为-1×50 = -50;print输出-50,因此说法正确
第 9题 下面的Python代码执行后 ,将画出横平竖直(两条边水平 ,另两条边与之垂直 ,且首尾相接)的正方形 。,( )

【参考答案】√
【答案解析】turtle.circle(r, steps=4)绘制以r为半径的正四边形;初始朝向为东,执行right(45)后朝向东南,但正四边形的四条边本身两两垂直,无论初始朝向如何,绘制的正方形均满足“两条边水平、两条边垂直且首尾相接”的条件,因此该说法正确
第 10题 下面的Python代码执行后将绘制出如下图形 。 ( )

【参考答案】√
【答案解析】代码逻辑:循环8次,每次右转45°后绘制一个边长固定的正方形(circle(50, steps=4));8次循环共旋转8×45°=360°,形成8个正方形组合图形,与题干图形一致,因此该说法正确
题号 | 1 | 2 |
答案 |
3.1编程题1
试题名称:小杨的爱心快递
时间限制:1.0 s
内存限制:512.0 MB
3.1.1题目描述
小杨是“爱心社区”的小志愿者,每周他都会帮助邻居们寄送捐赠给山区小学的文具和书籍。快递公司为了支持公益行动,制定了特殊的运费规则,鼓励大家合理包装:
假设快递的体积为V,重量为G。
·按体积计算:运费按体积计算,公式是0.5xV元。
·按重量计算:为了鼓励减轻包裹重量,规则是:当重量小于300克,即G〈300时,运费为M元;当重量达到或超过300克,即G≥300时,运费为N元。
快递公司的叔叔说:“我们应该选择最公平合理的计费方式。”
所以,最终的运费会取按体积计算和按重量计算这两种方式中价格较低的那一个,这样对寄件人最公道。
3.1.2输入格式
四行,每行一个一位小数的浮点数,分别代表,快递的体积V,快递的重量G,第一档重量运费M,第二档重量运费N。
3.1.3输出格式
一行一个一位小数,代表实际快递运费。
3.1.4样例
3.1.4.1输入样例1

3.1.4.2 输出样例1

3.1.4.3输入样例1

3.1.4.4 输出样例1

3.1.4.5 样例解释
对于样例1:快递体积V为100.4,重量G为300.2,第一档重量运费M为60.6,第二档重量运费N为70.5。
-若按体积收费,费用为0.5x100.4=50.2;
-若按重量收费,由于重量G=300.2超过300,费用为70.5。
输出价格较低的50.2。
对于样例2:快递体积V为99.8,重量G为200.9,第一档重量运费M为60.2,第二档重量运费N为70.1。
-若按体积收费,费用为0.5x99.8=49.9;
-若按重量收费,由于重量G=200.9小于300,费用为60.2。
输出价格较低的49.9。
3.1.5 数据范围
对于所有测试点,保证给出的浮点数不超过1000。
3.1.6 参考程序

【答案解析】
本题核心是“双计费方式取最小值”,需先分别计算按体积和按重量的运费,再比较两者大小,输出较小值。使用float(input())读取四个浮点数,根据公式计算体积运费,再计算重量运费:通过if-else判断重量档次,G<300时取M,G≥300时取N,得到p_g(重量运费)。比较p_v和p_g的大小,选择较小值,使用格式化输出(保留1位小数),符合题目输出格式要求
3.2
编程题2
试题名称:收集电量显示
时间限制:1.0 s
内存限制:512.0 MB
3.2.1题目描述
小杨的手机就像一个聪明的小助手,当电量变化时,它会用不同的方式来提醒我们,假设当前的电量百分比为P:
·当电量非常低(不超过10,即P≤10),它会显示一个大写字母R,就像在说:“快给我充电吧!(Red警告色)”
·当电量有点低(超过10但不超过20,即10<P≤20),它会显示一个大写字母L,意思是“电量有点Low啦!”
·当电量比较充足(超过20,即P>20),它就会直接显示具体的数字,比如直接显示50,表示还有50的电量。
3.2.2输入格式
第一行一个正整数T,代表数据组数。对于每组数据,一行包含一个正整数P,代表手机电量百分比。
3.2.3输出格式
对于每组数据,输出一行,代表当前手机显示的电量信息。
3.2.4样例
3.2.4.1输入样例

3.2.4.2输出样例

3.2.4.3样例解释
输入样例1共有五组数据:
·第一组数据手机电量P=10,满足P≤10,电量非常低,显示R。
·第二组数据手机电量P=1,满足P≤10,电量非常低,显示R。
·第三组数据手机电量P=20,满足10<P≤20,电量有点低,显示L。
·第四组数据手机电量P=99,满足P>20,电量比较充足,直接显示具体的数字99。
·第五组数据手机电量P=19,满足10<P≤20,电量有点低,显示L。
3.2.5数据范围
对于所有测试点,保证1≤ T ≤20,1≤ P ≤100。
3.2.6

【答案解析】
本题核心是“多条件分支判断”,根据输入的电量百分比P,按照不同区间规则输出对应结果,同时需处理多组测试数据(T组),读取测试组数T:首先通过int(input())读取第一行的正整数T,循环处理每组数据:使用for循环(for _ in range(T))执行T次循环,每次循环处理一组电量数据,在每次循环内部,通过int(input())读取当前组的电量百分比P,按照题目规则,若P≤10:满足“电量非常低”的条件,输出大写字母“R”;再判断P≤20:满足“电量有点低”的条件,输出大写字母“L”;若前两条均不满足:直接输出P的具体数值
策划:GESP技术委员会副主席 刘晓庆
技术支持:马长明


GESP2026年3月认证正在火热报名中,报名将于3月5日24点截止;点击登录CCF GESP网站(https://gesp.ccf.org.cn/)进行报名,欢迎学有余力的同学参加认证!


1.GESP微信:关注“CCF GESP”公众号,点击"GESP小助
手"即可交流。
2.GESP邮箱:gesp@ccf.org.cn
注:请在邮件中详细描述咨询的问题并留下考生的联系方式及姓名、身份证号,以便及时有效处理。
3.GESP电话:0512-67656856
咨询时间:周一至周五(法定节假日除外): 上午 8:30-12:00;下午 13:00-17:30
扫描下方二维码,关注GESP公众号了解更多资讯
