
12月的CCF GESP认证刚落下帷幕Python 1级依然是报考人数最多的科目之一。这几天陆续有学生和家长来问我真题的情况尤其是“2025年12月认证”的题目到底考了什么、难度怎么样、哪些地方容易丢分。我花了两天时间把手上能接触到的考生回忆题、考点反馈和官方考纲重新过了一遍把Python 1级这套卷子从头到尾拆解了一遍写成这篇带答案、带解析、带避坑指南的真题复盘。无论你是准备明年6月那一场的新考生还是已经在刷题的家长这篇文章都值得认真看一遍。先说清楚文章解决什么问题帮你快速判断自己的Python 1级水平在哪个位置搞懂考试最核心的考点到底是什么以及正式上考场时最容易在哪些不起眼的小细节上翻车。本文会从考试全貌、题型分值、真题逐题解析、编程题完整复现代码、高频失分点、备考路线图六个方面展开尽量做到“看完这一篇等于做了一整套模拟题加一次考前串讲”。1. CCF GESP考试全貌Python 1级到底考什么1.1 GESP认证的基本认知GESP是CCF中国计算机学会主办的青少年编程能力等级认证全称是Grade Examination of Software Programming。在中国的编程类等级考试里它的认可度排在比较靠前的位置。和很多机构自己搞的评测不同GESP由CCF统一命题、统一阅卷、统一颁发证书出题规范性和评分严谨性都要高一个档次。GESP一共划分为八个级别从一级到八级难度逐级递增。1级是入门级主要面向零基础或者刚学了几个月Python的考生。它的定位不是“选拔编程天才”而是检验考生是否掌握了Python语言最基础的核心语法能不能看懂简单的程序能不能独立写出解决简单问题的代码。这一点很关键很多考生和家长对1级的预期是错误的——以为会考什么复杂的算法结果一看到考纲发现全是基础语法反而掉以轻心最后在一些细节上丢分。1.2 Python 1级官方考纲范围速览如果你还没系统看过考纲下面这个清单是你第一件要做的事。Python 1级的考点范围非常明确基本可以归纳为下面几类变量与基本数据类型int、float、str、bool的定义和使用变量命名规则输入与输出input()读入、print()输出、字符串和数字的拼接方式运算符算术运算符、-、*、/、//、%、**、比较运算符、、、!、、、逻辑运算符and、or、not数据类型转换int()、float()、str()以及type()查看类型字符串基础操作索引、切片常用的len()、upper()、lower()等方法列表基础创建列表、按下标访问元素、append()方法、len()函数流程控制if/elif/else分支语句for循环、while循环break和continue的简单使用简单算法思想累加器、计数器、求最大值最小值、枚举法穷举法基础库函数random库的random.randint()math库的常用数学函数这个范围在2025年12月的考试中体现得非常明显几乎每道题都能在考纲里找到对应的位置。换句话说这套卷子出得非常“规矩”没有超纲题也没有偏题怪题。前提是你真的把上面这些知识点吃透了。1.3 2025年12月这场考试的整体特点从考生反馈和我自己看到的题目信息来看这次考试有三个明显特点。第一选择题对“易混淆概念”的考查力度加大了。比如整除和取余、整数除法和浮点数除法、range函数的边界值、字符串切片的左闭右开规则这类题目反复出现说明命题组有意在引导考生关注这些平时写代码容易忽略的细节。第二编程题的难度没有拔高但题目描述更“生活化”。两道编程题都不是直接说“求1到100的所有奇数和”这种干巴巴的题面而是套了一个场景比如统计某个月份的天数、把数字倒序输出、计算某种比赛得分。考生首先要能从场景中提取出数学模型再转化成代码。这一步其实比写代码本身更能拉开差距。第三代码填空和读程序写结果的题目占比不低。这类题考的是“能不能读懂别人写的代码”很多考生自己写代码没问题但一看到别人写的变量名不规范、逻辑绕一点的程序就懵了。这提醒我们平时练习时不要只盯着一路写到底要习惯去阅读代码、手推代码的执行过程。2. 真题题型与分值拆解先搞懂游戏规则2.1 考试形式与时间分配CCF GESP Python 1级的考试时长为120分钟满分100分。题型分为两大块第一部分是客观题包括单选题和判断题第二部分是编程题一般是两到三道。从近几年尤其是2025年的情况看客观题部分的分值比重和编程题基本上各占一半左右。客观题考查的是知识点的覆盖面和精确记忆编程题考查的是综合运用能力。你可以这样理解客观题是“扫雷”把你在语法细节上的每一个漏洞都翻出来编程题是“盖房子”看你能不能把学过的一块块语法知识拼成能运行的程序。时间分配上我的建议是客观题控制在40到50分钟以内剩下的时间全部留给编程题。很多考生喜欢在选择题上反复纠结一道题琢磨十分钟最后编程题只够写半道这是最亏的。2.2 核心考点分布权重表根据这次考试的题目反馈我把高频考点和对应的分值权重整理成了表格方便你直观看到复习重点在哪里。考点模块具体知识点举例本次考试出现频次复习优先级输入输出input、print、格式化输出高必须掌握变量与类型类型转换、type()、变量名规则高必须掌握算术运算符//、%、/、**的区别高必须掌握流程控制if、elif、for、while最高必须掌握字符串操作索引、切片、len()中高重点掌握列表基础索引、append、len()中重点掌握逻辑运算符and、or、not的优先级中重点掌握函数库调用random、math常用函数低理解会用从这个表能看出一个趋势语法基础是绝对的核心。这次考试几乎没有出现任何“偏难怪”的知识点所有题目都建立在最基本的语法之上。换句话说如果你把基础语法磨得足够扎实卷面上的大部分分数已经稳了。2.3 和往年考试相比的变化趋势对比前两年的题目2025年12月的卷子有一个明显变化读程序题的比例在上升。所谓读程序题就是给你一段已经写好的代码问你输出结果是什么或者某个变量的值最后变成了什么。这种题不考你背概念考的是你能不能“模拟计算机执行程序”。很多考生平时用IDE写代码写完一运行就有结果根本不习惯在脑子里逐行推演代码的执行流程。结果一到考场不能用电脑只能靠草稿纸手推一下子就慌了。这也是我写这篇解析文章时特别想强调的一点GESP一级虽然难度不高但正在从“考你会不会写”向“考你会不会写、会不会读、会不会查错”三个能力维度转变。备考时一定要有意识地训练脱离IDE的“裸推”能力。3. 2025年12月Python 1级选择题真题解析3.1 第1题运算符优先级与逻辑判断题目考生回忆版执行以下代码后输出结果是什么print(2 3 * 2 8 and 10 // 3 3)这道题同时考了两个点算术运算符的优先级和逻辑运算符的执行方式。先算算术部分。3 * 2先执行结果是6所以2 3 * 2等于2 6结果是88 8两个数字相等比较结果为True。接着看后半部分10 // 3在Python里是整除运算10除以3的商是3不保留小数部分所以10 // 3 3也为True。最后两个True用and连接结果为True。正确答案是True。这道题想提醒你的是是比较运算返回的是布尔值而//是整除运算。/、//、%这三个运算的区别在一级考试里属于“必考必错”的频率极高的考点后面还会再遇到。3.2 第2题int()类型转换的截断规则题目考生回忆版以下哪个表达式的结果不是整数A.int(3.8)B.round(3.8)C.3 // 2D.3.0 2这道A、B、C、D四个选项分别考了不同的知识。先看A选项int(3.8)。这里有一个经典误区int()不是四舍五入而是直接截断小数部分向零取整。所以int(3.8)的结果是3是整数。再看B选项round(3.8)。round()才是四舍五入函数3.8四舍五入后是4所以结果也是整数。然后是C选项3 // 2。整除运算符结果取商3除以2的整数商是1结果是整数。最后是D选项3.0 2。这里涉及Python的类型转换规则当整数和浮点数做算数运算时Python会把结果自动提升为浮点数。3.0是浮点数2是整数两者相加结果是5.0。注意5.0在Python里是浮点数类型虽然在数学意义上它“等于”整数5但它的数据类型是float。所以D选项的输出结果不是整数。正确答案是D。这道题的深层坑点在于很多考生看到3.0 2结果等于5就理所当然认为它“是整数”。实际上判断一个表达式的类型要看它在Python里真正的数据类型。这个小细节在选择题里反复出现属于典型的“看起来简单、错起来扎心”。3.3 第3题字符串切片边界题目考生回忆版执行以下代码输出结果是s Python print(s[1:4])字符串切片是Python一级考试里一个“老师讲了无数遍还是会有人错”的知识点。s[1:4]表示从索引1开始取取到索引4的前一个位置也就是左闭右开区间[1, 4)。字符串Python的索引分布如下s[0]Ps[1]ys[2]ts[3]hs[4]os[5]n。所以s[1:4]取的是索引1、2、3对应的字符即y、t、h合在一起就是yth。正确答案是yth。这里最容易出的问题是两个一是把起始索引当成1二是不理解切片“含头不含尾”的规则把s[1:4]的结果误写成ytho。建议你记一个口诀切片区间左闭右开从哪个索引开始写哪个到哪个索引前一位结束就写哪个。3.4 第4题range函数的三种参数形式题目考生回忆版执行list(range(1, 10, 3))得到的结果是A.[1, 4, 7, 10]B.[1, 4, 7]C.[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]D.[1, 3, 5, 7, 9]range(1, 10, 3)的三个参数分别是起始值、结束值、步长。它的取值规则是从起始值开始每次加步长只要还小于结束值就继续取等于或大于结束值就停止。在这个例子中起始值是1加三次步长得到4、7再加一次步长得到1010已经不满足“小于结束值10”的条件所以不包含10。因此最终结果是[1, 4, 7]。正确答案是B。关于range函数一级考试里最常设置的陷阱有两个一是忽略结束值“取不到”二是步长为负数时容易搞混起点和终点。建议你在草稿纸上画一条数轴把每个数字都写出来这种题就不会错。3.5 第5题列表append方法与列表值的输出题目考生回忆版执行以下代码后输出的结果是lst [3, 1, 2] lst.append(4) lst[1] 0 print(lst)这道题结合了列表的两个基本操作append()方法和按下标修改元素。先看lst [3, 1, 2]这是一个包含三个元素的列表。lst.append(4)把4添加到列表末尾列表变成[3, 1, 2, 4]。注意append是在原列表上直接修改而不是生成一个新列表这个“原地修改”的特性经常在判断题里出现。然后是lst[1] 0把索引为1的元素从1改成0。列表最终变成[3, 0, 2, 4]。正确答案是[3, 0, 2, 4]。这道题中最容易出错的是混淆lst[1]与lst[-1]。lst[1]是第二个元素lst[-1]才是最后一个元素。负数索引在Python里是很方便的特性但也是一级考试中考生容易脱口而出错误答案的重灾区。3.6 第6题while循环与累加器题目考生回忆版以下程序执行后变量total的值是多少total 0 i 1 while i 5: total total i i i 1 print(total)这是最典型的累加器模型。用表格来推演的话循环轮次i的值循环开始前total更新后i更新后第1轮10112第2轮21233第3轮33364第4轮464105第5轮5105156第6轮6循环条件65不成立循环结束—所以total最后的值是15。这道题的考点有两个一是while循环的执行条件二是累加器必须放在循环体内部而判断条件中的i 5用的是小于等于不是小于。如果把条件写成i 5结果就会变成10这是命题人最喜欢挖的坑。4. 编程题真题还原与完整实现4.1 编程题第一题求指定范围内奇数之和这道编程题在2025年12月的考试中以“某活动统计得分”的形式出现去掉场景外壳后核心要求是输入一个正整数n计算1到n之间所有奇数的和并输出。输入样例5输出样例9解释1到5之间的奇数有1、3、5和为9。参考代码如下n int(input()) total 0 for i in range(1, n 1): if i % 2 1: total i print(total)逐行解析一下。input()读入的是一个字符串比如输入5读进来的是5必须用int()转换成整数才能参与算术运算。range(1, n 1)生成从1到n的整数序列这里为什么要写成n 1因为range区间是左闭右开不包含结束值想要让n本身被遍历到就必须把结束值设为n 1。i % 2 1是判断奇数的方法如果i除以2的余数是1说明它是奇数。total i是累加的简写形式等价于total total i。这道题还有一个更Pythonic的写法n int(input()) print(sum(range(1, n 1, 2)))range(1, n 1, 2)直接从1开始隔一个取一个生成1、3、5……直到不超过n的最后一个奇数再用sum()求和。不过对于一级考试我更推荐第一种写法因为for循环加条件判断更贴近考纲的考点范围阅卷时也更容易让评分老师看清你的思路。第二种拿来了解即可。4.2 编程题第二题数字反转第二道编程题是一个“数字反转”类题目。题目要求输入一个三位正整数把它的百位、十位、个位倒过来组成新的数输出。例如输入123输出321。如果输入120输出21因为反转后是021前面的0不输出。参考代码如下n int(input()) a n // 100 # 百位 b n // 10 % 10 # 十位 c n % 10 # 个位 result c * 100 b * 10 a print(result)这道题的精髓在于拆分各个数位。通过整除和取余的组合可以从一个整数里抽出任意一位百位n // 100比如123 // 100结果是1直接把百位以上的部分全砍掉商就是百位。十位n // 10 % 10先把123变成12整除10再对10取余得到2这一步是从“去掉个位后的数”里再取出最低位。个位n % 10任何整数对10取余结果就是个位数。拆出三个数位后重新组合原来的个位变成新数的百位所以要乘以100原来的十位变成新数的十位乘以10原来的百位变成新数的个位乘以1。如果原来的个位是0比如输入120则c 0结果的百位是0输出时Python会自动把0省略打印21正好符合“前导零不输出”的要求。这道题也完全可以用字符串来解决s input() print(int(s[::-1]))利用字符串切片逆序再用int()转换去掉开头的0。但在考场上我更推荐用整数运算的写法因为它在后续二级、三级学习数位处理时是通用基础而且不太容易出现因字符串切片边界搞错而丢分的情况。4.3 编程题第三题月份天数判断这次的第三道编程题也有考场将其列为附加题是一道条件分支题输入一个整数m代表月份输出这个月有多少天。其中2月按28天计算。输入样例4输出样例30参考代码如下m int(input()) if m 2: print(28) elif m in [4, 6, 9, 11]: print(30) else: print(31)这道题考察的是并列条件分支结构的应用。大月1、3、5、7、8、10、12月有31天小月4、6、9、11月有30天2月特殊为28天。这里有两个关键细节第一判断月份归类时用成员运算符in加上列表比一连串or要简洁得多也不容易漏写月份。第二elif的顺序很重要必须把2月这种特殊月份放在最前面优先判断。实际上三个分支的顺序不影响正确性但把最容易特殊的情况放在最前面阅读代码的人可以最快抓住重点这也是评判代码质量时的一个参考维度。5. 高频失分点与考场避坑指南5.1 客观题里反复出现的“同款陷阱”根据历年真题和2025年12月这次考试的反馈Python 1级里有一批“高频送命题”基本上每场考试都会换着法儿出现。我整理成了一张速查表你可以对照着自查。陷阱场景错误理解正确答案易错指数10 / 3和10 // 3都当作除法前者结果是3.333...浮点数后者结果是3整数高int(3.9)四舍五入为4直接截断小数部分为3高range(1, 5)包含哪些数1到5都包含包含1、2、3、4不包含5最高s[0:3]的取值索引0到3共4个字符是索引0、1、2共3个字符高input()的返回类型认为是数字一定是字符串要用int()转换最高a b和a b两者都表示等于是比较是赋值高print(a, b)和print(a b)输出结果相同前者中间有空格后者是拼接后的值中这张表建议你在考前最后一天再看一遍。客观题丢分往往不是因为你不会而是因为你在这些“约定俗成的规则”上踩了坑。5.2 编程题里最致命的三个低级错误第一个是忘记类型转换。很多考生写n input()紧接着就写for i in range(n)然后运行报错在考场上一紧张更看不出问题在哪。记住一个原则input()进来的永远是字符串需要参与数学运算时第一时间就要int()或float()。第二个是循环边界不对。for i in range(1, 5)到底能不能取到5答案是取不到。编程题里的累加、统计类题目几乎全都要靠range边界错了就全错了。我的建议是不确定边界时把区间在草稿纸上写一遍再在代码里用print(list(range(...)))这样的方式验证一次。第三个是和混用。在判断条件里写if i 5这在Python里会直接报语法错误在循环条件里写while i 1则会变成无限循环。考场上如果遇到程序死循环第一个要排查的就是赋值符号是否写错了。5.3 考场上时间不够用了怎么办如果你在考场上发现剩余时间只剩30分钟但编程题还有一道没写请按下面这个优先级处理先放弃完美主义用最笨的办法把题写出来。所谓最笨的办法就是不用考虑代码的简洁性、不要追求“一行代码搞定”老老实实地用循环、分支、累加器一步一步把逻辑写清楚。GESP的评分按测试点给分你的代码只要能通过一部分测试点就能拿到对应的部分分数。一个能运行的、思路清晰的笨代码远比一个写了一半的高深解法得分高。5.4 检查环节的“30秒快速自查法”做完题还剩时间的话不要干坐着。用30秒快速检查这几项程序里每个input()是不是都用了int()或float()转换、每个range边界是否合理、输出格式和题目样例是否一致尤其是有没有多空格、缺换行。编程题的输出格式是最容易被忽略的得分点很多考生逻辑全对就是多打了一个空格或者少写了一个print()直接被扣掉测试点分数。6. 备考路线图从真题复盘到下次考试6.1 考前四周的复习节奏安排如果你打算参加接下来6月的GESP Python 1级考试可以参考我给学生制定的四周复习计划节奏比较稳妥。第一周打基础重新过一遍考纲里的所有基础语法每个知识点配合10到20道专项小题练习。这一周的目标不是刷难题而是把所有容易混淆的概念掰开揉碎比如整除和取余、切片边界、range闭开区间。第二周刷真题把近两年的GESP Python 1级真题完整做一遍。做题时不要边看答案边做要定时90分钟全真模拟。做完以后不看分数先看错题把每道错题的知识点定位到考纲的具体条目上。第三周专项强化针对第二周暴露出来的薄弱环节集中刷同一知识点的不同变体题。比如切片老错就刷20道切片题while循环边界老错就刷20道循环题。错了不可怕但错完之后要总结出同一类题的通用解法形成自己的答题模板。第四周冲刺与模拟每两天做一套全真模拟题严格按照120分钟掐表。最后两天不再做新题只翻错题本和本文第5部分的避坑清单。6.2 平时练习时最值得坚持的两个好习惯第一个习惯是手推代码。找几道历年真题或练习题先在纸上把代码的执行过程和输出结果推演一遍再上机运行验证。这个过程模拟的是考场上的真实场景因为正式考试时你面对一道读程序题是没有IDE可以帮你运行的。平时训练得越多考场上的“脑内编译器”就越准。第二个习惯是为每道错题写一句话的错因总结。不要只写“我粗心了”要具体到根因比如“range起始值多写了一个1”“忘记input()返回的是字符串”。考试前翻一遍错因总结比重新做十套模拟卷都管用。6.3 GESP 1级之后怎么规划后续进阶GESP 1级只是起点通过后紧接着就是2级。2级在1级的基础上增加了函数、嵌套循环、字典等新考点难度会有一个明显的跳跃。如果你想无缝衔接1级考完后不要立刻松懈趁热打铁把函数部分学起来尤其是自定义函数的定义与调用、参数与返回值这两个知识点是2级的核心。从更长远的角度看GESP的八级证书和CSP-J/S认证之间存在衔接关系很多走信息学竞赛路线的学生都会把GESP作为前期的梯度训练。但这条路需要时间和兴趣做支撑不必急于求成。先把眼前的1级拿下再根据自己实际的学习节奏决定下一步这个节奏是最健康的。我在实际备考中还有一个特别想强调的体会GESP一级看似简单但它检验的不只是会不会写代码更是你有没有养成严谨的思维习惯。很多失分点本质上都是“差不多”心态造成的——觉得print(17 / 3)和print(17 // 3)差不多觉得索引从1开始从0开始差不多觉得range(1, 5)包含5不包含5差不多。只有把这些“差不多”变成“差一点都不行”这门考试才算是真正帮你打好了编程的基础。刷题时也请在弄懂每道题的同时顺手把题里涉及的语法在编辑器里多敲两遍你会发现看十遍解析的印象远不如亲手运行一遍代码来得深刻。