feat: 初始化 Python 零基础教学课程

This commit is contained in:
zhiye.sun
2026-07-22 16:42:56 +08:00
commit 84d96caa6e
18 changed files with 3156 additions and 0 deletions

View File

@@ -0,0 +1,511 @@
# 第 1-4 课:运算符
## 一、本课目标
完成本课后,你应该能够:
1. 解释运算符和操作数是什么;
2. 使用算术运算符完成基础计算;
3. 区分普通除法、整除和取余;
4. 使用比较运算符得到布尔值;
5. 使用复合赋值运算符更新变量;
6. 使用 `and``or``not` 组合或反转条件;
7. 使用括号明确计算顺序;
8. 编写一个包含输入、计算和判断结果的学习进度程序。
## 二、前置知识
开始本课前,你应该已经掌握:
- 创建和使用变量;
- 区分字符串、整数、浮点数和布尔值;
- 使用 `input()` 接收输入;
- 使用 `int()``float()` 转换输入;
- 使用 f-string 输出变量和计算结果。
## 三、运算符与操作数
运算符Operator是告诉 Python 执行某种运算的符号或关键字。
观察下面的代码:
```python
total_hours = daily_hours * learning_days
```
其中:
- `*` 是乘法运算符;
- `daily_hours``learning_days` 是参与运算的数据称为操作数Operand
- 计算结果赋值给 `total_hours`
运算不只是数学计算。比较两个数据、组合两个条件,也需要使用运算符。
## 四、算术运算符
算术运算符主要用于数字计算。
| 运算符 | 含义 | 示例 | 结果 |
| --- | --- | --- | --- |
| `+` | 加法 | `10 + 3` | `13` |
| `-` | 减法 | `10 - 3` | `7` |
| `*` | 乘法 | `10 * 3` | `30` |
| `/` | 普通除法 | `10 / 3` | `3.333...` |
| `//` | 整除 | `10 // 3` | `3` |
| `%` | 取余 | `10 % 3` | `1` |
| `**` | 幂运算 | `10 ** 3` | `1000` |
### 4.1 加、减、乘
```python
completed_tasks = 5
new_tasks = 3
total_tasks = completed_tasks + new_tasks
remaining_tasks = total_tasks - completed_tasks
estimated_minutes = total_tasks * 20
```
这些运算与日常数学中的含义基本一致。
### 4.2 普通除法 `/`
```python
average_hours = 10 / 4
print(average_hours)
```
输出:
```text
2.5
```
Python 3 中,普通除法 `/` 的结果通常是浮点数。即使能够整除,结果也会带小数:
```python
print(10 / 2)
```
输出:
```text
5.0
```
### 4.3 整除 `//`
整除会得到向下取整后的商:
```python
full_weeks = 17 // 7
print(full_weeks)
```
输出:
```text
2
```
这表示 17 天中包含 2 个完整的 7 天周期。
对于正数,可以暂时理解为“只保留能完整分出的份数”。负数整除存在额外规则,将来遇到实际场景时再详细学习。
### 4.4 取余 `%`
取余得到除法中没有被完整分掉的余数:
```python
remaining_days = 17 % 7
print(remaining_days)
```
输出:
```text
3
```
因此 17 天可以表示为 2 个完整星期加 3 天。
取余还常用于判断一个整数是奇数还是偶数:
```python
remainder = 8 % 2
print(remainder)
```
结果为 `0`,说明 8 可以被 2 整除。
### 4.5 幂运算 `**`
```python
result = 2 ** 3
print(result)
```
输出为 `8`,表示 2 的 3 次方,即 `2 × 2 × 2`
注意Python 的幂运算不是 `^`。符号 `^` 在 Python 中有其他含义,当前阶段不要用它表示乘方。
## 五、字符串也能使用部分算术运算符
### 5.1 字符串拼接
两个字符串可以使用 `+` 连接:
```python
first_name = "Agent"
second_name = "开发者"
role_name = first_name + second_name
print(role_name)
```
输出:
```text
Agent开发者
```
如果需要空格或其他符号,必须明确写入字符串:
```python
role_name = first_name + " " + second_name
```
### 5.2 重复字符串
字符串乘以整数可以重复多次:
```python
separator = "=" * 20
print(separator)
```
这会输出 20 个等号。
字符串不能与整数直接相加:
```text
"学习天数:" + 3
```
如果确实要拼接,需要先使用 `str(3)` 转换;不过通常推荐使用更清晰的 f-string。
## 六、比较运算符
比较运算符用于比较两个数据,结果一定是布尔值 `True``False`
| 运算符 | 含义 | 示例 |
| --- | --- | --- |
| `==` | 等于 | `score == 100` |
| `!=` | 不等于 | `score != 0` |
| `>` | 大于 | `score > 60` |
| `<` | 小于 | `score < 60` |
| `>=` | 大于或等于 | `score >= 60` |
| `<=` | 小于或等于 | `score <= 100` |
示例:
```python
completed_hours = 12
target_hours = 10
is_target_reached = completed_hours >= target_hours
print(is_target_reached)
```
输出:
```text
True
```
### 6.1 `=` 与 `==` 的区别
这是初学者必须掌握的区别:
- `=` 表示赋值,把右边的数据交给左边的变量;
- `==` 表示比较,判断左右两边是否相等。
```python
learning_days = 4
is_four_days = learning_days == 4
```
第一行创建或更新变量,第二行得到布尔值 `True`
### 6.2 不要把布尔结果写成字符串
```python
is_finished = completed_tasks == total_tasks
```
这里的 `is_finished` 保存真正的布尔值。
下面写法只是保存普通文字:
```python
is_finished = "True"
```
两者的数据类型和用途不同。
## 七、赋值运算符与复合赋值
普通赋值使用 `=`
```python
completed_tasks = 3
```
如果完成了一个新任务,可以这样更新:
```python
completed_tasks = completed_tasks + 1
```
Python 提供了更简洁的复合赋值写法:
```python
completed_tasks += 1
```
两种写法在这个场景中作用相同。
常见复合赋值运算符:
| 运算符 | 示例 | 等价写法 |
| --- | --- | --- |
| `+=` | `value += 2` | `value = value + 2` |
| `-=` | `value -= 2` | `value = value - 2` |
| `*=` | `value *= 2` | `value = value * 2` |
| `/=` | `value /= 2` | `value = value / 2` |
| `//=` | `value //= 2` | `value = value // 2` |
| `%=` | `value %= 2` | `value = value % 2` |
复合赋值会更新变量本身,因此执行前变量必须已经存在。
## 八、逻辑运算符
逻辑运算符用于组合或反转布尔条件。
Python 中最常用的三个逻辑运算符是:
- `and`:并且;
- `or`:或者;
- `not`:取反。
### 8.1 `and`
`and` 两边的条件都为 `True` 时,整体才为 `True`
```python
has_completed_course = True
has_finished_practice = True
can_start_next_course = has_completed_course and has_finished_practice
print(can_start_next_course)
```
输出为 `True`
如果其中任何一个条件为 `False`,整体就是 `False`
### 8.2 `or`
`or` 两边至少有一个条件为 `True` 时,整体就是 `True`
```python
uses_pycharm = True
uses_vscode = False
has_code_editor = uses_pycharm or uses_vscode
print(has_code_editor)
```
输出为 `True`
### 8.3 `not`
`not` 会反转布尔值:
```python
is_finished = False
is_still_learning = not is_finished
print(is_still_learning)
```
输出为 `True`
### 8.4 组合比较条件
```python
daily_hours = 2.5
completed_tasks = 4
is_plan_healthy = daily_hours >= 1 and completed_tasks >= 3
```
这个结果表示“每天至少学习 1 小时,并且至少完成 3 个任务”是否同时成立。
本课只计算并输出布尔结果。下一课学习条件判断后,程序可以根据结果执行不同代码。
## 九、运算优先级
Python 会按照一定优先级计算表达式。
最基础的规则与数学类似:
1. 先计算括号;
2. 再计算幂运算;
3. 再计算乘、除、整除和取余;
4. 最后计算加减。
```python
result = 2 + 3 * 4
print(result)
```
结果是 `14`,因为先计算 `3 * 4`
加入括号:
```python
result = (2 + 3) * 4
print(result)
```
结果是 `20`
比较和逻辑运算组合时也有优先级规则,但不要依赖记忆复杂规则。推荐使用括号明确表达意图:
```python
can_continue = (score >= 60) and (practice_finished == True)
```
上面代码中的 `== True` 可以省略,写成下面这样更自然:
```python
can_continue = (score >= 60) and practice_finished
```
括号不仅影响运算顺序,也能帮助人更快读懂代码。
## 十、浮点数精度现象
运行下面代码:
```python
print(0.1 + 0.2)
```
你可能看到:
```text
0.30000000000000004
```
这不是 Python 随意算错,而是计算机使用二进制保存部分小数时产生的精度限制。
现阶段知道这种现象即可。涉及金额等要求精确的业务数据时,不能随意使用普通浮点数直接计算,后续数据库和项目课程会介绍合适的处理方式。
## 十一、运行本课示例
在 PowerShell 中执行:
```powershell
cd D:\Code\Python\01_python基础\1_4_运算符
python operators.py
```
请边看源代码边观察输出,重点比较:
- `/``//``%` 的不同结果;
- `=``==` 的不同用途;
- `and``or``not` 的布尔结果;
- 添加括号前后的计算结果。
## 十二、常见错误
### 12.1 使用 `^` 表示乘方
Python 使用 `**` 进行幂运算,不使用 `^`
### 12.2 混淆 `=` 和 `==`
需要比较时使用 `==`,需要给变量保存数据时使用 `=`
### 12.3 除数为零
```text
10 / 0
```
会产生 `ZeroDivisionError`,因为普通数字不能除以零。
### 12.4 字符串与数字直接相加
```text
"总数:" + 10
```
会产生 `TypeError`。推荐使用 f-string
```python
print(f"总数:{10}")
```
### 12.5 复杂表达式没有括号
即使程序结果正确,难以阅读的表达式也容易在维护时产生问题。优先使用括号和含义清晰的中间变量。
## 十三、课堂练习
打开 `practice.py`完成“Agent 学习进度计算器”。它会接收计划数据,计算完成率相关信息,并输出多个布尔判断结果。
运行命令:
```powershell
python practice.py
```
本课重点是自己选择正确的运算符。请先不要参考示例文件逐行照抄。
## 十四、思考题
1. `17 / 7``17 // 7``17 % 7` 分别表示什么?
2. `score = 80``score == 80` 有什么区别?
3. `True and False` 的结果是什么?
4. `True or False` 的结果是什么?
5. `not True` 的结果是什么?
6. 为什么复杂表达式推荐使用括号?
7. `2 + 3 * 4``(2 + 3) * 4` 为什么结果不同?
## 十五、本课小结
- 算术运算符用于数字计算;
- `/` 是普通除法,`//` 是整除,`%` 用于取得余数;
- `**` 用于幂运算;
- 比较运算的结果是布尔值;
- `=` 表示赋值,`==` 表示比较是否相等;
- 复合赋值可以简洁地更新已有变量;
- `and` 要求两个条件都成立;
- `or` 要求至少一个条件成立;
- `not` 用于反转布尔结果;
- 括号可以改变或明确运算顺序。
## 十六、验收标准
- [ ] 能正确使用七种基础算术运算符;
- [ ] 能解释 `/``//``%` 的区别;
- [ ] 能使用比较运算符得到布尔值;
- [ ] 能区分赋值与相等比较;
- [ ] 能使用至少一种复合赋值运算符;
- [ ] 能使用 `and``or``not`
- [ ] 能使用括号明确计算顺序;
- [ ] 能完成并运行 `practice.py`
- [ ] 能回答七道思考题。

View File

@@ -0,0 +1,97 @@
# 第 1-4 课示例:运算符
#
# 本文件按类别演示常用运算符。
# 运行时请对照每段注释,观察不同运算符产生的结果和数据类型。
# 一、算术运算符
first_number = 17
second_number = 7
print(f"加法:{first_number + second_number}")
print(f"减法:{first_number - second_number}")
print(f"乘法:{first_number * second_number}")
print(f"普通除法:{first_number / second_number}")
print(f"整除:{first_number // second_number}")
print(f"取余:{first_number % second_number}")
print(f"幂运算:{2 ** 3}")
# 二、整除与取余的实际含义
# 17 天中包含 2 个完整星期,另外还剩 3 天。
learning_days = 17
full_weeks = learning_days // 7
remaining_days = learning_days % 7
print(f"{learning_days} 天等于 {full_weeks} 个完整星期加 {remaining_days} 天。")
# 三、字符串支持的部分运算
# 加号连接字符串,乘号让字符串重复指定次数。
role_name = "Agent" + " " + "开发者"
separator = "=" * 20
print(role_name)
print(separator)
# 四、比较运算符
completed_hours = 12
target_hours = 10
print(f"是否等于目标:{completed_hours == target_hours}")
print(f"是否不等于目标:{completed_hours != target_hours}")
print(f"是否超过目标:{completed_hours > target_hours}")
print(f"是否少于目标:{completed_hours < target_hours}")
print(f"是否达到目标:{completed_hours >= target_hours}")
print(f"是否未超过目标:{completed_hours <= target_hours}")
# 五、复合赋值运算符
# completed_tasks += 1 等价于 completed_tasks = completed_tasks + 1。
completed_tasks = 3
completed_tasks += 1
print(f"新增一个完成项后:{completed_tasks}")
# 下面把预计时间扩大为原来的两倍。
estimated_hours = 5
estimated_hours *= 2
print(f"调整后的预计时间:{estimated_hours}")
# 六、逻辑运算符
course_finished = True
practice_finished = True
uses_pycharm = True
uses_vscode = False
can_start_next_course = course_finished and practice_finished
has_code_editor = uses_pycharm or uses_vscode
is_still_learning = not course_finished
print(f"课程和练习是否都完成:{can_start_next_course}")
print(f"是否至少使用一种编辑器:{has_code_editor}")
print(f"是否仍未完成课程:{is_still_learning}")
# 七、比较运算与逻辑运算组合
daily_hours = 2.5
completed_tasks = 4
is_plan_healthy = (daily_hours >= 1) and (completed_tasks >= 3)
print(f"学习时长和任务数是否同时达标:{is_plan_healthy}")
# 八、运算优先级
# 第一个结果先计算乘法;第二个结果先计算括号中的加法。
result_without_parentheses = 2 + 3 * 4
result_with_parentheses = (2 + 3) * 4
print(f"没有括号:{result_without_parentheses}")
print(f"使用括号:{result_with_parentheses}")
# 九、观察浮点数精度现象
# 这个结果说明部分十进制小数无法用二进制浮点数精确表示。
floating_point_result = 0.1 + 0.2
print(f"0.1 + 0.2 的结果:{floating_point_result}")

View File

@@ -0,0 +1,84 @@
# 第 1-4 课课堂练习Agent 学习进度计算器
#
# 完成要求:
# 1. 根据注释选择正确的算术、比较、赋值或逻辑运算符。
# 2. 数字输入需要转换为合适的数据类型。
# 3. 使用含义清晰的英文蛇形变量名。
# 4. 使用 f-string 输出结果。
# 5. 不要删除题目注释。
# 6. 完成后运行python practice.py
# 练习一:接收计划学习总天数,转换为整数并保存到 total_days。
# 练习二:接收已经完成的学习天数,转换为整数并保存到 completed_days。
# 练习三:接收每天计划学习的小时数,转换为浮点数并保存到 daily_hours。
# 练习四:使用减法计算剩余学习天数,保存到 remaining_days。
# 练习五:使用乘法计算计划总学习小时数,保存到 planned_total_hours。
# 计算公式:计划学习总天数 * 每天计划学习小时数。
# 练习六:使用乘法计算已经完成的学习小时数,保存到 completed_hours。
# 为了简化练习,假设每天都完成了计划学习时长。
# 练习七:使用整除和取余,把计划总天数拆分成“完整星期数”和“剩余天数”。
# 分别保存到 full_weeks 和 extra_days。
# 练习八:使用比较运算符完成以下判断:
# 1. completed_days 是否大于 0结果保存到 has_started
# 2. completed_days 是否大于或等于 total_days结果保存到 is_plan_finished
# 3. remaining_days 是否不等于 0结果保存到 has_remaining_days。
# 练习九:使用逻辑运算符完成以下判断:
# 只有“已经开始”并且“尚未完成”同时成立时is_in_progress 才为 True。
# 提示:“尚未完成”可以使用 not 反转 is_plan_finished。
# 练习十:创建 completed_tasks 变量,初始值为 3。
# 使用 += 让它增加 1然后输出更新后的值。
# 练习十一:使用字符串乘法输出一条包含 30 个等号的分隔线。
# 练习十二:使用 f-string 输出完整进度报告,至少包含:
# 1. 计划总天数和已完成天数;
# 2. 剩余天数;
# 3. 完整星期数和额外天数;
# 4. 计划总学习小时数和已完成学习小时数;
# 5. has_started、is_plan_finished、has_remaining_days 和 is_in_progress
# 6. 更新后的 completed_tasks。
# 建议使用以下测试数据进行第一次运行:
# 计划总天数30
# 已完成天数7
# 每天学习小时数2.5
#
# 使用这组数据时,你应该能推算出:
# 剩余 23 天,计划总时长 75.0 小时,已完成 17.5 小时;
# 30 天包含 4 个完整星期,额外 2 天;
# 已经开始为 True已经完成为 False正在进行为 True。
# 完成后进行自查:
# 1. 是否正确区分了 /、// 和 %
# 2. 比较结果是否是真正的 bool而不是字符串
# 3. 是否正确使用了 and 和 not
# 4. += 是否更新了原变量;
# 5. 所有计算结果是否与手工推算一致。
# 计划学习总天数30
# 已经完成的学习天数7
# 每天计划学习的小时数2.5
# 4
# ==============================
# 1. 计划总天数和已完成天数: 30,7
# 2. 剩余天数:23
# 3. 完整星期数和额外天数:4,2
# 4. 计划总学习小时数和已完成学习小时数:75.0,17.5
# has_started=True
# is_plan_finished=False
# has_remaining_days=True
# is_in_progress=True
# completed_tasks=4
#
# 进程已结束,退出代码为 0