Zhimalab
🐍
Python 21天快速入门
正在启动 Python 运行环境…
Python 21天快速入门
欢迎来到 Python 21天快速入门!本教程假设你已有一定编程基础(如学过 C 或 Java),因此会跳过「什么是变量」之类的概念,直接聚焦 Python 的独特之处。
21 天,从基础语法到面向对象、生成器、综合实战。每课都有可运行代码(基于 Pyodide,浏览器端直接跑 Python)和动手练习。
使用方法:左侧侧边栏选择课程,每课包含讲解、代码示例(可编辑运行)和练习题。完成后点击「标记完成」记录进度。
你好,Python
欢迎来到 Python 21天快速入门!本教程假设你已有一定编程基础(如学过 C 或 Java),因此会跳过「什么是变量」之类的概念,直接聚焦 Python 的独特之处。
Python 以简洁著称。经典的第一行代码只需要一个
print()。点击下方代码块的「运行」按钮试试: hello.py
Python 不需要
main() 函数,不需要分号,不需要头文件——直接写,直接跑。变量也不需要声明类型,赋值即创建: 变量与类型
关键点:Python 是
动态类型语言——变量类型在运行时确定,且可以随时改变。type() 函数可以查看任何变量的类型。input() 可以读取用户输入(返回字符串),f-string(格式化字符串)是 Python 3.6+ 最推荐的字符串拼接方式:
f-string 入门
练习题
创建变量
city 赋值为 "北京",变量 temp 赋值为 26,然后用 f-string 打印:北京今天的气温是 26 度 你的代码
仔细阅读上面的讲解,然后动手尝试。如果还是卡住,试着先把代码拆成更小的步骤。
数字与字符串
Python 有三种数字类型:
int(整数,无大小限制)、float(浮点数)、complex(复数)。算术运算符和 C 类似,但 / 永远返回浮点数,// 是整除。 数字运算
字符串
字符串可以用单引号、双引号或三引号。三引号可以跨行。字符串支持
* 重复和 + 拼接,但 f-string 更优雅。 字符串操作
切片是 Python 的核心特性。
s[start:stop:step] 左闭右开。s[::-1] 反转字符串是最经典的 Python 技巧。练习题
给定字符串
s = "Hello, Python!",用切片提取出 "Python" 并打印。 你的代码
仔细阅读上面的讲解,然后动手尝试。如果还是卡住,试着先把代码拆成更小的步骤。
布尔值与运算符
Python 的布尔值是
True 和 False(首字母大写)。比较运算符:== != < > <= >=。逻辑运算符是英文单词 and、or、not,不是 && || !。 布尔与运算
truthiness(真值测试):以下值都为「假」:
0、0.0、""、[]、{}、None。其他一切为「真」。 真值测试
is vs ==:
is 判断是否同一个对象(内存地址),== 判断值是否相等。判断值用 ==。练习题
写一个函数
is_leap_year(year),判断给定年份是否为闰年。规则:能被 4 整除但不能被 100 整除,或能被 400 整除。 你的代码
仔细阅读上面的讲解,然后动手尝试。如果还是卡住,试着先把代码拆成更小的步骤。
条件分支
Python 用
if / elif / else 实现条件分支。没有 switch-case(3.10+ 有 match-case)。特别注意:Python 用缩进表示代码块,缩进错误会直接报错。 if/elif/else
条件表达式(三元运算符):
值1 if 条件 else 值2,相当于 C 的 条件 ? 值1 : 值2。 三元表达式与 match
缩进规则:统一用 4 个空格(PEP 8 标准)。
pass 是空操作占位符,用在还没写实现的地方。练习题
写一个函数
classify(num),返回 "正"、"负" 或 "零"。然后用 5、-3、0 分别测试。 你的代码
仔细阅读上面的讲解,然后动手尝试。如果还是卡住,试着先把代码拆成更小的步骤。
while 循环
while 循环和 C 类似,但 Python 没有 do-while。break 跳出循环,continue 跳过本次。else 可以跟在循环后面——循环正常结束(非 break)时执行。 while 循环
while-else
while-else 是 Python 的特色:
else 块在循环没有被 break 跳出时执行。适合「搜索」场景——找到就 break,没找到就执行 else。练习题
用 while 循环计算
2^10(不使用 ** 运算符),把结果存入变量 result 并打印。 你的代码
仔细阅读上面的讲解,然后动手尝试。如果还是卡住,试着先把代码拆成更小的步骤。
for 循环与 range
Python 的
for 不是 C 的 for(init;cond;inc),而是for-in 遍历——直接迭代可迭代对象的每个元素。range() 生成整数序列。 for 循环
zip 与嵌套循环
Python 没有 C 风格的 for 循环。需要索引时用
range();需要索引+值用 enumerate();并行遍历用 zip()。练习题
用 for 循环和
range() 打印九九乘法表的第 5 行:1x5=5 2x5=10 3x5=15 4x5=20 5x5=25 你的代码
仔细阅读上面的讲解,然后动手尝试。如果还是卡住,试着先把代码拆成更小的步骤。
列表基础
列表(
list)是 Python 最常用的数据结构——可变、有序、可存任意类型。相当于 C 的数组 + 链表的结合体,但更灵活。 列表操作
列表排序
sorted() vs .sort():
sorted() 返回新列表,不改原列表;.sort() 原地排序,返回 None。练习题
给定列表
nums = [5, 3, 8, 1, 9, 2, 7],用 sorted() 对其降序排序,存入变量 result 并打印。 你的代码
仔细阅读上面的讲解,然后动手尝试。如果还是卡住,试着先把代码拆成更小的步骤。
列表推导式
列表推导式(List Comprehension)是 Python 最优雅的特性之一——用一行代码创建列表。对于有 C/Java 背景的人来说,这是「Pythonic」思维的第一课。
列表推导式
嵌套与字典推导式
推导式语法:
[表达式 for 变量 in 可迭代对象 if 条件]。超过两行就该用普通循环。练习题
用列表推导式生成 1 到 20 中所有偶数的平方,结果应为
[4, 16, 36, 64, 100, 144, 196, 256, 324, 400]。存入变量 result。 你的代码
仔细阅读上面的讲解,然后动手尝试。如果还是卡住,试着先把代码拆成更小的步骤。
元组与解包
元组(
tuple)是不可变列表。一旦创建,不能增删改。它的用途:固定数据(如坐标)、函数多返回值、字典键(列表不能做键)。 元组与解包
多返回值
何时用元组 vs 列表?数据不会被修改时用元组(更安全、更快、可哈希)。需要增删改时用列表。
练习题
用元组解包,一步交换变量
a(值为 100)和 b(值为 200)的值,使 a=200, b=100。 你的代码
仔细阅读上面的讲解,然后动手尝试。如果还是卡住,试着先把代码拆成更小的步骤。
字典
字典(
dict)是 Python 最强大的数据结构——键值对映射,O(1) 查找。Python 3.7+ 保证插入顺序。键必须是不可变类型(str, int, tuple),列表和字典不能做键。 字典操作
字典推导式与词频统计
dict.get(key, default) 是安全访问字典的利器——键不存在时返回 default 而不是报错。
练习题
给定字符串
text = "apple banana apple cherry banana apple",统计每个单词出现的次数,存入字典 freq。预期:{'apple': 3, 'banana': 2, 'cherry': 1} 你的代码
仔细阅读上面的讲解,然后动手尝试。如果还是卡住,试着先把代码拆成更小的步骤。
集合
集合(
set)是无序、不重复的元素集合。核心用途:去重和集合运算(并、交、差、对称差)。查找速度 O(1),和字典一样快。 集合操作
集合应用
集合运算符:
| 并集、& 交集、- 差集、^ 对称差。比调用方法更简洁。练习题
给定两个列表
a = [1, 2, 3, 4, 5] 和 b = [4, 5, 6, 7, 8],用集合运算找出它们的共同元素,存入变量 common。 你的代码
仔细阅读上面的讲解,然后动手尝试。如果还是卡住,试着先把代码拆成更小的步骤。
函数基础
Python 用
def 定义函数。和 C/Java 不同:参数可以设默认值、按名称传递、接受可变数量的参数。函数是一等对象——可以赋值给变量、作为参数传递。 函数定义
可变参数
*args 收集多余的位置参数为元组,**kwargs 收集多余的关键字参数为字典。参数顺序:
def f(必选, 默认, *args, **kwargs)。练习题
写一个函数
power(base, exp=2),计算 base 的 exp 次方。exp 默认为 2(即平方)。 你的代码
仔细阅读上面的讲解,然后动手尝试。如果还是卡住,试着先把代码拆成更小的步骤。
Lambda 与高阶函数
lambda 是匿名函数——一行定义,适合简单的临时函数。map()、filter()、sorted() 等高阶函数常配合 lambda 使用。不过列表推导式往往比 map/filter 更 Pythonic。 lambda 表达式
map / filter / reduce
Pythonic 建议:简单操作用列表推导式代替 map/filter,可读性更好。lambda 只用于简短的一行函数。
练习题
给定列表
words = ["banana", "apple", "cherry", "date"],用 sorted() 和 lambda 按字符串长度排序,存入变量 result。 你的代码
仔细阅读上面的讲解,然后动手尝试。如果还是卡住,试着先把代码拆成更小的步骤。
字符串进阶
Python 字符串方法非常丰富。字符串是不可变的——所有「修改」操作都返回新字符串。
字符串方法
字符串格式化
练习题
给定字符串
s = "hello world python",将每个单词首字母大写,结果为 "Hello World Python"。存入变量 result。 你的代码
仔细阅读上面的讲解,然后动手尝试。如果还是卡住,试着先把代码拆成更小的步骤。
文件操作
文件操作用
open() 函数。务必用 with 语句——自动关闭文件,即使出错也不会泄漏资源。模式:'r' 读、'w' 写(覆盖)、'a' 追加。 文件读写
with 语句是上下文管理器,等价于 try-finally 但更简洁。
with open(...) as f: 会在代码块结束时自动调用 f.close(),即使发生异常也不会遗漏。 JSON 读写
练习题
将字符串
"Python 是最好的语言" 写入文件 /tmp/quote.txt,然后再读取出来存入变量 content 并打印。 你的代码
仔细阅读上面的讲解,然后动手尝试。如果还是卡住,试着先把代码拆成更小的步骤。
异常处理
Python 用
try/except/else/finally 处理异常。except 可以指定异常类型。不要用 except: 裸捕获——会隐藏 bug。 try/except/else/finally
raise 与自定义异常
异常处理原则:① 只捕获你预期的异常 ② 捕获后要处理,不要 pass 掉 ③
else 块放「正常逻辑」 ④ finally 用于资源清理练习题
写一个函数
safe_divide(a, b),返回 a / b 的结果。如果 b 为 0,返回字符串 "错误:除以零"(不抛异常)。 你的代码
仔细阅读上面的讲解,然后动手尝试。如果还是卡住,试着先把代码拆成更小的步骤。
类与对象
Python 是面向对象语言,但不像 Java 那样强制一切皆类。
class 定义类,__init__ 是构造函数,self 相当于 Java 的 this。实例方法的第一个参数永远是 self。 类定义
__str__ vs __repr__:
__str__ 面向用户(print 时调用),__repr__ 面向开发者(交互式环境调用)。 类方法、静态方法、属性
练习题
定义一个
Circle 类,有 radius 属性。方法 area() 返回面积(πr²),方法 perimeter() 返回周长(2πr)。使用 math.pi。 你的代码
仔细阅读上面的讲解,然后动手尝试。如果还是卡住,试着先把代码拆成更小的步骤。
继承与魔法方法
Python 支持单继承和多继承。
super() 调用父类方法。魔法方法(dunder methods)以双下划线开头和结尾,定义对象的行为——运算符重载、迭代、比较等。 继承与多态
运算符重载
常用魔法方法:
__eq__(==)、__add__(+)、__len__(len())、__getitem__([])、__iter__(for 循环)。练习题
定义一个
Book 类,有 title 和 author 属性。实现 __str__ 返回 "《title》by author",__eq__ 判断两本书的 title 和 author 是否都相同。 你的代码
仔细阅读上面的讲解,然后动手尝试。如果还是卡住,试着先把代码拆成更小的步骤。
模块与标准库
Python 标准库极其丰富——「内置电池」(batteries included)。
import 导入模块,from ... import ... 导入特定对象。每个 .py 文件就是一个模块。 标准库
collections 与 itertools
导入方式:
import mod(用 mod.func() 调用)、from mod import func(直接 func())、import mod as m(别名)。练习题
用
random 模块生成 5 个 1-100 之间的不重复随机整数,存入列表 numbers 并打印。使用 random.sample()。 你的代码
仔细阅读上面的讲解,然后动手尝试。如果还是卡住,试着先把代码拆成更小的步骤。
迭代器与生成器
生成器(Generator)是 Python 的核心特性——惰性求值,不一次性生成所有数据,而是按需 yield。处理大数据流时,生成器能节省海量内存。
生成器
生成器进阶
yield vs return:
return 返回后函数结束;yield 返回后函数「暂停」,下次 next() 时从暂停处继续。练习题
写一个生成器函数
even_stream(),无限生成偶数序列:0, 2, 4, 6, 8, ... 用 islice 取前 5 个存入列表 result。 你的代码
仔细阅读上面的讲解,然后动手尝试。如果还是卡住,试着先把代码拆成更小的步骤。
综合实战:学生管理系统
最后一天,把前面学的全部串起来——类、列表、字典、文件 I/O、异常处理——做一个学生成绩管理系统。这是典型的 Python 小项目。
系统需求:① 添加学生(姓名、年龄、成绩)② 查询所有学生 ③ 按成绩排序 ④ 统计平均分和最高分 ⑤ 保存到 JSON 文件。
学生管理系统
恭喜你完成了 21 天 Python 之旅!你已经掌握了 Python 的核心语法、数据结构、函数、OOP、文件操作、异常处理和生成器。接下来可以探索:Web 开发(Django/Flask)、数据分析(Pandas/NumPy)、自动化脚本、机器学习等方向。
练习题
使用上面的
StudentManager 类,创建管理器,添加 3 个学生(张三 90 分、李四 85 分、王五 95 分),然后调用 stats() 方法获取统计信息,存入变量 info。 你的代码
仔细阅读上面的讲解,然后动手尝试。如果还是卡住,试着先把代码拆成更小的步骤。
🎉
恭喜完成全部课程!
你已经掌握了 Python 的核心知识,继续探索更广阔的编程世界吧!