2025信息素养大赛复赛真题出炉!Python小学组全部解析
说明:很多家长在搜索"智传民韵"赛道的真题。这里先澄清一下——"智传民韵"是2026年信息素养大赛算法应用主题赛新增的子赛道,并不属于2025年的赛事体系。本文解析的正是2025年7月举行的全国青少年信息素养大赛Python编程挑战赛小学组复赛两套真题,帮助孩子精准备考。
2025年7月,全国青少年信息素养大赛Python编程挑战赛小学组复赛分两个批次进行:第一套题于7月5日开赛,第二套题于7月12日开赛。每套试卷包含5道选择题和5道编程题,覆盖了变量与数据类型、列表操作、条件判断、循环结构、随机数、数学公式应用和枚举算法等核心考点。
本文将对两套真题进行逐题深度解析,帮孩子吃透每一道题背后的知识点。
第一套题 · 选择题解析(7月5日)
第1题:变量命名规则
题目: 以下变量命名正确的是( )
A. 2apple B. @orange C. banana D. if
答案:C
解析: Python的变量命名有三条铁律:
- 只能以 字母 或 下划线 开头——所以A选项
2apple 以数字开头,错误; - 只能包含字母、数字和下划线——所以B选项
@orange 含有特殊字符 @ ,错误; - 不能使用Python的 保留关键字 ——D选项
if 是Python的保留关键字(用于条件判断),不能当变量名,错误。
C选项 banana 是纯字母,完全合法,是正确答案。
考点归纳: Python变量命名规则——字母/下划线开头、只含字母数字下划线、不能使用保留字。
第2题:列表操作(append与remove)
题目: 运行以下Python代码,输出结果是( )
nums=[3,6,9]
nums.append(12)
nums.remove(6)
print(nums)
A. [3,6,9,12] B. [3,9,12] C. [3,6,12] D. [6,9,12]
答案:B
解析: 我们一步步跟踪列表的变化:
最终列表为 [3, 9, 12] ,选B。
这里要注意两个方法的区别: append(x) 是在列表末尾添加元素x,而 remove(x) 是删除列表中第一个值为x的元素。
考点归纳: 列表的 append() 方法和 remove() 方法。
第3题:input()的返回类型
题目: 运行以下代码,当输入5和3时,输出结果是什么?
num1=input()
num2=input()
result=num1+num2
print(result)
A. 8 B. 53 C. 代码错误 D. 5+3
答案:B
解析: 这是一道经典易错题!很多孩子会直觉性地选A,认为5+3=8。
关键在于: input() 函数返回的是 字符串 类型,不是数字。所以当输入5和3时, num1 是字符串 "5" , num2 是字符串 "3" 。
字符串的 + 运算符执行的是 拼接 操作,而不是数学加法: "5" + "3" = "53" 。
如果想实现数学加法,需要用 int() 转换: result = int(num1) + int(num2) 。
考点归纳: input() 函数返回字符串类型;字符串的 + 是拼接而非算术加法。
第4题:随机数范围分析
题目: 执行以下代码,变量result的值可能是( )
fromrandomimport*
x=randint(1,3)
y=randint(2,4)
result=x+y
print(result)
A. 1 B. 3 C. 2 D. 8
答案:B
解析: randint(a, b) 生成[a, b]范围内的随机整数(包含a和b两端)。
x = randint(1, 3) y = randint(2, 4)
所以 result = x + y 的范围是:
- 最小值:1 + 2 = 3
- 最大值:3 + 4 = 7
result的取值范围是 3、4、5、6、7 。
看四个选项:A(1)不在范围、C(2)不在范围、D(8)不在范围,只有 B(3) 在范围内。
考点归纳: random.randint(a, b) 的用法——注意两端都包含;多变量求和的范围分析。
第5题:列表元素修改
题目: 若要将列表 colors=["红色","蓝色","绿色"] 中的"蓝色"修改为"紫色",应使用( )
A. colors[0]="紫色" B. colors[1]="紫色" C. colors[2]="紫色" D. colors.append("紫色")
答案:B
解析: Python列表的索引从 0 开始:
要修改"蓝色",需要操作索引1,即 colors[1] = "紫色" ,选B。
D选项 append("紫色") 是在末尾追加元素,不会替换原有内容,这是常见的混淆选项。
考点归纳: 列表索引从0开始计数;通过索引赋值修改列表元素; append() 是追加而非替换。
第一套题 · 编程题解析(7月5日)
第6题:宠物狗狗粮计算
题目描述: 小明的宠物狗每天需要吃3次狗粮,每次吃固定克数。输入每次喂食的克数,计算并输出一周(7天)总共需要准备多少克狗粮。
输入格式: 一个正整数(每次喂食克数)
输出格式: 一行一个整数(一周总克数)
样例: 输入50,输出1050
参考代码:
x=int(input())
total=x*3*7
print(total)
逐行解析:
- 第1行:用 int(input()) 读取输入并转为整数,赋值给变量 x
- 第2行:一周总克数 = 每次克数 × 每天次数 × 天数 = x × 3 × 7
- 第3行:输出结果
解题思路: 这道题的本质是一道简单的乘法应用题。每天吃3次,每次x克,一天就是3x克,一周7天就是21x克。以样例验证:50 × 3 × 7 = 1050,正确。
考点分析: 基本输入输出、 int() 类型转换、算术运算。
第7题:抽奖号码判断
题目描述: 若抽中的号码能同时被2和5整除,输出"获得平板",否则输出"没有中奖"。
输入格式: 一个正整数(1-1000)
样例: 输入10,输出"获得平板"
参考代码:
num=int(input())
ifnum%2==0andnum%5==0:
print("获得平板")
else:
print("没有中奖")
逐行解析:
- 第1行:读取输入并转为整数
- 第2行: num % 2 == 0 判断能否被2整除, num % 5 == 0 判断能否被5整除, and 要求两个条件同时满足
- 第3-4行:条件满足时输出"获得平板"
- 第5-6行:否则输出"没有中奖"
解题思路: "同时被2和5整除"实际上就是能被10整除(即末位是0的数),但编程中直接用 and 连接两个条件更直观。 % 取余运算符是判断整除的核心工具——如果 num % k == 0 ,说明num能被k整除。
考点分析: if-else 条件判断、 % 取余运算、 and 逻辑运算符。
第8题:小魔法师收集星星
题目描述: 第1天收集1颗星星,每天比前一天多1颗。输入天数n,计算总共收集了多少颗星星。
输入格式: 正整数n(1 ≤ n ≤ 1000)
样例: 输入5,输出15(即1+2+3+4+5=15)
参考代码:
n=int(input())
total=0
foriinrange(1,n+1):
total+=i
print(total)
逐行解析:
- 第1行:读取天数n
- 第2行:初始化累加器 total = 0
- 第3行: range(1, n+1) 生成1到n的整数序列
- 第4行:每次循环将当前的i加到total中
- 第5行:输出累加结果
解题思路: 这是经典的等差数列求和问题。第i天收集i颗星星,总共收集 1+2+3+...+n 颗。用 for 循环遍历1到n,逐次累加即可。
数学上也可以用高斯公式:总和 = n×(n+1)/2,但编程题中用循环累加是最基础的写法,也是孩子必须掌握的核心模式。
考点分析: for 循环、 range() 函数、累加器模式、等差数列求和。
第9题:符文魔法(弗罗贝尼乌斯公式)
题目描述: 火符能量a,风符能量b。校准后火符强度x=a+7,风符强度y=b-3。当两种符文强度值互质时,求不能通过符文组合凑出的最大魔法强度值。
输入格式: 两个正整数a和b(空格分隔)
参考代码:
a,b=map(int,input().split())
x=a+7
y=b-3
ans=x*y-x-y
print(ans)
逐行解析:
- 第1行:读取一行输入,用 split() 按空格拆分,再用 map(int, ...) 将两个值分别转为整数,赋值给a和b
- 第2行:计算校准后的火符强度 x = a + 7
- 第3行:计算校准后的风符强度 y = b - 3
- 第4行:应用弗罗贝尼乌斯公式,不能凑出的最大值为 x×y - x - y
- 第5行:输出结果
解题思路: 这道题的核心是 弗罗贝尼乌斯数 (Frobenius Number),也叫"鸡块问题"。
对于两个互质的正整数x和y,不能由它们线性组合(ax + by,其中a、b为非负整数)凑出的最大整数为:
F(x, y) = x × y - x - y
举个例子:x=3,y=5时,F = 15 - 3 - 5 = 7。也就是说,7是不能用3和5凑出的最大数(8=3+5,9=3×3,10=5×2……大于7的都能凑出来)。
题目用"符文魔法"的故事包装了这个数学概念,但本质上就是一个公式直接套用的题目。
考点分析: map() 和 split() 的组合输入处理、数学公式的编程实现、弗罗贝尼乌斯数的概念。这道题对数学知识有一定要求,是拉开差距的关键题。
第10题:完美购买方案数
题目描述: 棒棒糖5元、巧克力8元、果冻糖10元。输入n元,计算恰好花完所有钱的购买方案总数。
输入格式: 一个正整数n
参考代码:
n=int(input())
count=0
foriinrange(n//5+1):
forjinrange(n//8+1):
forkinrange(n//10+1):
if5*i+8*j+10*k==n:
count+=1
print(count)
逐行解析:
- 第1行:读取总金额n
- 第2行:初始化计数器 count = 0
- 第3行:枚举棒棒糖数量i,最多n//5个( // 是整除)
- 第4行:枚举巧克力数量j,最多n//8个
- 第5行:枚举果冻糖数量k,最多n//10个
- 第6行:如果5i + 8j + 10k恰好等于n,方案数+1
- 第7行:输出总方案数
解题思路: 这是一道经典的 枚举(穷举) 问题。三种商品的价格固定,总金额固定,需要找出所有恰好花完钱的组合。
用三层循环分别枚举每种商品的购买数量(从0到最大可能数量),然后检查总花费是否恰好等于n。 n // 5 表示n除以5取整数部分,即最多能买几个棒棒糖。
例如n=40时,棒棒糖最多8个(40÷5=8),巧克力最多5个(40÷8=5),果冻糖最多4个(40÷10=4),三层循环遍历所有组合即可。
考点分析: 三重循环嵌套枚举、 // 整除运算、条件判断计数。这道题考查的是最朴素的暴力枚举思想,是算法入门的基础功。
第二套题 · 选择题解析(7月12日)
第1题:多个if顺序执行
题目: 执行以下代码,输入"小明",输出结果?
name=input()
ifname=="小红":
print("参加活动A")
ifname=="小明":
print("参加活动B")
A. 参加活动A B. 程序无输出 C. 参加活动C D. 参加活动A和B
答案:C
解析: 输入"小明"后,程序依次检查两个if语句:
- 第一个if:
"小明" == "小红" ?不成立,不执行。 - 第二个if:
"小明" == "小明" ?成立,输出"参加活动B"。
这里要注意,两个 if 是 独立 的,不是 if-elif-else 结构。如果输入"小红",两个条件都不匹配第二个if,只会输出"参加活动A"。而输入"小明"只匹配第二个if,输出"参加活动B",选C。
考点归纳: 多个独立 if 语句的执行逻辑——每个if都会独立判断,互不影响。
第2题:无限循环的实现
题目: 若要实现无限次输出"加油",应使用( )
A. while True: print("加油")
B. while false: print("加油")
C. for i in range(100): print("加油")
D. if True: print("加油")
答案:A
解析: 逐一分析各选项:
- A:
while True ——条件永远为真,循环永不结束,可以无限输出。✅ - B:
while false ——注意Python中布尔值首字母大写,应该写 False 而非 false ,这个写法会报错。❌ - C:
range(100) 只循环100次,不是无限次。❌
考点归纳: while True 实现无限循环;Python布尔值大小写(True/False); while 、 for 、 if 的区别。
第3题:列表的定义方式
题目: 以下哪个是Python中列表的正确定义方式?( )
A. fruits = {"苹果","香蕉","橙子"}
B. fruits = ("苹果","香蕉","橙子")
C. fruits = ["苹果","香蕉","橙子"]
D. fruits = 苹果,香蕉,橙子
答案:C
解析: Python中不同数据结构用不同的括号:
- D选项没有括号,虽然Python允许不带括号的元组写法,但这里变量名"苹果"等未定义会报错。
考点归纳: 列表用方括号 [] 定义;区分列表、元组、集合的语法。
第4题:变量赋值与运算
题目: 运行以下代码,输出结果?
a=8
b=a*3
b=b*10
A. 14 B. 16 C. 18 D. 240
答案:D
解析: 逐步跟踪变量的值:
最终b的值为240,选D。
注意第3行 b = b * 10 ,这里的b是上一行已经计算好的24,所以结果是240。变量可以被重新赋值,新值覆盖旧值。
考点归纳: 变量的赋值与重新赋值;算术运算符 * ;跟踪变量值的变化。
第5题:print()输出指定内容
题目: 下列Python代码能正确输出"Hello,Python"的是?
A. echo("Hello, Python!")
B. input("Hello, Python!")
C. print("Hello, Python!")
D. print("Hello, Python")
答案:C
解析: 注意题目要求的输出内容是 "Hello,Python" (含逗号无空格,无感叹号——这里原题选项C是 print("Hello, Python!") ,包含了感叹号)。
实际上这道题考查的核心点是:
- A选项:
echo() 不是Python内置函数(这是Linux/Shell命令); - B选项:
input() 是输入函数,不是输出函数; - D选项:虽然用了
print() ,但内容与C不完全一致。
在考试环境下,C选项是标准正确答案,因为它使用了正确的输出函数 print() 。
考点归纳: print() 是Python的标准输出函数;区分 print() 、 input() 、 echo() 的用途。
第二套题 · 编程题解析(7月12日)
第6题:文具费用计算
题目描述: 每个学生需要2支彩铅(每支2元)和1个笔记本(每个5元)。输入学生人数,计算总费用。
输入格式: 一个正整数(学生人数)
输出格式: 一个整数(总费用)
样例: 输入10,输出90
参考代码:
n=int(input())
total=n*9
print(total)
逐行解析:
- 第1行:读取学生人数n
- 第2行:每个学生的费用 = 2×2 + 1×5 = 4 + 5 = 9元,总费用 = n × 9
- 第3行:输出总费用
解题思路: 先算出每个学生的费用:2支彩铅 × 2元/支 = 4元,1个笔记本 × 5元 = 5元,合计9元/人。然后乘以学生人数即可。
样例验证:10 × 9 = 90,正确。
考点分析: 基本算术运算、简单数学建模(将文字描述转化为数学表达式)。
第7题:课程表判断
题目描述: 周一到周五分别用数字1-5表示。周一、周三、周五有数学课。输入一个数字(1-5),判断当天是否有数学课。
输入格式: 一个整数(1-5)
输出格式: 有数学课输出"Yes",没有输出"No"
样例: 输入1输出"Yes",输入2输出"No"
参考代码:
day=int(input())
ifday==1orday==3orday==5:
print("Yes")
else:
print("No")
逐行解析:
- 第1行:读取日期数字
- 第2行:用 or (或)连接三个条件——day等于1或3或5,即周一、周三、周五
- 第3-4行:有数学课时输出"Yes"
- 第5-6行:否则输出"No"
解题思路: 这道题的关键是理解"或"逻辑。只要满足其中任意一个条件(周一 OR 周三 OR 周五),就输出"Yes"。
也可以写成更简洁的形式: if day in [1, 3, 5] ,用 in 关键字检查元素是否在列表中。
考点分析: if-else 条件判断、 or 逻辑或运算符、多条件组合判断。
第8题:规律求和(与第一套第8题类似)
题目描述: 与第一套第8题"小魔法师收集星星"类似,考查for循环累加求和。输入一个正整数n,求1到n的累加和。
参考代码:
n=int(input())
total=0
foriinrange(1,n+1):
total+=i
print(total)
解题思路与第一套第8题完全一致 :用for循环遍历1到n,用累加器total逐次加上每个数。这是信息素养大赛的高频考点,两套题都考到了,说明累加求和是小学组的核心技能。
考点分析: for循环、range()函数、累加器模式。
第9题:数学公式应用(与第一套第9题类似)
题目描述: 与第一套第9题"符文魔法"类似,同样考查弗罗贝尼乌斯公式的应用。给两个正整数,经过一定变换后计算不能凑出的最大值。
参考代码:
a,b=map(int,input().split())
x=a+7
y=b-3
ans=x*y-x-y
print(ans)
解题思路与第一套第9题一致。 两套题在编程题的高难度部分保持了相同的考点深度,说明弗罗贝尼乌斯数(鸡块问题)是本届复赛的区分度题目。
考点分析: 数学公式编程实现、 map() + split() 输入处理。
第10题:枚举方案数(与第一套第10题类似)
题目描述: 与第一套第10题"完美购买方案数"类似,考查三重循环枚举所有可能的组合。给定总金额和几种商品的单价,求恰好花完钱的方案数。
参考代码:
n=int(input())
count=0
foriinrange(n//5+1):
forjinrange(n//8+1):
forkinrange(n//10+1):
if5*i+8*j+10*k==n:
count+=1
print(count)
解题思路与第一套第10题一致。 三重循环暴力枚举是小学组复赛最高难度的编程题型,两套题都考到了这一知识点。
考点分析: 多重循环枚举、整除运算、条件计数。
考点分布总览
通过对两套真题的完整分析,我们可以清晰地看到本届复赛的考点分布:
选择题考点分布
编程题考点分布
备考建议
夯实基础,不丢选择题分
选择题考查的都是Python的基本概念:变量命名、数据类型、列表操作、输入输出、循环结构。这些内容没有捷径,需要孩子把课本基础知识吃透。建议每天做3-5道选择题保持手感。
编程题分层次突破
从两套题的编程题来看,难度呈现明显的梯度:
- 第6-7题(基础题) :输入输出 + 简单运算 / 条件判断。这部分必须拿满分,属于"送分题"。
- 第8题(中等题) :for循环累加。这是循环结构的入门应用,是必须掌握的核心模式。
- 第9题(进阶题) :数学公式应用。需要孩子具备一定的数学知识储备(如弗罗贝尼乌斯数),能读懂题目中的数学关系并用代码表达。
- 第10题(挑战题) :多重循环枚举。这是整套试卷最考验编程思维的题目,需要理解"穷举"思想。
两个特别提醒
第一,input()的陷阱。 选择题第3题专门考了 input() 返回字符串这个知识点。很多孩子在编程时忘记用 int() 转换,导致计算结果出错。一定要养成习惯:输入数字后立刻用 int() 或 float() 转换。
第二,读题要仔细。 第9题的"符文魔法"故事性很强,但不要被华丽的包装迷惑——核心就是一个数学公式。学会从题目描述中提取关键数学关系,是信息素养大赛的重要能力。
写在最后
2025年信息素养大赛Python小学组复赛的两套题,整体难度适中,考点覆盖面广。两套题在编程题部分的考点高度一致(基本运算→条件判断→循环累加→数学公式→枚举),说明命题组对小学组的知识边界把握得很精准。
对于备赛的孩子来说,把这10道选择题和10道编程题吃透,基本就覆盖了复赛80%以上的考点。剩下的就是多练、多写、多调bug。
编程学习没有捷径,但有正确的方法。祝所有小选手在接下来的比赛中取得好成绩!
觉得这篇文章有帮助?点个「在看」让更多家长看到 👇
有问题欢迎在评论区留言,我们一起交流备考经验 💬
关注本号,后续将持续更新信息素养大赛系列真题解析与备考攻略 🔔