☰
Python第一次作业避坑指南:环境配置、基础语法与常见报错详解
2026/10/1 12:49:54 网站建设 项目流程

如果你正在为“Python第一次作业”挠头,大概率处于这三种状态之一:刚被学校或培训班布置了任务,一行代码还没写;或者装了半天环境,卡在“python was not found”这类报错上;又或者作业题目每个字都认识,但完全不知道从哪下手。这篇内容就是写给正要交第一次作业的人。不管作业是谁布置的,看完你应该能实现三件事:把环境一次装对、看懂题目到底在考什么、写出一份能通过检查且没有低级错误的代码。顺带把新手阶段最常踩的坑,提前全部踩一遍给你看。

1. 装环境就卡住的人,到底卡在哪三个环节

我带过不少刚接触Python的新手,发现一个规律:第一次作业真正卡人的往往不是作业本身,而是环境。有人装了一晚上、卸载重装了两遍,最后一句“我可能不适合学编程”就放弃了。其实安装这件事,九成的人卡在三个环节:版本选择、PATH路径、编辑器配置。

1.1 版本挑花眼?记住两条规则就够了

打开搜索引擎搜“python下载”,你会看到一堆结果:Python 3.13、3.12、3.11、Python 2.7、32位、64位……新手最容易在这里迷失。我的建议很简单:

  • 只认准官方网站 python.org/downloads,不要从莫名其妙的第三方站点下载,那些捆绑安装包会给你塞一堆垃圾软件。
  • 选最新的稳定版(写作时是3.13或3.12),64位版本。不要碰Python 2.x,那是十几年前的老古董,现在几乎所有教程、库都基于Python 3。

有特殊情况另说:如果你所在的课程明确指定了某个版本(比如教材基于3.8),那就跟课程走,装指定版本即可。其余情况统一用最新稳定版,不会有任何问题。版本选对了,后面少折腾一半。

1.2 安装时必勾的选项:Add Python to PATH

这是一个几乎每个新手都踩过、但安装时完全不以为意的选项。在Windows安装Python的向导页面,下方有一个复选框写着Add Python to PATH,一定、一定、一定勾上它。

说个通识:PATH是操作系统的“程序通讯录”。你安装Python时没把它的位置写进这个通讯录,系统就不知道去哪里找python命令。不勾的后果,就是你在命令行敲python,得到一句冷冰冰的“不是内部或外部命令”,或者Windows商店弹出来让你装一个假的Python占位程序。这一整条链路,我会在第四章详细讲排查过程。

安装完成后,不要急着打开编辑器。先按Win + R输入cmd回车,在命令行里依次敲这三个命令验证:

python --version pip --version python

第一条能看到版本号,第二条能看到pip版本,第三条会进入Python交互模式(出现>>>提示符)。验证成功了,环境这一关才算真正迈过去。顺便说一句,如果你用的是Linux系统,多数发行版自带Python,但默认命令可能是python3而不是python,用python3 --version验证即可。

1.3 编辑器别再折腾了:VSCode一套配置走天下

第一次作业阶段,其实用Python自带的IDLE都够。但我建议直接用VSCode,一次配好,后面写爬虫、做数据分析都用得上,不用中途再换。

VSCode的配置其实就三件事:

  1. 安装微软官方的Python扩展(叫Python,不是一堆第三方同名插件)。
  2. 打开命令面板(Ctrl+Shift+P),输入Python: Select Interpreter,选择你刚安装的Python解释器版本。
  3. 新建一个.py文件,写完代码右键选“在终端中运行 Python 文件”,或者点右上角的绿色运行三角。

如果用的是PyCharm,记得下载Community社区版,免费且够用。新建项目时它会自动检测Python解释器,右键直接Run。编辑器本身没有绝对的好坏,关键是别在配置上花超过半小时——时间应该花在写代码上,而不是装饰编辑器上。

2. 看懂作业题目:把一道题翻译成代码的拆解方法

环境装好之后,真正的挑战开始了:看作业题目。第一次作业的题目通常不长,但新手读题和程序员读题是完全两种状态。新手看到的是“有一串文字要求”,程序员看到的是“输入、处理、输出”三个篮子和几个条件分支。你需要做的就是后者。

2.1 作业题的三副常见面孔

翻来覆去,第一次作业基本逃不出这三类:

  • 打印类:用print输出指定内容,比如打印一个三角形、九九乘法表、爱心图案。考的其实是你对字符串和循环的理解。
  • 计算类:输入几个数据,算出某个结果。比如输入半径求圆面积、输入三个数求平均值。考的变量、运算符、类型转换。
  • 判断类:给一个条件,判断属于哪个分支。比如输入成绩判断等级、判断闰年、判断水仙花数。考的是条件语句。

很多作业题是三类混合的。比如经典的“李白打酒”问题——李白提着酒壶,遇店加一倍,遇花喝一斗,经过若干次店和花之后还剩多少酒?这就是典型的“计算+循环”混合题,看着像个数学故事,实际上考的是变量更新和循环。

2.2 拆题三步法:把中文翻译成代码

我教新手拆题,都推荐一个“三步翻译法”,非常管用:

  • 第一步:把题目读三遍,然后圈出名词、动词、条件词。名词通常对应变量(比如“半径”“成绩”“年数”),动词对应操作(“求出”“判断”“循环直到”),条件词对应if或while。
  • 第二步:把所有信息整理成三块——输入是什么、处理过程是什么、输出是什么。
  • 第三步:先用中文把逻辑写一遍(伪代码),再翻译成Python。

给你看一个实际例子。假设题目是:“输入一个三位数,判断它是否为水仙花数。水仙花数是指各位数字的立方之和等于该数本身的数。”

拆解之后是这样的:

  • 输入:一个三位数,比如153
  • 处理:分别取出百位、十位、个位,计算三个数字的立方和
  • 判断:立方和是否等于原数
  • 输出:是或不是(或输出True/False)

2.3 一道完整例题:水仙花数从题目到代码

按上面的拆解,写出来的代码长这样:

# 输入一个三位数 num = int(input("请输入一个三位数:")) # 拆出百位、十位、个位 bai = num // 100 shi = num // 10 % 10 ge = num % 10 # 判断是否为水仙花数 if bai**3 + shi**3 + ge**3 == num: print(f"{num} 是水仙花数") else: print(f"{num} 不是水仙花数")

逐行解释一下:

input()拿到的是字符串,所以外面套了int()做类型转换——这是新手最喜欢漏掉的步骤,漏掉之后就会遇到第四章说的TypeError。//是整除运算符,num // 100直接得到百位数;// 10 % 10是先整除10去掉个位,再取余10得到十位数;%是取余,num % 10直接得到个位。

判断那行的==是“等于”,不是赋值=。很多第一次写代码的人会把两者搞混,写完发现代码跑不出预期结果。**是幂运算,bai**3就是百位数的三次方。

如果你想让老师在检查时眼前一亮,可以再扩展一步:不用输入,而是直接找出一百到九百九十九之间所有的水仙花数,只需要把input那一行换成循环:

for num in range(100, 1000): bai = num // 100 shi = num // 10 % 10 ge = num % 10 if bai**3 + shi**3 + ge**3 == num: print(num)

这个扩展不多费几行代码,但能看出你已经理解了循环和条件的组合逻辑,印象分完全不同。

3. 第一次作业必用的语法:一次讲清缩进、变量与类型

第一次作业涉及的核心语法其实很少:变量、输入输出、类型转换、条件判断、循环。但恰恰是这些基础,里面藏着大量让新手栽跟头的细节。

3.1 缩进的本质:你的代码“层级”靠它表达

很多教程会告诉你“Python用缩进表示代码块”,但你光知道这个不够,你得知道它到底在解决什么问题。在C语言或Java里,代码块用花括号{}包起来;Python则用缩进来区分层层嵌套的关系。比如:

if score >= 60: print("及格")

print("及格")左边那几个空格,就是在告诉Python:这一行是if条件为真时执行的代码,属于“里面”的层级。如果去掉缩进,Python立刻报错IndentationError。

这里有一个所有新手都容易忽视的细节:缩进必须一致。你如果用4个空格,那么同一个代码块里就必须全部用4个空格;如果不小心混入了Tab(制表符),看起来明明对齐了,运行却会报错。很多编辑器默认情况下Tab显示成了4个空格的宽度,视觉上完全一致,这就是为什么“看起来没问题却报缩进错误”会坑那么多人。解决思路我放在第四章。

3.2 变量与命名:Python的变量是“标签”不是“盒子”

关于变量,几乎所有教科书都会说:变量是存储数据的盒子。但我更愿意说,Python的变量更像是一个贴在对象上的标签。当你写:

a = 1 a = a + 1

发生的事情是:内存里先有一个整数对象1,你给它贴了标签a;然后创建了一个新的整数对象2,再把标签a揭下来贴到2上面。原来的1没用了,Python会自己回收它。理解这个对你写作业没有直接影响,但对于你后续理解列表、函数传递会很有帮助——因为列表是可变的,你修改它时标签指向的还是同一个对象,这经常引发令人费解的Bug。

命名的规范也要养成:以字母或下划线开头,只包含字母、数字、下划线。用有意义的英文名,不要用a1、a2这种第二天自己都看不懂的名字。有一个实用小技巧:写中文拼音比写无意义的字母强一百倍,比如nian_ling(年龄)比aa好懂得多。

3.3 类型转换:为什么input()拿到的全是字符串

这是第一次作业里出现频率最高的知识盲区。input()函数有一个让所有人都要踩一次坑的特性:它返回的一定是字符串,哪怕你输入的是数字。

你想想,用户通过键盘输入的内容,本质上都是字符序列。你敲了18,Python收到的是字符串"18",不是数字18。如果你拿它直接做算术:

age = input("请输入年龄:") print(age + 1)

运行时就会报错:TypeError: can only concatenate str (not "int") to str,意思是字符串只能和字符串拼接,不能和整数拼接。

解决办法就是类型转换。三个最常用的转换函数:

  • int(内容):转成整数,比如int("18")得到18
  • float(内容):转成小数,比如float("3.14")得到3.14
  • str(内容):转成字符串,比如str(123)得到"123"

所以上面对比年龄时,正确写法是:

age = int(input("请输入年龄:")) if age >= 18: print("已成年")

通常你只需要记住:凡是拿input()的值做数学运算或比较大小,都要先转成int或float。

3.4 f-string:新手最该优先学会的输出方式

输出格式化有好几种老办法,比如%s占位符、format()方法。但对新手来说,我只推荐f-string,因为它是Python 3.6以后引入的、最直观的写法。在字符串前面加一个f,然后用花括号把变量或表达式包进去:

name = "张三" score = 92 print(f"{name}的成绩是{score}分")

f-string的花括号里可以直接写计算表达式:

r = 4 area = 3.14 * r * r print(f"半径为{r}的圆面积是{area},保留两位小数为{area:.2f}")

{area:.2f}表示把面积保留两位小数输出。这个语法第一次看可能觉得奇怪,但它就是Python里最通用的格式,写作业、以后做数据分析都离不开。

顺带提一个print函数的小细节,方便应付打印类作业。print有两个常用参数:sep控制多个值之间的分隔符,默认是空格;end控制输出结尾的字符,默认是换行。比如你想打印“1,2,3”:

print(1, 2, 3, sep=",")

循环打印九九乘法表时,控制end就可以不换行:

for i in range(1, 10): for j in range(1, i + 1): print(f"{j}x{i}={i*j}", end=" ") print()

这个例子要是能自己跑通并理解,打印类作业基本就稳了。

4. 提交前最值得检查的五个经典报错现场

写代码不报错是不可能的,第一次作业更是如此。下面五个报错,是新手提交作业前最常遇到的,我按“现象→排查链路→修复”的顺序来讲。建议你把这部分当成一个自查表,提交前逐条核对。

4.1 命令行的“python was not found”:一个隐藏的微软商店坑

现象:你兴冲冲打开命令行,输入python --version,结果屏幕上出现的是:

Python was not found; run without arguments to install from the Microsoft Store, or disable this shortcut from Settings > Manage App Execution Aliases

排查链路:这行英文的翻译是“找不到Python,建议从微软商店安装”。但注意,它其实是一个坑中坑——Windows系统默认会把python这个命令指向微软商店的一个“假入口”。你没装Python时,这个假入口跳出来引导你去商店装;而你真装了Python但忘了勾PATH时,这个假入口还是会“越权”抢答。

所以排查分三步走:第一步,在命令行输入where python,看看系统到底在哪找到了这个命令。如果结果指向WindowsApps目录,说明是假入口在捣乱。第二步,重新运行Python安装程序,选择“Modify”,把Add Python to PATH勾上。第三步,重启命令行窗口(这一步最容易忘,PATH修改后旧窗口不会自动刷新)。

修复后:输入python --version能正常输出版本号,说明环境终于通了。

4.2 IndentationError:Tab和空格的血案

现象:

IndentationError: unexpected indent

排查链路:这个报错的意思是“缩进不对”。最常见的来源有两个:Tab和空格混用了,或者某个代码块有的行缩进4格、有的行缩进5格。关键难点在于,VSCode、记事本之类的编辑器把Tab显示为宽空格,肉眼几乎无法分辨。

排查办法:在VSCode里按Ctrl+Shift+P,输入Convert Indentation to Spaces,把Tab统一转换为空格。或者打开“视图→渲染空格”开关,这时所有空格和Tab都会以可见符号显示出来,一眼就能发现哪里混用了。

修复:选中整个代码文件,统一用Tab转换一次,然后手动把缩进调整到正确层级。从今往后,给自己定一条铁律:一个文件只用一种缩进方式,推荐全部用4个空格。

4.3 TypeError:字符串和数字别硬加

现象:

TypeError: can only concatenate str (not "int") to str

排查链路:这个报错十有八九来自input()没有做类型转换,然后拿它和数字做了运算或拼接。报错信息其实已经把问题说得很清楚了:想用+把字符串拼接起来,但加号左边是字符串、右边是整数,两边类型不匹配。

排查办法:在报错行之前加一行s = type(变量名),把变量类型打印出来。你大概率会看到<class 'str'>,也就是字符串。

修复:让它变成数字再运算,或者变成字符串再拼接:

# 场景1:做算术 num = int(input("请输入数字:")) # 场景2:只是想让输出显示出来 price = 99 print("价格是" + str(price) + "元")

4.4 NameError:拼写不一致或没定义就使用

现象:

NameError: name 'percent' is not defined

排查链路:这行的意思是:Python不认识percent这个名字。两种情况:你用了这个变量但前面从没赋值给它;或者你前面定义的是perсent(注意这里可能混了个全角的字母c,看着像但实际不是同一个字符),后面调用时拼错了。

排查办法:学会看报错的最后一行,它精准告诉你是哪个名字出了问题。然后在代码里搜索这个名字(VSCode按Ctrl+F),逐行核对拼写是否完全一致,包括大小写。Python是区分大小写的,Percent和percent是两回事。

修复:统一拼写。如果变量确实没定义,回到逻辑上想想它应该在哪个位置先算出结果再被使用。

4.5 中文乱码与编码问题:遇到Non-UTF-8 code怎么处理

现象:代码里写了中文,运行时可能出现SyntaxError: Non-UTF-8 code starting with,或者在Windows控制台里print("你好")输出成乱码。

排查链路:Python 3默认源码编码是UTF-8。如果你的文件被编辑器保存成了GBK等其它编码,Python就会拒收,或者在打印中文时显示乱码。

修复:在VSCode右下角可以看到当前文件编码,点击它,选择“通过编码重新打开”,改成UTF-8。另外,Windows命令行对UTF-8中文显示不友好,可以在命令行先执行一次chcp 65001把代码页切换成UTF-8。老教程里常说的在文件开头加一行# -*- coding: utf-8 -*-,在Python 3时代基本不需要手工加了,但加了也没有坏处,算是一个保险。

为了让你提交前有个全方位的对照,我把上面五个坑整理成一个小表,你可以直接当自查清单用:

报错关键词常见原因快速修复思路
Python was not foundPATH没勾或微软商店假入口重装勾PATH,重启终端
IndentationErrorTab和空格混用、缩进层级错乱统一转空格,肉眼检查层级别
TypeError: concatenate strinput()未转类型就运算补int()或float()转换
NameError变量拼错或未定义看报错最后一行,搜索核对拼写
Non-UTF-8 code / 乱码文件编码不是UTF-8VSCode改为UTF-8,命令行chcp 65001

5. 交作业不是终点:从第一份代码到函数的进阶路径

第一次作业交上去,不是学习的结束,而是一个真正的开始。你会发现,作业代码跑通只是最基础的要求,后面还有更好的写法、更聪明的思路在等着你。

5.1 第一次作业的真正考点:不是跑通,是可控

我自己观察过不少批改场景,老师或助教看作业时,关注的往往不只是“能不能跑”,而是这几点:

  • 变量名是否清晰——n和number_of_people的差异,一眼就能看出对编程的理解层次。
  • 有没有把逻辑拆成小块——全部逻辑写在反复嵌套的if里,和用函数把你的每一步包装起来,可读性天差地别。
  • 是否在关键处写了注释——不需要每行都注释,但在核心逻辑附近用一句话说明“这一步在做什么”,是非常值得养成的习惯。
  • 能不能经受住简单改动——比如把题目里的数值从3改成100,你的代码是否只需要改一个地方就能适应。写死的硬编码,是最容易被扣分的点。

这些内容,本质上都是“可控性”的体现。代码跑通只是下限,可控可读才是第一次作业真正要练的东西。

5.2 从重复代码到函数:def打开的新世界

也许你还用不上函数,但我还是想画出这张地图的第一站。假设你已经会写水仙花数判断了,下一个问题是:“如果把这段判断逻辑用在很多地方,怎么办?”总不至于每次都复制粘贴一遍。这时def就登场了:

def is_narcissistic(num): bai = num // 100 shi = num // 10 % 10 ge = num % 10 return bai**3 + shi**3 + ge**3 == num # 调用函数检查一个数 print(is_narcissistic(153))

def定义了一个可复用的函数,后面想判断任何数,一行调用即可。这是“用函数把逻辑包起来”的思维——也是从“写作业”走向“写程序”的分水岭。写完一个函数后,试着给它取一个清晰的名字,这也是在训练你描述逻辑的能力。

5.3 列表与切片:从面向单个数据到面向批量数据

第一次作业处理的往往是一个数值,但现实问题里数据从来不是一个,而是一批。列表(List)就是Python存“一批数据”的基本容器:

scores = [68, 85, 92, 74, 88] print(f"最高分是{max(scores)},总分是{sum(scores)},平均分是{sum(scores) / len(scores)}")

这行代码里的max、sum、len都是内置函数,处理批量数据时比你自己写循环判断高效得多。切片(Sliding)则是从一份连续数据里截取一部分,比如:

scores = [68, 85, 92, 74, 88] print(scores[1:3]) # 从索引1到索引2,取两个元素,输出 [85, 92]

这里的1:3是“从下标1开始,到下标3为止,但不包含3”的意思。切片不仅对列表有效,对字符串同样有效,比如"hello"[1:3]得到"el"。以后你做数据分析、字符串处理,几乎天天要用。首次接触觉得抽象很正常,先记住“左闭右开”(左边包含、右边不包含)这个规则,后面就不容易晕。

5.4 作业之后的路线图:别急着全学

完成第一次作业之后,很多人的第一反应是:我下一步该学什么?是爬虫、数据分析还是机器学习?这些方向实际上各是一个大世界,只是有一个共同的地基:扎实的语法基础、函数、数据结构、文件读写、以及面向对象的基本思想。地基没打牢,直接跑去抄量化交易代码、爬虫代码,大概率是“抄都抄不明白”。

我给的一个个人建议是:先守住一条主线,把作业里的知识点彻底消化——不看资料能自己重写一遍、能跟别人说清楚每行的作用、改几个参数能看到预期的变化。满足这三条,你这一份作业才算真正吸收了。然后再迈第二步:学会读官方文档,学会看懂报错信息。这些能力比多背几个API要有用得多。

至于列表、字典、函数、文件操作这些内容,它们会在你下一份作业里自然出现,不用焦虑,按部就班学就行。学习编程更像打游戏闯关,第一关的Boss就是环境和基础语法,过了它,后面虽然还有更多Boss,但你已经知道了“读提示、查文档、动手试”这条路该怎么走。

我第一次教人Python时,发现一个很有用的经验:交完第一次作业,把你的代码原封不动保存好,在文件顶部写一个日期和一行注释,记录你当时写了什么、卡在哪。等你学完函数和列表之后,再回来看一眼,你会非常直观地感觉到自己在进步。这份“时间旅行”式的参照,比任何“Python一个月速成”的帖子都更能给你信心。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询