1. 先聊清楚:Python作业1到底在训练什么
接到"Python作业1"这个任务,很多刚入门的朋友第一反应是茫然——作业题目没给全、要求不明确、不知道从哪下手。其实绝大多数院校和培训机构的Python第一份作业,核心训练目标就三件事:跑通环境、练熟语法基础、完成一个小型可运行的程序。它考的不是算法多高深,而是你能不能独立走完"写代码—运行—调试—交付"这个最小闭环。
我见过太多同学在第一份作业上栽跟头,不是不会写代码,而是卡在了环境上——Python装好了却跑不起来、代码写完一运行报错一片、好不容易调通了又不知道作业该怎么打包提交。所以这篇文章我不会只给你一份作业代码,而是把"作业1"这个场景拆开,讲讲从环境搭建、语法准备、代码设计到踩坑复盘的全过程,让你拿到任何类似的入门作业都能自己搞定。
先声明一下:本文提到的作业示例属于常见的练手类型(比如基础计算、数据处理、简单可视化),我会把完整思路和代码都贴出来,你完全可以照着跑通,再改成自己的版本提交。
2. 从零开始的Python作业环境:安装、配置与IDE选型
2.1 Python本体安装:别用错版本
第一份作业最怕的就是版本混乱。我建议直接用Python 3.10以上版本,具体来说目前稳定推荐3.11或3.12。原因很简单:教材和大部分第三方库都已经全面兼容3.10+,很多作业里会用到的新特性(比如更好的类型提示、性能优化)只有新版本才支持。
如果你用的是Windows系统,去python.org下载安装包时要注意两个关键点:
- 安装向导第一步务必勾选"Add Python to PATH",不勾的话你会在命令行里直接懵掉——输入python提示"不是内部或外部命令"。
- 安装路径尽量用默认的
C:\Users\你用户名\AppData\Local\Programs\Python\Python312,别改到带中文或空格的目录,后续装包容易出诡异问题。
Linux系统(很多同学的作业可能要求在Ubuntu上跑)相对简单,Ubuntu 22.04/24.04自带的Python 3.10/3.12基本够用,但系统自带的Python是给系统工具用的,千万不要直接去系统Python里pip install,建议用虚拟环境隔离,后面我会细说。
检查安装是否成功,打开命令行(Win是CMD或PowerShell,Linux是终端),输入:
python --version能输出Python 3.x.x就说明装好了。
2.2 IDE选择:VSCode还是PyCharm
这是Python作业出现频率最高的问题之一。我的建议分两种情况:
- 作业要求交.py文件 + 运行截图:用VSCode就够,轻量、启动快、配置简单。
- 作业比较综合(比如后面会学到面向对象、GUI):直接用PyCharm Community版,集成度高,调试体验好,不容易在环境细节上分心。
2.3 VSCode配置Python环境实操
如果你选VSCode,配置步骤我帮你整理成清单:
- 打开VSCode,点左侧扩展图标(或按
Ctrl+Shift+X),搜索Python,安装微软官方的Python扩展(发布者是Microsoft,下载量最高的那个)。 - 安装完成后,按
Ctrl+Shift+P打开命令面板,输入Python: Select Interpreter,选择你刚装好的Python 3.12解释器。 - 新建一个文件夹(比如
python_homework),在里面新建文件hello.py,输入:
print("hello, python")- 右上角会出现一个三角形运行按钮,点它就能直接看到输出结果。
2.4 PyCharm配置几步走
PyCharm这边更简单:新建项目时选择解释器,如果你已经装好了Python,它会自动检测到;如果没检测到,点"Add Interpreter → System Interpreter"手动指定Python路径。新建项目后右键运行.py文件即可。
注意:第一次用PyCharm会问你是否创建虚拟环境,建议点"Create"。虚拟环境可以理解成每个项目独立的Python小房间,你在这个项目里装的库不会污染其他项目,后面作业越做越多,这个习惯越早养成越省心。
到这里环境就绪了,接下来要过语法关。
3. 写作业前必须吃透的Python基础语法速览
作业1涉及的知识点通常不超过这几大类:变量与数据类型、条件判断、循环、函数、列表和字典。我按作业实战的需求来讲,不是把语法书抄一遍,而是告诉你每个东西在作业里怎么用。
3.1 变量:Python的变量不需要声明类型
Python是动态类型语言,给变量赋值时不用提前声明类型,解释器会自动识别:
name = "张三" # 字符串 age = 20 # 整数 score = 89.5 # 浮点数 is_pass = True # 布尔值作业里最容易踩坑的是类型转换。比如你用input()读进来的东西,不管用户输入的是数字还是文字,在Python里统统是字符串,直接参与数学运算会报错或出错:
age = input("请输入年龄:") # 这里age是字符串 age_new = int(age) # 必须手动转成整数才能运算3.2 字符串操作:作业里的高频考点
作业里经常要求处理一段字符串,比如统计某个字符出现的次数、把句子反转、拼接名字。常用的API必须手到擒来:
text = "Python作业" print(len(text)) # 长度 print(text.upper()) # 转大写 print(text.lower()) # 转小写 print(text.replace("作业", "练习")) # 替换 print(text[0:2]) # 切片取"Py" print("P" in text) # 判断子串,返回Trueinput()读进来的文本也常需要调.strip()去掉首尾空格,不然后面判断相等时容易莫名失败。
3.3 条件与循环:作业逻辑的地基
条件判断记住一个容易错的地方是冒号后面的缩进,Python用缩进表示代码块,四格空格是约定俗成的标准:
score = 85 if score >= 90: grade = "优秀" elif score >= 60: grade = "合格" else: grade = "不合格" print(grade)循环里,for循环本质是"遍历某个可迭代对象",while循环是"满足条件就一直跑"。作业里最典型的用法:
for i in range(1, 6): # 输出1到5 print(i) total = 0 n = 1 while n <= 100: # 从1加到100 total += n n += 13.4 列表与字典:存数据的主力容器
列表用方括号,字典用花括号,两者都支持嵌套:
# 列表 scores = [88, 92, 76, 59] scores.append(95) # 末尾加一个 print(scores[0]) # 第1个元素 print(len(scores)) # 长度 # 字典 student = {"name": "李四", "score": 86} student["age"] = 20 # 新增键值对 print(student["name"])作业里如果让统计一堆数据中出现次数最多的元素,用字典做计数器是最快的方案:遍历数据,每看到一个元素就给对应的键加1,这个思路在后面的爬虫数据处理里也一样通用。
3.5 函数与异常处理:让作业代码升级的关键
作业1如果能主动使用函数和异常处理,会让批改老师眼前一亮。函数的作用不只是"封装重复代码",更是让程序结构清晰:
def calculate_bmi(weight, height): """计算BMI指数""" bmi = weight / (height ** 2) return round(bmi, 2) print(calculate_bmi(70, 1.75))异常处理解决的是"用户乱输入导致程序崩溃"的问题,这也是作业中最常见的扣分点之一:
while True: try: age = int(input("请输入年龄:")) break except ValueError: print("输入的不是数字,请重新输入")4. 一份典型的Python作业1:从需求拆解到代码实现
4.1 作业题目:一个"班级成绩统计与分析"小程序
为了让你完整看到"接题→设计→编码→测试"的过程,我拟一个非常典型的作业1题目:
输入某班5名学生的Python成绩(0-100分),程序自动完成以下任务:
- 计算平均分、最高分、最低分;
- 将成绩从高到低排序并输出;
- 统计并输出不及格(<60分)的人数;
- 给每个学生生成一句评语:90分以上"优秀"、60-90"良好"、60以下"需要加油"。
4.2 需求拆解:拿到题目先别急着写代码
很多新手上来就写,写一半发现逻辑乱了。正确姿势是先用大白话把流程列出来:
- 需要一块内存来存5个成绩 → 列表
- 需要循环5次读入成绩 → for + input
- 读到的是字符串要转int → 类型转换
- 算平均分 → sum() / len()
- 找最高最低 → max() / min()
- 排序 → sorted() 默认升序,加 reverse=True 变降序
- 统计不及格 → 遍历列表,条件判断
- 生成评语 → 遍历列表,if-elif-else
这个拆解过程本身就是作业要训练的能力,代码只是最后的表达。
4.3 完整代码实现与注释
# -*- coding: utf-8 -*- """ 班级成绩统计与分析 功能:读取5名学生的成绩,输出统计结果和评语 """ def get_scores(count=5): """从用户输入读取成绩,返回成绩列表""" scores = [] for i in range(count): while True: try: score = float(input(f"请输入第{i + 1}名学生的成绩(0-100):")) if 0 <= score <= 100: scores.append(score) break else: print("成绩必须在0到100之间,请重新输入") except ValueError: print("输入无效,必须是数字") return scores def analyze_scores(scores): """统计并返回平均分、最高分、最低分,以及排序和不及格人数""" average = sum(scores) / len(scores) highest = max(scores) lowest = min(scores) sorted_scores = sorted(scores, reverse=True) failed = [s for s in scores if s < 60] return average, highest, lowest, sorted_scores, len(failed) def make_comment(score): """根据成绩生成评语""" if score >= 90: return "优秀" elif score >= 60: return "良好" else: return "需要加油" def main(): print("=== 班级成绩统计与分析 ===") scores = get_scores(5) avg, high, low, sorted_scores, fail_count = analyze_scores(scores) print("\n===== 统计结果 =====") print(f"平均分:{avg:.2f}") print(f"最高分:{high}") print(f"最低分:{low}") print(f"不及格人数:{fail_count}") print("\n===== 成绩排名(从高到低) =====") for rank, score in enumerate(sorted_scores, start=1): print(f"第{rank}名:{score}分") print("\n===== 评语 =====") for i, score in enumerate(scores, start=1): comment = make_comment(score) print(f"第{i}名学生:{score}分,{comment}") if __name__ == "__main__": main()这段代码把功能拆成了三个函数加一个主函数,每部分职责单一。get_scores里专门处理了输入校验,这是实战中非常实用的写法,因为用户永远不按套路输入。
4.4 运行效果与验证
用一组测试数据验证:75、92、58、88、60,运行结果大致是:
平均分:74.60 最高分:92 最低分:58 不及格人数:1 第1名:92分 第2名:88分 第3名:75分 第4名:60分 第5名:58分 第1名学生:75分,良好 第2名学生:92分,优秀 第3名学生:58分,需要加油 第4名学生:88分,良好 第5名学生:60分,良好验证完毕,所有功能都符合题目要求。注意那个60分整的同学,评语是"良好"而不是"需要加油",因为代码里>= 60就进入"良好"分支了,边界条件要仔细核对。
4.5 作业提交前必须做的自查清单
作业写完不等于完事,提交前先过一遍这个清单:
- [ ] 所有
input()都有异常处理,用户乱输也不会崩溃 - [ ] 注释覆盖了关键逻辑,不是每行废话
- [ ] 输出格式美观,有清晰的分隔线
- [ ] 测试了正常数据、边界数据(0分、100分、60分)、非法数据三个维度
- [ ] 函数命名有意义,不是
abc()这种
5. 进阶玩法:当作业1结合爬虫和可视化
前面聊的是最基础的Python作业1形态。但现在很多课程作业1就直接上手爬虫了,这在热搜词里也占了很大比重。如果你感觉基础语法已经过关,想把作业做得更有含金量,可以试试这个方向:用Python抓取网页数据并做成可视化界面。
5.1 爬虫作业的技术栈选择
一个入门级的爬虫可视化作业,最少需要这样几个库:
requests:发送HTTP请求,从网页获取HTML源码beautifulsoup4:解析HTML,提取需要的数据matplotlib:画数据图表tkinter(Python自带):做一个简单的可视化交互窗口
安装命令:
pip install requests beautifulsoup4 matplotlib如果下载速度太慢,可以临时把源切到国内镜像:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests beautifulsoup4 matplotlib5.2 一个简单可运行的爬虫可视化框架
下面是一个通用思路,假设你要抓取某个网页上的排行榜数据,存成列表后画成柱状图:
import requests from bs4 import BeautifulSoup import matplotlib.pyplot as plt # 1. 获取网页内容 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" } url = "这里替换成作业允许爬取的网页地址" resp = requests.get(url, headers=headers, timeout=10) resp.encoding = "utf-8" # 2. 解析数据 soup = BeautifulSoup(resp.text, "html.parser") names = [] values = [] # 根据实际页面结构调整选择器 for item in soup.select(".item"): name = item.select_one(".name").text.strip() value = int(item.select_one(".value").text.strip()) names.append(name) values.append(value) # 3. 可视化 plt.bar(names, values) plt.title("作业数据可视化") plt.xticks(rotation=45) plt.tight_layout() plt.show()这个代码框架有一个关键点:同一个个页面的选择器需要根据HTML结构调整,这也是爬虫作业的核心工作量所在。建议先用浏览器开发者工具(F12)检查目标页面的结构,找到数据所在的 class 或 id,再写选择器。
5.3 爬虫作业的合规红线
这里必须认真说几句。合法合规是爬虫作业的前提,我在实际辅导中见过太多作业因为没注意这条红线出问题的:
- 只允许爬取公开的、允许爬取的页面。如果在网页底部看到"禁止爬取"的声明,或者在
robots.txt文件里明确禁止,就不要碰。 - 抓取频率不宜过高,加个
time.sleep(1)之类的延时,别把目标网站服务器搞崩。 - 数据不能用于任何商业目的,作业场景下只是学习演示。
- 涉及登录、验证码、个人信息的页面一律不碰。
作业题如果要爬某个网站,一般会明确说明允许你爬哪个页面。如果你不确定,就主动问老师,这是最稳妥的方式。
5.4 把爬虫结果封装成可视化界面
很多作业还要求"可视化界面",除了用matplotlib画图,还可以用Python自带的tkinter做一个简单窗口。核心思路是:点击按钮 → 执行爬虫 → 把结果填充到文本框或图表区域。tkiner的优势是不需要额外pip安装,基础作业环境里就有。
import tkinter as tk def run_task(): # 这里调用你的爬虫和绘图函数 result_text.delete("1.0", tk.END) result_text.insert(tk.END, "抓取完成,共获取10条数据") root = tk.Tk() root.title("Python作业-数据可视化") root.geometry("600x400") btn = tk.Button(root, text="开始抓取", command=run_task) btn.pack(pady=20) result_text = tk.Text(root, height=10) result_text.pack(padx=10, pady=10, fill="both", expand=True) root.mainloop()这个框架跑通之后,你就能把爬到的数据填充到窗口里。注意tkinter的GUI运行时会阻塞在mainloop(),所以耗时操作建议放在新线程里,不然窗口会卡死。
6. 作业跑不通?完整排查链路帮你定位
写作业时最崩溃的瞬间就是运行报错。我总结一份完整的排查链路,按顺序检查,90%的问题都能在几步内解决。
6.1 第一层:解释器是否选对
VSCode左下角显示的解释器路径可能不是你装的Python。如果你明明装了Python,但运行时报"ModuleNotFoundError",先检查是不是解释器选到了别的环境(比如VSCode自动选了一个conda环境,里面没装你要的库)。切回正确的解释器再运行。
6.2 第二层:缩进错误最容易阴人
Python报IndentationError时,提示信息会直接告诉你在哪一行。这个错误的原因基本是空格和Tab混用了。我的建议是:编辑器右下角把缩进统一设成4空格,代码里绝对不按Tab键。
6.3 第三层:类型问题的典型症状
运行时出现TypeError: can only concatenate str (not "int") to str,说明你把数字当字符串拼了。排查路径是:先加一个调试语句,打印出变量类型:
print(type(score), score)如果显示<class 'str'>,就用int()或float()转换后再运算。
6.4 第四层:库装不上时的三连方案
pip install报错时,先看错误信息尾部。如果是网络超时,用国内镜像重装一遍;如果是缺少编译环境(比如Windows装某个带C扩展的库),去对应库官网下载预编译的whl文件,然后用pip安装本地文件:
pip install C:\Users\xxx\Downloads\example.whl如果提示pip版本太老,先升级:
python -m pip install --upgrade pip6.5 第五层:控制台没输出时的排查思路
代码"没反应"和"报错"是两回事。没反应大概率是:
- 程序卡在某个
input()等待输入,窗口里却没有人发现光标在闪 - 程序跑进死循环,
while条件永远为真 - 代码写在了
main()里面但没有调用,也没有if __name__ == "__main__"入口
最后一类问题是新手最容易犯的。我建议所有作业代码都保留if __name__ == "__main__":入口,不仅方便调试,也是工业级代码的规范习惯。
7. 从"作业1"到真正会写Python:几个后劲很足的习惯
作业1是课程的第一块里程碑,但你真正要带走的不是这份作业本身,而是后面长期写代码的底层习惯。我结合这些年带新人的经验,分享三个后劲很足的习惯。
7.1 永远用虚拟环境隔离项目
哪怕作业只有一个小文件,我也建议在项目文件夹里建虚拟环境。Windows命令:
cd python_homework python -m venv venv venv\Scripts\activate # Linux/macOS用 source venv/bin/activate激活后,你在这个环境里装再多的库,都不会影响全局Python和其他项目。作业提交时,环境目录venv不需要提交,在说明文档里写清楚依赖即可(可用pip freeze > requirements.txt生成依赖清单)。
7.2 代码先写注释再写实现
很多初学者是一边敲代码一边想注释,这容易导致注释和代码逻辑脱节。更好的做法是:先写中文注释描述"这块要干嘛",再在注释下面填实现。比如:
# 读入5个成绩,存入列表 scores = [float(input(f"请输入第{i+1}个成绩:")) for i in range(5)] # 计算平均分,保留2位小数输出 avg = sum(scores) / len(scores) print(f"平均分:{avg:.2f}")这不仅是作业交付时的加分项,等你自己隔两周回头看代码时,也会感谢当年写下的注释。
7.3 用"小步快跑"代替"憋大招"
我见过太多新手一上来就憋一个几百行的完整程序,最后报错一大堆,压根定位不到问题。正确做法是把作业拆成几个功能块,每写一块就运行验证一块。哪怕只是先确认input能正常读取成绩,就单独运行一次:
score = float(input("请输入成绩:")) print("读入成功:", score)确认无误后再加下一段逻辑。每个阶段都有可运行的程序,排查范围永远控制在最近几行代码以内。
8. 最后分享一个作业里偷偷加分的小技巧
经常有同学问我,同样的作业,为什么别人的分数更高。除了功能全、注释好、代码规范之外,还有一个很多人忽略的点:主动处理极端情况和边缘输入。
比如成绩统计作业里,题目没要求你必须处理负数和不合法输入,但你在代码里主动加了校验逻辑,这种"多想一步"的体现,比任何花哨的功能都能打动人。批改作业的老师一眼就能看出哪些同学只是"能跑",哪些同学真正理解了什么叫健壮的程序。
再给一个实用的建议:交作业前,把你代码里的print输出复制到一个txt文件里,作为运行结果的证据一并提交。很多作业评分时需要截图或文本输出,提前准备好能省后面很多沟通成本。我自己每次交作业都会附带一个运行结果.txt,包含了输入数据和程序输出,这习惯到现在写技术文档都保留着。
Python作业1看似简单,但它是一次完整的"需求理解→方案设计→编码调试→交付验证"的旅程。把这条链路走顺了,后面不管是数据结构、爬虫还是数据分析的作业,都只是在这条链路上填充不同内容而已。希望这篇文章能帮你跑通第一个闭环,然后放心大胆地在Python这条路上越走越远。