
如果你正在为“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.1264位版本。不要碰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的配置其实就三件事安装微软官方的Python扩展叫Python不是一堆第三方同名插件。打开命令面板CtrlShiftP输入Python: Select Interpreter选择你刚安装的Python解释器版本。新建一个.py文件写完代码右键选“在终端中运行 Python 文件”或者点右上角的绿色运行三角。如果用的是PyCharm记得下载Community社区版免费且够用。新建项目时它会自动检测Python解释器右键直接Run。编辑器本身没有绝对的好坏关键是别在配置上花超过半小时——时间应该花在写代码上而不是装饰编辑器上。2. 看懂作业题目把一道题翻译成代码的拆解方法环境装好之后真正的挑战开始了看作业题目。第一次作业的题目通常不长但新手读题和程序员读题是完全两种状态。新手看到的是“有一串文字要求”程序员看到的是“输入、处理、输出”三个篮子和几个条件分支。你需要做的就是后者。2.1 作业题的三副常见面孔翻来覆去第一次作业基本逃不出这三类打印类用print输出指定内容比如打印一个三角形、九九乘法表、爱心图案。考的其实是你对字符串和循环的理解。计算类输入几个数据算出某个结果。比如输入半径求圆面积、输入三个数求平均值。考的变量、运算符、类型转换。判断类给一个条件判断属于哪个分支。比如输入成绩判断等级、判断闰年、判断水仙花数。考的是条件语句。很多作业题是三类混合的。比如经典的“李白打酒”问题——李白提着酒壶遇店加一倍遇花喝一斗经过若干次店和花之后还剩多少酒这就是典型的“计算循环”混合题看着像个数学故事实际上考的是变量更新和循环。2.2 拆题三步法把中文翻译成代码我教新手拆题都推荐一个“三步翻译法”非常管用第一步把题目读三遍然后圈出名词、动词、条件词。名词通常对应变量比如“半径”“成绩”“年数”动词对应操作“求出”“判断”“循环直到”条件词对应if或while。第二步把所有信息整理成三块——输入是什么、处理过程是什么、输出是什么。第三步先用中文把逻辑写一遍伪代码再翻译成Python。给你看一个实际例子。假设题目是“输入一个三位数判断它是否为水仙花数。水仙花数是指各位数字的立方之和等于该数本身的数。”拆解之后是这样的输入一个三位数比如153处理分别取出百位、十位、个位计算三个数字的立方和判断立方和是否等于原数输出是或不是或输出True/False2.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()函数有一个让所有人都要踩一次坑的特性它返回的一定是字符串哪怕你输入的是数字。你想想用户通过键盘输入的内容本质上都是字符序列。你敲了18Python收到的是字符串18不是数字18。如果你拿它直接做算术age input(请输入年龄) print(age 1)运行时就会报错TypeError: can only concatenate str (not int) to str意思是字符串只能和字符串拼接不能和整数拼接。解决办法就是类型转换。三个最常用的转换函数int(内容)转成整数比如int(18)得到18float(内容)转成小数比如float(3.14)得到3.14str(内容)转成字符串比如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 IndentationErrorTab和空格的血案现象IndentationError: unexpected indent排查链路这个报错的意思是“缩进不对”。最常见的来源有两个Tab和空格混用了或者某个代码块有的行缩进4格、有的行缩进5格。关键难点在于VSCode、记事本之类的编辑器把Tab显示为宽空格肉眼几乎无法分辨。排查办法在VSCode里按CtrlShiftP输入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按CtrlF逐行核对拼写是否完全一致包括大小写。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 650015. 交作业不是终点从第一份代码到函数的进阶路径第一次作业交上去不是学习的结束而是一个真正的开始。你会发现作业代码跑通只是最基础的要求后面还有更好的写法、更聪明的思路在等着你。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一个月速成”的帖子都更能给你信心。