零基础起步:第一次写 Python

6 个关卡,每一步都写清「做什么 / 敲什么 / 你应该看到 / 报错怎么办」。全程约 40 分钟。

6 关18 个微步骤14 条报错速查

第 0 关 · 装 Python、跑起来(5 分钟)

目标Python 装好后,命令行能敲出 python 就说明环境通了。
前提:一台 Windows / macOS 电脑

1① 安装并验证

🎯 官网下载 Python 3.10+,安装时务必勾选 “Add python.exe to PATH”。

PYTHON
python --version
pip --version
👀 你应该看到
Python 3.11.4
pip 23.1.2

两条都出版本号就成功了。

⚠️ 如果报错
  • 'python' 不是内部或外部命令 → 没勾 PATH;重装勾选 PATH,或命令行用 py -3
  • Microsoft Store 弹出 → 系统里有应用别名;设置 → 应用执行别名 → 关掉 python.exe 别名

2② 进入交互模式试一句

🎯 输入 python 回车,出现 >>> 就可以写代码了;exit() 退出。

PYTHON
python
>>> print("Hello, Python")
>>> 2 ** 10
>>> exit()
👀 你应该看到
Hello, Python
1024

交互模式适合试一小段,正式程序要写进 .py 文件。

3③ 写第一个脚本

🎯 用记事本或 VS Code 新建 hello.py,内容如下,然后在命令行运行。

PYTHON
print("你好,Python!")
name = input("你叫什么?")
print(f"欢迎你,{name}")
👀 你应该看到
你好,Python!
你叫什么?小明
欢迎你,小明

保存时编码选 UTF-8,中文才不会乱码。

✅ 过关标准能装好、能跑脚本,就过关。

第 1 关 · 变量、类型与输入输出(6 分钟)

目标把数据存进变量、算出结果、打印出来——所有程序都从这三步开始。
前提:第 0 关完成

1① 变量与类型

🎯 Python 不用声明类型,直接用;type() 可以查看。

PYTHON
age = 20
price = 19.9
name = "张三"
ok = True
print(type(age), type(price), type(name))
👀 你应该看到
<class 'int'> <class 'float'> <class 'str'>

int 整数、float 小数、str 字符串、bool 布尔。

2② 输入与转换

🎯 input 得到的永远是字符串,算数要先 int()/float()。

PYTHON
a = int(input("第一个数:"))
b = int(input("第二个数:"))
print("和 =", a + b)
👀 你应该看到
第一个数:3
第二个数:4
和 = 7

不转换直接相加会得到 "34"(字符串拼接)。

⚠️ 如果报错
  • ValueError: invalid literal for int() → 输入了非数字;先 str.isdigit() 判断或用 try/except

3③ 格式化输出

🎯 f-string 是最推荐的拼接方式。

PYTHON
name, score = "李四", 92.456
print(f"{name} 的成绩:{score:.1f}")
👀 你应该看到
李四 的成绩:92.5

:.1f 表示保留 1 位小数。

✅ 过关标准能读写变量、做类型转换、用 f-string 输出。

第 2 关 · 条件与循环(7 分钟)

目标让程序会判断、会重复——这是“能写小工具”的门槛。
前提:第 1 关完成

1① if 判断

🎯 注意冒号与缩进。

PYTHON
score = 85
if score >= 90:
    print("优秀")
elif score >= 60:
    print("及格")
else:
    print("不及格")
👀 你应该看到
及格

从上往下判断,命中一个就结束。

⚠️ 如果报错
  • SyntaxError: expected ':' → if 行末少了冒号;补英文冒号
  • IndentationError → 缩进不统一;统一 4 个空格

2② for 循环

🎯 遍历序列或按次数循环。

PYTHON
total = 0
for i in range(1, 101):
    total += i
print("1~100 的和 =", total)
👀 你应该看到
1~100 的和 = 5050

range(1, 101) 是 1 到 100(不含 101)。

3③ while 与 break

🎯 次数不确定时用 while,配合 break 退出。

PYTHON
n = 0
while True:
    n += 1
    if n == 3:
        break
    print(n, end=" ")
👀 你应该看到
1 2

break 直接跳出循环。

✅ 过关标准能写 if 分支与 for/while 循环,并知道什么时候用哪个。

第 3 关 · 列表与字典(7 分钟)

目标真实数据永远是一堆:列表装顺序,字典按名字查。
前提:第 2 关完成

1① 列表增删改查

🎯 最常用:append / remove / 切片 / for 遍历。

PYTHON
scores = [88, 92, 76]
scores.append(95)
print(scores, len(scores))
print(scores[:2])
👀 你应该看到
[88, 92, 76, 95] 4
[88, 92]

切片左闭右开,越界不报错。

2② 字典与遍历

🎯 键值对组合,适合一条记录。

PYTHON
stu = {"name": "张三", "score": 89}
stu["age"] = 20
for k, v in stu.items():
    print(k, "=", v)
👀 你应该看到
name = 张三
score = 89
age = 20

get("不存在的键") 返回 None,不会报错。

⚠️ 如果报错
  • KeyError: 'age' → 用了不存在的键;改用 stu.get("age")

3③ 列表 + 字典组合

🎯 最常见的数据结构:列表里装字典。

PYTHON
students = [{"name": "张三", "score": 89}, {"name": "李四", "score": 92}]
for s in students:
    print(s["name"], s["score"])
👀 你应该看到
张三 89
李四 92

后面处理 CSV/JSON 数据就是这个形状。

✅ 过关标准能用列表和字典装数据、遍历并取值。

第 4 关 · 函数(5 分钟)

目标把重复逻辑收进函数,代码才可维护。
前提:第 3 关完成

1① 定义与调用

🎯 def 定义、return 返回。

PYTHON
def average(scores):
    if not scores:
        return 0
    return sum(scores) / len(scores)

print(average([90, 80, 70]))
👀 你应该看到
80.0

没有 return 的函数返回 None。

2② 默认参数

🎯 调用时可省略有默认值的参数。

PYTHON
def greet(name, greeting="你好"):
    return f"{greeting},{name}"

print(greet("张三"))
print(greet("李四", "早上好"))
👀 你应该看到
你好,张三
早上好,李四

默认值不要用 [] 或 {} 这类可变对象。

3③ 拆分文件

🎯 把函数放进 utils.py,另一个文件 import 使用。

PYTHON
# utils.py
def average(scores):
    return sum(scores) / len(scores) if scores else 0

# main.py
from utils import average
print(average([90, 80, 70]))
👀 你应该看到
80.0

同目录下直接 import 即可。

✅ 过关标准能写带参数与返回值的函数,并拆成文件复用。

第 5 关 · 读文件、画图(8 分钟)

目标把数据从文件读进来,统计完画一张图——这就是一个完整的“小分析程序”。
前提:第 4 关完成

1① 读 CSV 文件

🎯 先准备 scores.csv(姓名,科目,分数),用 csv.DictReader 读成字典。

PYTHON
import csv

with open("scores.csv", encoding="utf-8") as f:
    rows = list(csv.DictReader(f))
print(len(rows), rows[0] if rows else "空文件")
👀 你应该看到
(行数) {'姓名': '张三', '科目': '语文', '分数': '88'}

csv 读出来都是字符串,需要数字时用 float() 转。

2② 分组统计

🎯 按科目分组求平均分。

PYTHON
from statistics import mean

groups = {}
for r in rows:
    groups.setdefault(r["科目"], []).append(float(r["分数"]))
for k, v in groups.items():
    print(k, round(mean(v), 1))
👀 你应该看到
语文 86.0
数学 91.5

setdefault 是“不存在就建空列表”的标准写法。

3③ 画柱状图

🎯 需要先 pip install matplotlib。

PYTHON
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]

subs = list(groups)
avgs = [round(mean(v), 1) for v in groups.values()]
plt.bar(subs, avgs)
plt.title("各科平均分")
plt.savefig("bar.png", dpi=150)
print("已生成 bar.png")
👀 你应该看到
已生成 bar.png

中文不设置字体会显示成方框。

⚠️ 如果报错
  • ModuleNotFoundError: No module named 'matplotlib' → 没装库;pip install matplotlib
  • 中文显示成方框 → 没设中文字体;plt.rcParams["font.sans-serif"] = ["SimHei"]
✅ 过关标准能从文件读数据、统计、出图,就具备做综合项目的基础了。

常见报错速查 Ctrl+F 搜关键字

报错原因解决
SyntaxError: invalid syntax括号/引号不配对、少了冒号、中文标点检查标点是否为英文、括号是否成对
IndentationError: unexpected indent / expected an indented block缩进不一致或该缩进时没缩进统一 4 个空格,不要混 Tab
NameError: name 'xxx' is not defined变量名拼错或未赋值检查拼写与作用域
TypeError: can only concatenate str (not "int") to str字符串与数字直接相加用 f-string 或 str() 转换
ValueError: invalid literal for int() with base 10把非数字字符串转 int先判断 isdigit() 或用 try/except
IndexError: list index out of range下标越界用 len() 检查,或改用 for 遍历
KeyError: 'xxx'字典里没有这个键改用 dict.get(k) 或先判断 in
AttributeError: 'list' object has no attribute 'xxx'调用了该类型不存在的方法查文档确认方法名(列表没有 split)
TypeError: unhashable type: 'list'把列表放进集合/当字典键转成 tuple
ModuleNotFoundError: No module named 'xxx'库没装或模块不在路径pip install,或检查文件名/目录
FileNotFoundError: [Errno 2] No such file or directory路径不对或没建文件用绝对路径或 Path(__file__).parent
UnicodeDecodeError: 'gbk' codec can't decode读文件没指定 UTF-8open(..., encoding="utf-8")
RecursionError: maximum recursion depth exceeded递归没有终止条件补 if 终止分支
ZeroDivisionError: division by zero除数为 0先判断分母是否为 0

完成自检清单

  • ☐ 能用 python 命令运行脚本
  • ☐ 能声明变量、做类型转换、用 f-string 输出
  • ☐ 能写 if 分支与 for/while 循环
  • ☐ 能用列表装数据、用字典按名取值
  • ☐ 能写带参数与返回值的函数
  • ☐ 能读 CSV 文件并统计、用 matplotlib 出图
  • ☐ 看到报错能定位到行号与错误类型