第一次Python作业,看起来是编程入门里最简单的一步,但很多人恰恰就是被这一步劝退的。我见过不少同学课堂上听懂了、看示例也看懂了,可回家一打开电脑就是跑不通。最气人的是报错信息不告诉你错在哪,只甩出一屏英文,搞得你连搜索都不知道该搜什么。
这篇文章不打算讲高深的东西,就把第一次作业这条路完整走一遍。从Python安装、编辑器配置,到第一段可运行的Python代码,再到那些最常见的报错排查办法。零基础的人照着做就行,大概二十分钟,把手边这关过了,后面编程的路才会比较顺。
1. 准备阶段:Python安装与编辑器配置
1.1 选版本与安装:少走弯路的关键几步
第一件事是装Python。这里最常见的问题不是“装不上”,而是“装错版本”。很多新手直接去官网下载最新版,结果跑作业的时候发现,课程里用的第三方库还没适配新版本,或者老师讲义里的语法在自己机器上跑不通。所以我的建议是:如果老师或课程明确指定了版本,那就严格按指定版本来;如果没有指定,装当前主流稳定版就好,比如3.10或3.11,别盲目追最新。
选版本这件事背后有个很实际的逻辑:第一次作业的代码量很小,基本都是print、for、if这类基础语法,新版本的特性和旧版本的区别,你根本用不上。反而版本越新,第三方库适配的风险越高。你真正需要的是一个“稳定、兼容、教程对得上”的环境,而不是一个“看起来最新”的版本。
安装步骤方面,Windows用户去python.org/downloads下载64位安装包,运行安装程序的时候,注意安装向导第一页最下面有个Add Python to PATH,这个勾选一定要勾上。很多人后面在终端里输入python提示“不是内部或外部命令”,就是栽在这一步。勾选之后,Python就会自动写进系统环境变量,终端才能识别python命令。
macOS用户建议下载官方安装包,不要只用系统自带的/usr/bin/python,那个版本往往偏老,而且管理权限比较麻烦。Linux用户一般用包管理器安装,Ubuntu/Debian可以执行:
sudo apt update sudo apt install python3装完之后打开终端或命令行,输入:
python --version如果显示类似Python 3.11.5,说明安装成功。如果显示的是python3而不是python,也不用慌,Linux系统里两条命令的差别只是别名问题,后面统一用能识别的那条就行。
注意:安装路径尽量用默认,别改到中文目录下面。Windows下Python解释器的路径一旦包含中文,某些依赖外部工具的库会无辜报错,排查起来很头疼。
1.2 编辑器选型:VSCode、IDLE、Jupyter与PyCharm
第一次作业选编辑器,原则就一条:能快速运行起来比什么都重要。工具本身不决定你编程能力的高低,折腾工具的时间却会消耗你学编程的热情。
我见过四种常用选择,各有各的适用场景:
| 工具 | 适合的作业场景 | 优点 | 新手注意点 |
|---|---|---|---|
| IDLE | 零基础第一课 | Python自带,不用额外安装,写完按F5就能跑 | 编辑体验一般,错误提示不算友好 |
| VSCode | 通用脚本作业 | 轻量、免费、插件丰富,后续写项目也能用 | 第一次要手动配置解释器 |
| PyCharm | 长期写大作业 | 集成度极高,调试方便 | 界面和配置项太多,新手容易迷路 |
| Jupyter Notebook | 数据分析/可视化作业 | 代码分格运行,结果直接显示在下方 | 运行顺序容易乱,建议从上往下执行 |
我个人推荐第一次作业用VSCode,理由很实在:第一,免费;第二,环境配置文件是显式的,你能看清自己用的是哪个解释器;第三,等你第二个月开始写爬虫、做数据分析、写小脚本时,还是同一个工具,不用来回切换。如果只想最快跑起来,那直接用IDLE,连环境变量都不用管,上课机房没网也能用。
VSCode配Python环境的完整流程是:装好Python之后,打开VSCode,在扩展商店搜索“Python”,安装微软官方发布的那一款。然后按Ctrl+Shift+P打开命令面板,输入Python: Select Interpreter,选择你刚安装的Python版本。这一步做完,VSCode右下角状态栏会显示解释器路径,表示它已经知道用哪个Python来运行代码了。有时候装完扩展还需要重启一下窗口,不然解释器列表可能刷不出来。
新建文件的时候,文件名建议用homework1.py,千万别用中文文件名。虽然能跑,但一旦涉及文件路径、编码问题,麻烦会成倍增加。用英文小写加数字命名,是最省心的方案。
1.3 三分钟环境验证:确认已经能跑代码
环境装完之后,别急着写作业,先做三件事把环境验证一遍。第一件,终端执行python --version,确认版本号能正常输出。第二件,在终端输入python回车,直接进入交互式环境,输入print("hello"),如果能输出hello,说明Python解释器本身没问题。第三件,在VSCode里新建一个.py文件,写上:
print("Hello Python")点右上角的绿色运行按钮,看下方终端输出。如果这三次都成功,你的基础环境就是健康的,后面写作业遇到问题的时候,你也能确认问题出在代码而不是环境。
第一次运行VSCode代码时,可能会弹窗让你选择终端类型,PowerShell或命令提示符都可以,建议统一选PowerShell。之后运行代码时控制台会自动在下方打开,你看到的输出就是真实运行结果。
2. 核心语法:第一次作业压箱底的四块内容
2.1 变量与数据类型:给数据起个名字
第一份作业里的许多题目,本质上都是在“操纵数据”。变量就是给数据贴一张标签,方便你在代码里反复引用它。Python里变量不需要声明类型,直接赋值就行:
name = "小明" score = 95 ratio = score / 100 is_passed = True这里name是字符串、score是整数、ratio是浮点数、is_passed是布尔值。Python是动态类型语言,同一个变量可以重新赋不同类型的值,这很灵活,但也容易带来隐患。比如你一开始把score赋成整数,后面不小心赋成了字符串,运行计算时就会报类型错误。
第一次作业里,我建议你把常见的四种数据类型记牢:字符串str用于文本,整数int用于整数运算,浮点数float用于小数运算,布尔值bool用于条件判断。还有一个容易忽略的是list列表,比如作业里让你输出2到100的所有质数,通常就是放在列表里再打印。
命名变量的规则也需要特别注意:变量名不能以数字开头,不能包含空格,不能和Python关键字重名。看到别人代码里出现if = 10这种报错,多半就是命名踩了关键字。变量命名的另一个建议是用英文而不是中文拼音,比如total_sum比zonghe好,user_name比yonghuming好。这不是崇洋媚外,而是英文命名在跨电脑、跨平台、查资料时都更通用。
2.2 输入与输出:程序与用户对话的窗口
第一次作业十有八九会用到input()和print()。这两个函数就是你写的程序和用户交互的窗口。print()负责输出,这个很好理解;input()负责从键盘读取内容,但有个非常经典的坑:input()返回的数据类型永远是字符串。
很多人写过这样的代码:
age = input("请输入你的年龄:") print(age + 1)运行后直接报TypeError,因为age是字符串,字符串和整数不能通过加号拼接。正确做法是先做类型转换:
age = int(input("请输入你的年龄:")) print(age + 1)所以遇到需要参与数学运算的输入,一定要记得用int()或float()包一层。如果你想同时读取多个数字,可以配合split()方法:
a, b = input("请输入两个数,用空格隔开:").split() a = int(a) b = int(b) print("两数之和为:", a + b)这段代码里,split()默认按空格切割字符串,返回一个列表,再用多变量赋值分别接住。第一次作业里如果要求输入三个数求最大值,处理方式也是类似的,先接收字符串,再逐个转成数值。
输出方面,Python里字符串格式化有几种方式。最老式的用%占位,后来有了format()方法,现在最推荐的是f-string,写法最直观:
name = "王小明" score = 88 print(f"{name}的考试成绩是{score}分")大括号里可以直接放变量,甚至可以放表达式,比如{score + 10}。f-string是Python 3.6以后才有的写法,如果你的课程环境版本过老,可能需要用format()替代。第一次作业建议直接在文件头部写上版本信息,方便排查。
2.3 条件判断、循环与函数:作业题的主要构成
第一份作业里的大头,基本就是三件事:条件判断、循环、函数。条件判断解决“在不同情况下走不同分支”的问题,循环解决“重复做一件事”的问题,函数解决“把一段逻辑封装起来重复调用”的问题。
条件判断的基本语法是:
if 分数 >= 60: print("及格") elif 分数 >= 80: print("良好") else: print("加油")注意Python用缩进表示代码块,if下面的行前面要有统一的缩进,不然会报IndentationError。我第一次改作业时,见过有人把缩进写成两个空格、四个空格混用,结果程序莫名奇妙报错,后来统一成四个空格才解决。这是Python和其他语言最明显的差异,也是新手最容易栽跟头的地方。
循环的两种主要方式:for循环适合遍历可迭代对象,while循环适合“条件满足就一直执行”的场景。第一次作业里求和、遍历范围这类题,用for循环加range()比较顺手:
total = 0 for i in range(1, 101): total += i print(total)range(1, 101)生成从1到100的整数序列,注意是左闭右开,右边不包含101。这个细节也常考,题目如果要求“1到100之间所有自然数之和”,写range(1, 101)就对了,写range(1, 100)会漏掉100。
函数则是把一段有名字的逻辑封装起来。第一次作业里让你判断质数、求阶乘之类的题,都会要求你定义一个函数:
def is_prime(n): if n < 2: return False for j in range(2, int(n ** 0.5) + 1): if n % j == 0: return False return True函数的关键词是def,函数名后面跟括号和参数列表,函数体内缩进。return负责返回结果,如果没有return,函数默认返回None。第一次写函数的人常犯的错误是忘记return或者把return写在循环里提前退出,稍不留神逻辑就不对了。
3. 完整实操:一份典型作业从写代码到提交
3.1 一份典型的第一次作业是什么样
以我见过的大多数Python入门课程为例,第一次作业通常包含五类小任务:基础输出、数学计算、条件判断、循环求和、简单函数。单个任务都很小,但合在一起就是要逼你把最基本的语法走一遍。
有这样一份非常典型的作业,五个小任务分别是:
- 打印一句问候语。
- 输入圆的半径,计算面积。
- 输入三个数,输出最大值。
- 计算1到100之间所有奇数的和。
- 定义一个判断质数的函数,并输出2到100之间的所有质数。
这几个任务几乎没有超纲,覆盖了第一节到第三节课的内容。每道题都有明确的考察点,下面逐题过一遍完整的实现过程。
3.2 五个小任务逐题实现与运行效果
任务1,考察基础输出。最简单,但要展示出代码结构和输出:
print("你好,这是我的第一次Python作业") print("学号:20250001") print("姓名:王小明")运行结果:
你好,这是我的第一次Python作业 学号:20250001 姓名:王小明这个任务的核心不是内容本身,而是让你体会“代码写在文件里,运行后从终端输出”的过程。第一次写作业时,你完全可以多输出几行,把个人信息也打出来,实战中不少老师也确实会在作业里要求输出姓名学号。
任务2,考察输入和类型转换:
r = float(input("请输入圆的半径:")) area = 3.14159 * r * r print(f"半径为{r}的圆面积是{area:.2f}")运行示例:
请输入圆的半径:5 半径为5.0的圆面积是78.54这里有两个细节需要解释。第一,float()把输入字符串转成浮点数,这样即使输入的是5.5也没问题。第二,f"{area:.2f}"表示保留两位小数,最终输出78.54而不是78.53975。格式化输出是作业里隐形的得分点,会把数字缩成合理位数,代码看起来更整洁。
任务3,考察条件判断:
a = float(input("请输入第一个数:")) b = float(input("请输入第二个数:")) c = float(input("请输入第三个数:")) if a >= b and a >= c: max_num = a elif b >= a and b >= c: max_num = b else: max_num = c print(f"三个数中的最大值是:{max_num}")运行示例:
请输入第一个数:12 请输入第二个数:7 请输入第三个数:9 三个数中的最大值是:12.0这道题如果换成“用列表和max()函数一行解决”,其实也能做,但第一次作业考察的就是你把条件判断写明白。elif的链式结构里,如果几个条件互斥,顺序其实影响不大,但如果条件里有重叠区间,就必须小心先后顺序。有个易错点:如果三个数相等,进入哪个分支?答案取决于你用的是>=还是>。用>=时,相等情况下也能正常输出一个数。
任务4,考察循环和累积求和:
total = 0 for i in range(1, 101): if i % 2 == 1: total += i print(f"1到100之间所有奇数的和是:{total}")运行结果:
1到100之间所有奇数的和是:2500i % 2 == 1是判断奇数的方式,也可以用i % 2 != 0。这道题的另一层考察点是range()边界的把握。写range(1, 101)才能包含100,写range(1, 100)就把100漏了,虽然这道题只要奇数,100本身不影响结果,但如果题目改成求偶数和,边界错了答案就错了。
任务5,考察函数和列表推导:
def is_prime(n): if n < 2: return False for j in range(2, int(n ** 0.5) + 1): if n % j == 0: return False return True primes = [n for n in range(2, 101) if is_prime(n)] print("2到100之间的质数:") print(primes)运行结果:
2到100之间的质数: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]判断质数理论上只需要除到n的平方根就够了,不需要一直除到n-1。int(n ** 0.5)就是向下取整的平方根。这是第一次作业里不太容易想到的优化点,也是我特别想提醒的地方:循环的边界条件不是随便写的,能少算就少算,这是程序思维的起点。列表推导式[n for n in range(2, 101) if is_prime(n)]可能看着有点吓人,实际意思就是“在2到100之间,把满足is_prime(n)为真的n收集成列表”。
3.3 提交作业前的五连查
代码跑通之后,提交之前还有几个容易被忽略的细节。第一个,文件名必须是homework1.py这种英文命名,千万别提交一个叫“作业一.py”的文件。第二个,代码里的缩进要统一,空格和Tab不能混用,否则在老师机器上打开可能直接报错。第三个,运行截图要截全,既要有代码窗口,也要有运行结果,很多老师要求的就是“代码+输出”的完整证据。第四个,代码顶部可以加一段注释,写上姓名、学号、作业编号,这会让作业看起来更专业。第五个,有条件的话,把同一个.py文件在你自己的电脑和教室电脑上都运行一遍,避免环境差异导致“在我这是对的,在你那报错”。
3.4 附赠小彩蛋:用代码打印一颗爱心
第一次作业如果做完还有余力,我很推荐加一个小彩蛋,既锻炼代码思维,也能让作业变得更有趣。用Python打印一颗爱心字符画,代码不算长,但每一步都在锻炼你对循环和条件的理解:
for row in range(6): for col in range(7): if (row == 0 and col % 3 != 0) or (row == 1 and col % 3 == 0) or (row - col == 2) or (row + col == 8): print("*", end="") else: print(" ", end="") print()运行效果:
** ** ******* ******* * * * * *这段代码的原理是直接在字符网格上“按规则画点”:每一行的哪些位置放星号,哪些位置放空格,是由行列坐标的条件判断决定的。print("*", end="")不换行地连续输出,外层print()负责换行。如果说前面五道题是基本功,那么这个小彩蛋就是第一次作业的加分项,能写出来至少说明你已经能把for循环、if条件、函数思想组合在一起用了。
4. 常见问题与排查技巧实录
4.1 环境类报错速查表
第一次作业跑不通,十有八九不是代码问题,是环境问题。我把自己遇到过的、以及帮别人排查过的典型环境问题整理成了一张速查表:
| 报错/现象 | 可能原因 | 解决办法 |
|---|---|---|
'python' 不是内部或外部命令 | 安装时没勾选Add Python to PATH | 重新运行安装程序,选择Modify并勾选PATH;或在系统环境变量中手动添加Python目录和Scripts目录 |
python能运行,VSCode里运行却报ModuleNotFoundError | VSCode选择了解释器A,终端用的却是解释器B | 按Ctrl+Shift+P重新执行Python: Select Interpreter,确保运行按钮和终端用的是同一个解释器 |
| 中文内容在控制台输出乱码 | Windows控制台默认编码GBK,与Python输出的UTF-8不匹配 | 在文件开头写入import sys; sys.stdout.reconfigure(encoding='utf-8'),或在代码顶部声明# -*- coding: utf-8 -*- |
双击homework1.py闪退 | 代码运行完毕,控制台自动关闭 | 不要用双击方式运行脚本,用VSCode或终端运行,才看得到输出和报错 |
环境类问题的排查诀窍是:遇到奇怪现象,先确认你实际用的是哪个Python。打开终端执行where python(Windows)或which python(macOS/Linux),看路径是不是你装的那个。很多电脑里装了不止一个Python,系统默认调用的那个和你在VSCode里选的那个不一样,就会产生“终端能跑、编辑器不能跑”或相反的诡异情况。
4.2 语法与逻辑错误速查表
代码层面的报错,其实是有规律可循的。掌握几个最常见报错的语义,你就能少掉一半头发:
| 报错信息 | 常见原因 | 排查思路 |
|---|---|---|
SyntaxError: invalid syntax | 中文标点(比如中文括号、冒号)混入代码 | 看报错提示的行号,逐字符检查那一行,尤其是(、:、逗号是否用了中文输入法 |
IndentationError: unexpected indent | 缩进不统一或多余缩进 | 打开“显示空格”功能,把该文件所有缩进统一成四个空格 |
NameError: name 'xxx' is not defined | 变量名拼写不一致 | 搜一遍代码里所有出现该变量名的地方,常见于print写成prnit、变量少打一个字母 |
TypeError: can only concatenate str | 字符串和数字做了加法/拼接 | 用str()或int()显式类型转换后再操作 |
IndexError: list index out of range | 访问列表不存在的下标 | 打印列表长度,确认下标从0开始,取最后一个元素用-1 |
我最想强调的其实就是第一行报错信心的阅读。很多人看到报错,习惯性往下翻,其实最关键的信息往往就在最上面几行或者最后一行。报错信息会告诉你文件名、行号、错误类型。比如File "homework1.py", line 8,意思就是第8行有问题。先看行号,再看错误类型,最后看描述,比把整屏英文发群里问人有效得多。
4.3 让作业印象分更高的三个习惯
关于第一次作业,最后再聊三个能让你少走弯路的小习惯。第一个习惯是“每写一个小功能就运行一次”,别等五个任务全写完才跑,否则报错都不知道该从哪找。我见过一个同学一口气写完五道题,运行时报了三次错,到最后已经分不清哪个错误属于哪道题。这可是基础中的基础。及时运行,错误是局部的,排查范围就小很多。
第二个习惯是“报错信息以前三行为重点”。调试时,先读文件名和行号,再读错误类型。如果你在VSCode里,报错位置下方会有波浪线,鼠标悬停能看到提示,这比命令行更直观。新手最忌“看到报错就删掉重写”,删掉之前一定要先读它,因为报错里已经告诉了你线索。
第三个习惯是“把作业当成小型项目来对待”。哪怕只有五道题,也建议用一个main.py把所有代码组织好,而不是五个零散文件。函数命名清晰、语句增加适当注释、输出结果用中文提示语包装一遍,这几个细节组合在一起,作业的完成度立刻就不一样了。代码不是写给机器看的,更多是写给下学期、以及改你作业的人看的。
我个人接手过不少第一份Python作业的辅导,最后发现真正拉开差距的其实不是天赋,而是流程:环境干净、语法基础牢固、遇到报错不慌、提交前认真自查。能做到这四点,你的第一次Python作业不仅能顺利交付,还会顺带建立起一套往后写代码都能用的好习惯。第一次作业不是终点,它只是你和Python这段关系正式开始的起点。