每年带学生备考中国电子学会的Python等级考试我都会遇到同一类问题家长一看到考纲里有turtle画图就开始担心“孩子美术不好怎么办”学生自己打开电脑第一件事也是先让海龟转两圈。真到了考场上才发现turtle在一级卷子里的存在感远没有想象中高决定过与不过的其实是环境配置、数据类型、运算符、条件循环这些最基础的语法内容。所以这篇我把turtle一整块拿掉单独把一级考试真正的知识底盘给你捋一遍。这篇汇总适合三类人看正在准备一级考试、想把基础语法一次学扎实的学生陪孩子备考、想搞清楚“到底考什么”的家长以及刚开始教Python、需要一份教学蓝图的老师。文章里不会出现任何画图代码所有内容围绕一级考纲里的非画图部分展开直接从最容易被忽略的细节讲起。1. 一级考试的知识地图不画图之后还剩什么1.1 这个考试的组织方与定位先对齐一个背景这里说的“Python等级考试”指的是中国电子学会主办的全国青少年软件编程等级考试中的Python方向。它一共分八级一级是入门场主要面向四年级以上、接触过图形化编程或者完全零基础的学生。一级的核心目标不是考察高深算法而是确认三件事你装好了编程环境、你能读懂最基本的程序、你能写出最简单的几十行代码。考卷通常以客观题为主选择加判断是绝对主力部分批次会配一道很简单的操作题全程大概60分钟。也就是说一级不考复杂逻辑考的是“有没有把语言学规矩”。1.2 去掉turtle之后一级还剩哪些模块很多考生对一级的印象就是“画个五角星”“让海龟走个正方形”但实际上turtle只是知识体系中的一个应用场景。把画图全部摘掉之后剩下来的才是真正的地基知识模块大致占比核心考点环境搭建与代码规范约10%安装、IDLE、缩进、注释、命名规则变量与数据类型约20%六种基本类型、赋值、类型转换输入输出约15%print参数、input返回值、格式化输出运算符约15%算术、比较、逻辑、赋值、成员运算条件与循环约25%if判断、for循环、while循环、中断语句列表、元组、字典约10%创建、访问、基本方法函数与模块约5%自定义函数、import导入、random库这个占比是我根据多年带考和教研经验总结出来的大致分布不是官方数据但方向很明确控制流条件循环才是最核心的考查对象。很多学生平时把精力花在画图上结果25%的分数白白丢在if和for上非常可惜。2. 环境搭建与代码规范最容易被忽略的“隐性考点”2.1 怎么装Python最省事一级考试对环境的考察不会让你现场敲命令但会以选择题形式问你在哪里下载Python、IDLE是什么、代码文件后缀名是什么。这些题不难但要注意三个高频点。第一下载要从官网走网址是python.org进去之后点Downloads选对应系统的安装包。这里有一个经典的坑安装到第一步时窗口下方有个“Add Python to PATH”选项很多人直接忽略一路Next结果装完在命令行敲python提示找不到命令。所以安装时一定要把这个选项勾上不勾的话后面用起来会非常痛苦。第二装好之后开始菜单里会有一个叫IDLE的软件这是Python官方自带的开发环境也是考场上最可能出现的编辑器。IDLE最大的优点是零配置装完即用用它写代码、运行代码都只需要按F5。我建议学生平时练习就用IDLE不要在初学阶段折腾复杂IDE避免把精力浪费在配置上。第三Python文件的后缀名是.py这个细节也会出现在判断题里。还有一点容易被忽略IDLE区分“交互模式”和“文件模式”。交互模式是窗口里直接输入代码按回车适合做计算器用文件模式才是真正写程序的地方通过File → New File打开。很多新手混用这两个模式代码一长就乱了。2.2 缩进、注释和命名考卷上会反复出现的三件事一级卷子里代码规范类题目往往藏得比较深。比如给你一段代码问你哪里会报错答案往往是“缩进不一致”或者“变量名不合法”。缩进是Python的语法规则不是为了让代码好看。正确写法是同一层代码用相同数量的空格或Tab缩进4个空格是社区标准。尤其需要注意的是不能混用Tab和空格IDLE里默认按Tab会自动转成4个空格所以只要你不把代码复制到其他工具里大概率不会出问题。考试当中如果看到一段代码的if下面有的行缩进了4格有的行缩进了2格这题基本就是问这个错误。注释方面一级只需要掌握两种单行注释用井号#开头多行注释用三引号或包起来。判断题里常出现的坑是有人以为#号只在行首有效实际上#放在行尾也有效它后面的内容都会被忽略。命名规则也是一级的重要考点。合法的变量名需要满足三个条件只能由字母、数字、下划线组成不能以数字开头不能是Python的关键字比如if、for、while、True这些。我编了一个顺口溜帮助学生记忆字母数字下划线数字不能站排头关键字别乱用大小写要分清。注意Python是区分大小写的Age和age是两个不同的变量这个也考过。3. 变量与数据类型基础中的基础坑最多的部分3.1 变量是怎么工作的变量可以理解成一个贴了标签的储物柜赋值操作就是往柜子里放东西。比如执行age 10相当于在内存里开了一个格子名字叫age里面存了10。一个特别容易被新手忽略的点是Python的变量不需要提前声明类型赋值是什么就是什么。而且同一个变量可以在程序运行过程中改存不同类型的数据这叫做动态类型。比如x 10 x hello print(x)这段代码完全合法输出结果是hello。判断题里如果问“Python变量使用前必须声明类型”答案是错的。还有一点要注意赋值符号是单等号它表示“把右边的值放进左边的变量”和数学里的等号完全是两回事。所以a a 1在Python里是合法的意思是取出a的值加1再存回a。3.2 六种基本数据类型的识别一级考试需要掌握的数据类型有六种整数int、浮点数float、字符串str、布尔bool、列表list、元组tuple、字典dict。实际上数下来是七种但官方大纲常按六大类分把整数和浮点数合并成“数字类型”来算。考生不需要纠结分类口径只需要能准确判断一个值属于什么类型。识别类型的几个要点10是整数10.0是浮点数两者不是同一个东西。123是字符串不是整数虽然它长得像数字。True和False是布尔值注意首字母必须大写true会直接报错。[1, 2, 3]是列表(1, 2, 3)是元组{name: 张三}是字典。type()函数可以查看一个数据的类型比如type(3.14)的结果是class float。容易出错的判断题是type(100) int这个判断成立吗不成立“100”是字符串。还有一个常见选择题1.0是什么类型答案是浮点型不是整型哪怕它的小数部分是0。3.3 类型转换的经典错误类型转换是考试的重点也是实际做题时最容易写错的地方。最常用的三个转换函数是int()、float()、str()。简单理解就是强制把一种类型变成另一种。但转换不是万能的下面这种写法就会报错int(3.14)为什么报错因为int()函数在处理字符串时要求字符串内容是“长得像整数”的字符串比如123或者-5而3.14带小数点int()无法把它直接变整数。正确的做法是先转float再转intfloat(3.14) # 结果是3.14 int(3.14) # 结果是3直接截断小数部分还有一个经典案例int(abc)也会报错因为abc根本没有办法转成数字。这些点在一级的选择题里反复出现我建议把int()当成一个“挑剔的转换器”它只接受能当作整数的取值。反过来str()就宽容得多任何类型转成字符串都几乎不会报错。str(123)的结果是123str(True)的结果是True。关于浮点数专整型还有一个小坑int(3.99)的结果是3不是4它是直接砍掉小数部分不是四舍五入。这也是判断题的常客。4. 输入输出从print到input的完整链路4.1 print的三个隐藏参数大多数学生对print的理解就是“打印东西”其实print有参数而且考试会考。最基本的用法是print(你好)。但print还有两个隐藏参数sep和end。end表示打印结束后以什么字符结尾默认是换行符\n。所以两个print默认会打在两行但如果写了print(hello, end )就不会换行而是接一个空格。sep表示多个内容之间用什么隔开默认是空格。看这个例子print(a, b, c)输出结果是a b c中间是空格。如果想用逗号分隔需要写成print(a, b, c, sep,)这个输出结果是a,b,c。一级的选择题经常给出这样的代码问输出结果是什么很多学生默认以为逗号会原样输出实际上print的逗号只是分隔符不会出现在输出里。4.2 input返回的一定是字符串这是初学阶段最致命的坑没有之一。input()函数负责从键盘读取用户输入但它返回的数据类型永远是字符串。age input(请输入年龄)用户输入18存到age里的不是整数18而是字符串18。如果把age和数字比大小就会直接报错。正确的做法是先转换age int(input(请输入年龄))把input和int()套着用代码读法是从内往外读先执行input再把input的结果传给int转成整数。考试里会怎么考这个点通常会出一道程序分析题用户输入5程序执行a 5和a input()有什么不同然后问你a 3能否执行。如果a是int类型结果是8如果a是字符串就会报TypeError因为字符串和整数不能直接用加号拼接。这个逻辑要刻在脑子里。4.3 格式化输出的三种写法一级对格式化输出的考察主要集中在%格式化和format方法上f-string在部分教材里也提到了最好一并掌握。%格式化是最传统的写法name 小明 score 95 print(学生%s分数%d % (name, score))%s代表字符串占位%d代表整数占位后面用%接一个括号把变量按顺序填进去。注意如果变量是浮点数推荐用%f默认保留6位小数。format方法也很常用print(学生{}分数{}.format(name, score))花括号就是占位符format括号里的变量按顺序填充。f-string是更现代的写法print(f学生{name}分数{score})字符串前面加f然后直接用花括号插值。我个人的建议是考试不管遇到哪种写法都要能看懂但在平时练习中优先用format或f-string因为它们更直观不容易在多个占位符之间搞错顺序。5. 运算符与优先级一脚踩一个坑的地方5.1 除法三兄弟/、//、%一级的运算符题里最常考的就是除法三兄弟的区别这是概念题里的经典。/是普通除法结果永远是浮点数7 / 2的结果是3.5。//是整数除法也叫地板除结果向下取整7 // 2的结果是3。%是取余数7 % 2的结果是1因为7除以2商3余1。这三个运算符合起来有一个检查公式被除数 商 × 除数 余数。比如17除以517 // 5的结果是317 % 5的结果是2验证一下3 × 5 2 17完全吻合。最容易被坑的是负数场景-7 // 2的结果是-4不是-3。因为地板除是向下取整-3.5向下取整就是-4。这个知识点一级可能不深究但有几套真题里出现频率不低还是有个印象比较好。还有一个细节2 ** 3是幂运算结果是8**表示几次方。这个也要认识因为初学者容易把它当成乘号。5.2 比较运算与逻辑运算的组合比较运算符包括大于、小于、等于、不等于、大于等于、小于等于对应符号是、、、!、、。这里有个经典迷惑点是赋值才是判断相等。第一次写条件判断的人几乎都会把两个等号写成一个导致结果和自己想的不一样。考试不会考这个报错但程序阅读题里会分辨这两个符号的作用。逻辑运算符有三个and、or、not。用生活语言理解and要求两边都成立or只要一边成立就行not是取反。a 5 print(a 3 and a 10) # True print(a 3 or a 10) # True print(not a 3) # False一级的逻辑运算题通常会把比较运算和逻辑运算混在一起比如3 2 and 4 5结果是False因为右边不成立。注意and的优先级高于or所以True or False and False的结果是True计算方式等同于True or (False and False)。5.3 运算符优先级速查表优先级是选择题里比较头疼的考点。我给你一张简化版优先级表从高到低排列优先级运算符说明1()括号2**幂运算3*、/、//、%乘除、取余4、-加减5、、、、、!比较6not逻辑非7and逻辑与8or逻辑或9赋值考试里最常见的是“乘除优先于加减”这种基础运算以及“先算术再比较再逻辑”的组合运算。比如2 3 * 4 15先算乘法3×412再算加法21214最后判断1415结果是False。记优先级有个小技巧不确定时先加括号括号的优先级永远最高不会错。6. 条件判断与循环控制流是编程的第一步6.1 if-elif-else的完整结构条件判断是整个一级考试的重头戏它不需要复杂算法但要求你能读明白多分支的逻辑。基本结构score 85 if score 90: print(优秀) elif score 80: print(良好) elif score 60: print(及格) else: print(不及格)Python执行if结构时从上往下依次判断条件一旦某个条件成立就执行对应的代码块然后跳过剩下的所有分支。也就是说即使score也满足后面的条件程序也不会再执行后面的elif了。比如score95第一行就满足输出“优秀”后面统统不判断。这个“只要执行一个分支就结束”的特性是选择题最爱考的逻辑。经常会出现一道题x10判断条件是if x 5、elif x 8、else问输出什么。正确答案是只输出第一个分支的内容不会因为x同时大于5和8就输出两个结果。条件还可以嵌套if里面套if这在判断“合法输入”类的题目中很常见。但一级考试不会考太深的嵌套能看懂两层就够。6.2 for循环与range()的配合for循环是用来“有次数地重复做事”的它最常见的搭档是range()。range(5)生成0、1、2、3、4一共5个数注意是左闭右开区间到5也是不含5的。这个边界问题考试里几乎每年都考range(1, 5)生成的数是1、2、3、4而不是1到5。记口诀“包头不包尾起始默认0”。再看一个典型例题sum 0 for i in range(1, 6): sum sum i print(sum)这段代码是计算12345结果是15。考试中会把range换成range(1, 5)或range(6)问你sum的值是多少本质上就是考边界。还要注意range可以带步长比如range(0, 10, 2)生成0、2、4、6、8步长为2代表隔一个取一个。这个在循环里打印偶数的题目中会用到。for循环还有一个容易忽略的地方它除了遍历range还可以直接遍历字符串和列表。比如for ch in abc: print(ch)这个会依次输出a、b、c。一级里这种遍历方式考得不多但字符串遍历的题目出现过需要认识这个写法。6.3 while循环与break、continuewhile循环和for循环的区别在于for知道要循环几次while则是在条件成立期间一直循环。i 1 while i 5: print(i) i i 1这个程序输出1到5。最经典的错误是忘记写i i 1这一行导致i一直等于1条件永远成立程序变成死循环。考试里如果出一道阅读题让你判断代码有没有问题死循环就是最常见的陷阱。break和continue是循环配套的中断语句两者的区别必须分清break是立即跳出整个循环后面的循环次数全部作废。continue是结束当前这一次循环直接进入下一次循环。举个例子for i in range(1, 6): if i 3: break print(i)输出结果是1、2遇到3就break掉了4和5根本没机会输出。如果把break换成continue结果是1、2、4、5因为i等于3的时候执行continue跳过了打印3但循环还在继续。判断一道continue会结束所有循环吗答案是否定的它只结束当前这一次迭代。6.4 循环嵌套的题目套路一级的循环嵌套考得不难但几乎是一道固定题型用两层for循环生成九九乘法表或者计算累加和。你能看见的是类似这样的代码for i in range(1, 4): for j in range(1, 4): print(i, j)外层循环每执行一次内层循环要完整执行一遍。所以这个程序会输出(1,1)、(1,2)、(1,3)、(2,1)、(2,2)、(2,3)、(3,1)、(3,2)、(3,3)一共9行。也就是说外层执行了3次内层每次执行3次总共3×39次。这个“乘法原理”是解决所有嵌套循环计数题的核心。遇到这种题我建议你在草稿纸上画一个表格横轴是内层循环的范围纵轴是外层循环的范围命中一个格子就对应一次执行一目了然。7. 列表、元组、字典三大容器的考点7.1 列表的创建、索引与切片列表是Python里最常用的容器它可以存多个数据而且这些数据类型可以不一样。[1, hello, True]这是一个合法的列表。列表用方括号创建元素从0开始编号这叫下标索引。lst[0]取第一个元素lst[-1]取最后一个元素。负数索引是一级考试里经常出现的内容因为很多学生习惯从前往后数不习惯-1表示最后一个。切片是列表的一个重要操作写法是lst[起始:结束]和range一样包头不包尾lst [10, 20, 30, 40, 50] print(lst[1:3]) # 输出 [20, 30]如果要取前三个元素可以省略起始位置写成lst[:3]要取后两个可以写成lst[-2:]。这些省略写法在阅读题里出现频率很高。7.2 列表增删改查的高频方法一级需要掌握的列表方法不算多但每个都要清楚语法和效果。lst.append(元素)在末尾追加元素。这是最基础、最常用、也是最爱考的一个方法。lst.insert(位置, 元素)在指定位置插入元素原位置及之后的元素都往后挪。lst.remove(元素)删除第一个匹配到的指定元素。lst.pop()弹出末尾元素相当于删除最后一个。pop(下标)可以删除指定位置。lst.sort()原地排序默认从小到大。len(lst)注意这不是方法是函数返回列表长度。考试里常见的陷阱是append之后返回什么。lst.append(100)执行完之后变量lst本身变了但表达式的结果是None。有些学生喜欢写lst lst.append(100)这会把lst变成None丢掉整个列表。这个细节大概率会以判断题或选择题形式出现。7.3 元组的“不可变”到底是什么意思元组用圆括号创建比如t (1, 2, 3)。它最大的特点是不可变也就是说创建之后不能修改里面的元素。试图执行t[0] 100会直接报TypeError。考试爱考列表和元组的区别核心就是一句话列表可变、元组不可变。但要注意元组不可变指的是它包含的元素引用不可变如果元组里套了一个列表列表本身的内容还是可以改的。一级一般不会考得这么深但理解到这个程度做题就不会慌。元组的切片和索引规则与列表完全一样只是不能增删改。还有一个冷门考点创建一个只有一个元素的元组需要在元素后面加逗号写成(5,)而不是(5)。因为(5)在Python眼里只是数字5外面套了一层括号它不是元组。这个考点有点绕但确实在一级真题里出现过。7.4 字典的键值对操作字典用花括号创建里面存的是键值对每个键对应一个值。比如student {name: 小明, age: 12}取值的写法是student[name]或者student.get(name)前者如果键不存在会报错后者不会返回None。这两个写法的区别很简单取值时更推荐用get程序更安全。往字典里新增键值对可以直接赋值student[score] 95这个操作如果键已经存在就是修改它的值如果键不存在就是新增。考试里会出这样的阅读题字典原本有一个年龄键执行student[age] 13之后长度变不变答案是不变因为只是改值没有新增键。字典的键要求是唯一的如果重复后面的会覆盖前面的。一级考试对字典的考察相对浅掌握创建、取值、改值、判断某个键在不在用in这几个基本点就够了。8. 函数与模块初步从写代码到“组织代码”8.1 函数的定义、参数与返回值一级对函数的考察很基础但它是编程思维的起点。函数用def关键字定义基本结构是def add(a, b): result a b return resultdef后面跟函数名括号里是参数冒号下面是函数体。函数体里的代码只有在函数被调用的时候才会执行调用方式是add(2, 3)结果是5。return的作用是把结果传出来一旦执行到return函数体就结束了。所以return后面的代码不执行这个和break在循环里的作用有点像。看一个阅读题def test(): print(A) return print(B) test()输出结果是AB不会输出。还要注意区分“参数”和“实参”的概念定义函数时括号里的叫形式参数调用函数时传入的才是真实的数据。一级不会考这么深的术语但选择题会问“这个函数有几个参数”这类题要能正确数出函数定义里括号中参数的数量。8.2 import导入与random库模块的使用方式是一级唯一的“外部扩展”考点。导入模块用import然后通过“模块名.函数名”来调用最常见的是random库。random库的三大函数必须熟悉random.random()生成0到1之间的随机浮点数包含0但不包含1。random.randint(a, b)生成a到b之间的随机整数注意这个和小范围含两端randint(1, 3)可能生成1、2、3。random.choice(lst)从列表里随机挑一个元素。代码示例import random print(random.randint(1, 6))这可以模拟掷骰子。考试里容易出的坑是randint到底包不包含边界答案是包含的这个和range不一样不要记混。还有一个导入方式是from random import randint这个写法可以直接用randint而不用加random.前缀。两种写法都行但考试卷面上两种都出现过所以都要认识别看到一个不认识就懵了。9. 备考路线与高频失分点复盘9.1 最常见的失分题长什么样我整理了几道考生错误率最高的题类型比较固定考前过一遍非常有用。第一类是概念辨析题。比如“Python的变量使用前必须声明类型”这种判断答案是错误很多学生受C语言或Java影响想当然选正确。第二类是输出结果题。比如print(10 // 3)的结果是3不是3.3333也不是1。这题的错误率极高因为考生常年用数学除法思维忘了整除操作符的存在。第三类是边界条件题。range(0, 10, 3)生成哪些数答案是0、3、6、9不含10。这题考的是步长加边界容易漏掉9或者多包含10。第四类是类型陷阱题。5 3的结果是什么答案是字符串拼接的53而不是数字8。字符串加号的意义是拼接不是相加。很多考生对运算符的理解停留在数学层面一看到加号就以为是加法。第五类是变量交换题。a, b b, a可以实现两个变量值互换这个写法在Python里是独一无二的其他语言大多需要借助中间变量。考试里可能会出现“如何实现a和b交换”这样的选择题这个写法要认识。9.2 复习建议与考场策略结合我带学生的经验一级备考不推荐海量刷题而是建议按“知识点模块 → 专项练习 → 综合模拟”三步走。先把本文列出的每一个模块的样例代码亲手敲一遍敲的过程会暴露大量“看懂了但不会写”的问题然后针对自己薄弱模块做专项练习最后掐时间做一两套完整模拟卷。考场上有一个非常实用的习惯遇到程序阅读题先在草稿纸上手动走一遍流程把每个变量的变化过程记录下来。很多学生喜欢心算推断结果判断条件一多就乱套。拿张草稿纸老老实实列一遍正确率能提高不少。另外提醒一点一级虽然是入门考但通过率并没有想象中那么高。大量翻车的考生不是不会写代码而是败在细节上——变量名写错、缩进不对、input忘记转换、range边界数错。这些细节恰恰是本文反复强调的内容如果你能把它们都刻在脑子里一级就是水到渠成的事。按我这几年的经验只要把本文列出的六大模块逐条过一遍并且保证每个示例代码都能独立写出来一级考试基本没有太担忧的必要。剩下的就是保持手感每天写几道小题直到考场结束那一刻。