feat: 初始化 Python 零基础教学课程
This commit is contained in:
378
01_python基础/1_3_输入与输出/README.md
Normal file
378
01_python基础/1_3_输入与输出/README.md
Normal file
@@ -0,0 +1,378 @@
|
||||
# 第 1-3 课:输入与输出
|
||||
|
||||
## 一、本课目标
|
||||
|
||||
完成本课后,你应该能够:
|
||||
|
||||
1. 解释程序的输入、处理和输出;
|
||||
2. 使用 `input()` 接收用户输入;
|
||||
3. 理解 `input()` 得到的结果始终是字符串;
|
||||
4. 将输入的数字文本转换成整数或浮点数;
|
||||
5. 使用 f-string 输出包含变量的完整句子;
|
||||
6. 使用 `print()` 的 `sep` 和 `end` 调整简单的输出格式;
|
||||
7. 编写一个能与用户进行基础交互的小程序。
|
||||
|
||||
## 二、前置知识
|
||||
|
||||
开始本课前,你应该已经掌握:
|
||||
|
||||
- 使用 `print()` 输出内容;
|
||||
- 创建和使用变量;
|
||||
- 区分 `str`、`int`、`float` 和 `bool`;
|
||||
- 使用 `int()`、`float()` 和 `str()` 进行简单类型转换;
|
||||
- 使用 f-string 将变量放入字符串。
|
||||
|
||||
## 三、程序的输入、处理和输出
|
||||
|
||||
很多程序都可以简化成三个阶段:
|
||||
|
||||
```text
|
||||
输入(Input) → 处理(Process) → 输出(Output)
|
||||
```
|
||||
|
||||
例如,一个计算明年年龄的程序:
|
||||
|
||||
1. 输入:用户输入当前年龄;
|
||||
2. 处理:当前年龄加 `1`;
|
||||
3. 输出:显示明年的年龄。
|
||||
|
||||
第一课中的程序只有固定输出。学会输入后,程序就能根据不同用户提供的数据生成不同结果。
|
||||
|
||||
## 四、使用 `input()` 接收输入
|
||||
|
||||
最简单的输入代码如下:
|
||||
|
||||
```python
|
||||
user_name = input("请输入你的名字:")
|
||||
print(f"你好,{user_name}!")
|
||||
```
|
||||
|
||||
运行到 `input()` 时,程序会暂停并等待用户输入。用户输入内容并按下回车键后,程序才会继续向下执行。
|
||||
|
||||
`input()` 圆括号中的字符串称为提示语,用于告诉用户应该输入什么。
|
||||
|
||||
执行过程如下:
|
||||
|
||||
```text
|
||||
程序显示:请输入你的名字:
|
||||
用户输入:Bruce
|
||||
用户按下回车键
|
||||
变量 user_name 保存字符串 "Bruce"
|
||||
程序显示:你好,Bruce!
|
||||
```
|
||||
|
||||
## 五、`input()` 的结果始终是字符串
|
||||
|
||||
无论用户输入看起来像文字、整数还是小数,`input()` 返回的结果都是字符串 `str`。
|
||||
|
||||
```python
|
||||
age = input("请输入你的年龄:")
|
||||
print(type(age))
|
||||
```
|
||||
|
||||
如果输入 `18`,类型仍然是:
|
||||
|
||||
```text
|
||||
<class 'str'>
|
||||
```
|
||||
|
||||
这是因为终端接收到的是用户键入的一串字符。Python 不会擅自判断这串字符应该表示姓名、年龄、电话号码还是其他内容。
|
||||
|
||||
## 六、输入数字后进行类型转换
|
||||
|
||||
如果输入内容需要参与数学计算,就要先进行类型转换。
|
||||
|
||||
### 6.1 转换为整数
|
||||
|
||||
```python
|
||||
age_text = input("请输入你的年龄:")
|
||||
age = int(age_text)
|
||||
next_year_age = age + 1
|
||||
|
||||
print(f"明年你将 {next_year_age} 岁。")
|
||||
```
|
||||
|
||||
这里特意使用两个变量:
|
||||
|
||||
- `age_text` 保存用户输入的原始字符串;
|
||||
- `age` 保存转换后的整数。
|
||||
|
||||
这样命名能清楚表达数据转换前后的区别。
|
||||
|
||||
也可以写成:
|
||||
|
||||
```python
|
||||
age = int(input("请输入你的年龄:"))
|
||||
```
|
||||
|
||||
这种写法更短,但初学阶段不容易观察每一步。建议先掌握分步写法,理解后再使用组合写法。
|
||||
|
||||
### 6.2 转换为浮点数
|
||||
|
||||
如果用户可能输入小数,可以使用 `float()`:
|
||||
|
||||
```python
|
||||
daily_hours_text = input("你计划每天学习多少小时:")
|
||||
daily_hours = float(daily_hours_text)
|
||||
weekly_hours = daily_hours * 7
|
||||
|
||||
print(f"按照计划,你每周将学习 {weekly_hours} 小时。")
|
||||
```
|
||||
|
||||
## 七、转换失败时会发生什么
|
||||
|
||||
如果程序执行 `int("十八")`,Python 无法把中文“十八”直接转换成整数,会产生类似错误:
|
||||
|
||||
```text
|
||||
ValueError: invalid literal for int()
|
||||
```
|
||||
|
||||
`ValueError` 可以理解为“数据的值不适合当前操作”。
|
||||
|
||||
本课练习时,请按照提示输入正确格式的数据。以后学习异常处理时,我们会让程序在用户输入错误后给出友好提示,而不是直接结束。
|
||||
|
||||
## 八、使用 f-string 组织输出
|
||||
|
||||
从用户取得数据后,常常要把多个变量组合成容易阅读的结果:
|
||||
|
||||
```python
|
||||
user_name = "Bruce"
|
||||
learning_days = 3
|
||||
daily_hours = 2.5
|
||||
|
||||
print(f"{user_name} 已学习 Python {learning_days} 天,每天计划学习 {daily_hours} 小时。")
|
||||
```
|
||||
|
||||
f-string 中:
|
||||
|
||||
- 引号内的普通文字会原样显示;
|
||||
- 花括号中的变量会替换成变量保存的数据;
|
||||
- 花括号中也可以放简单计算。
|
||||
|
||||
例如:
|
||||
|
||||
```python
|
||||
print(f"一周计划学习 {daily_hours * 7} 小时。")
|
||||
```
|
||||
|
||||
为了让代码更容易阅读,较重要或较复杂的计算通常先保存到变量中,再进行输出。
|
||||
|
||||
## 九、一次接收多个输入
|
||||
|
||||
程序可以连续调用多次 `input()`:
|
||||
|
||||
```python
|
||||
user_name = input("请输入你的名字:")
|
||||
learning_goal = input("请输入你的学习目标:")
|
||||
|
||||
print(f"学习者:{user_name}")
|
||||
print(f"学习目标:{learning_goal}")
|
||||
```
|
||||
|
||||
每次遇到 `input()`,程序都会等待一次输入。输入顺序必须与程序询问顺序一致。
|
||||
|
||||
## 十、进一步认识 `print()`
|
||||
|
||||
### 10.1 一次输出多个内容
|
||||
|
||||
`print()` 可以接收多个内容,中间使用英文逗号分隔:
|
||||
|
||||
```python
|
||||
print("Python", "FastAPI", "Django")
|
||||
```
|
||||
|
||||
默认输出:
|
||||
|
||||
```text
|
||||
Python FastAPI Django
|
||||
```
|
||||
|
||||
注意:代码中的英文逗号负责分隔多个数据,默认显示结果会使用空格连接它们。
|
||||
|
||||
### 10.2 使用 `sep` 设置分隔符
|
||||
|
||||
`sep` 是 separator 的缩写,表示多个输出内容之间的分隔符:
|
||||
|
||||
```python
|
||||
print("Python", "FastAPI", "Django", sep=" -> ")
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
```text
|
||||
Python -> FastAPI -> Django
|
||||
```
|
||||
|
||||
`sep` 不是需要显示的普通内容,而是传给 `print()` 的命名参数。函数和参数将在后续课程系统讲解,本课先掌握这种常用写法。
|
||||
|
||||
### 10.3 使用 `end` 设置结尾
|
||||
|
||||
`print()` 默认在输出结束后换行。可以通过 `end` 改变结尾:
|
||||
|
||||
```python
|
||||
print("正在学习", end=":")
|
||||
print("Python")
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
```text
|
||||
正在学习:Python
|
||||
```
|
||||
|
||||
第一条 `print()` 没有立即换行,因此第二条内容接在后面。
|
||||
|
||||
现阶段不要过度使用 `sep` 和 `end`。只有当它们能让输出格式更清楚时才使用。
|
||||
|
||||
## 十一、空字符串
|
||||
|
||||
如果用户看到输入提示后没有输入任何内容,直接按下回车键,`input()` 会返回空字符串:
|
||||
|
||||
```python
|
||||
""
|
||||
```
|
||||
|
||||
空字符串是一个长度为零的字符串。它不是 `0`,也不是 `False` 本身。
|
||||
|
||||
以后学习条件判断时,我们会检查用户是否输入了内容。本课练习时,请按提示提供非空数据。
|
||||
|
||||
## 十二、运行本课示例
|
||||
|
||||
在 PowerShell 中执行:
|
||||
|
||||
```powershell
|
||||
cd D:\Code\Python\01_python基础\1_3_输入与输出
|
||||
python input_output.py
|
||||
```
|
||||
|
||||
程序会依次要求你输入:
|
||||
|
||||
1. 姓名或称呼;
|
||||
2. 已学习 Python 的天数;
|
||||
3. 每天计划学习的小时数;
|
||||
4. 学习目标。
|
||||
|
||||
可以参考以下输入:
|
||||
|
||||
```text
|
||||
Bruce
|
||||
3
|
||||
2.5
|
||||
开发 LLM Agent
|
||||
```
|
||||
|
||||
输入整数和小数时暂时不要使用中文数字或附加单位。例如输入 `3`,不要输入 `3天`。
|
||||
|
||||
## 十三、示例程序执行过程
|
||||
|
||||
`input_output.py` 大致完成以下步骤:
|
||||
|
||||
1. 接收姓名并保存为字符串;
|
||||
2. 接收学习天数的原始文本;
|
||||
3. 把学习天数转换为整数;
|
||||
4. 接收每天学习小时数的原始文本;
|
||||
5. 把学习小时数转换为浮点数;
|
||||
6. 接收学习目标;
|
||||
7. 计算每周计划学习时间;
|
||||
8. 使用 f-string 输出个人学习计划。
|
||||
|
||||
请对照源代码,找出每一步对应的代码。
|
||||
|
||||
## 十四、常见错误
|
||||
|
||||
### 14.1 程序像是停止了
|
||||
|
||||
如果最后显示输入提示但没有出现新的 PowerShell 提示符,程序通常不是卡住,而是在等待你输入内容并按回车键。
|
||||
|
||||
### 14.2 数字后添加了单位
|
||||
|
||||
输入:
|
||||
|
||||
```text
|
||||
3天
|
||||
```
|
||||
|
||||
不能直接通过 `int()` 转换。提示要求输入数字时,应只输入:
|
||||
|
||||
```text
|
||||
3
|
||||
```
|
||||
|
||||
单位由程序在输出时添加。
|
||||
|
||||
### 14.3 把 `input` 写成大写
|
||||
|
||||
Python 区分大小写。正确名称是 `input`,不是 `Input` 或 `INPUT`。
|
||||
|
||||
### 14.4 忘记保存输入结果
|
||||
|
||||
```python
|
||||
input("请输入名字:")
|
||||
print(user_name)
|
||||
```
|
||||
|
||||
上面的输入没有赋给 `user_name`,之后使用该变量会产生 `NameError`。
|
||||
|
||||
正确写法:
|
||||
|
||||
```python
|
||||
user_name = input("请输入名字:")
|
||||
```
|
||||
|
||||
### 14.5 字符串不能直接与整数相加
|
||||
|
||||
```text
|
||||
age_text = input("请输入年龄:")
|
||||
next_year_age = age_text + 1
|
||||
```
|
||||
|
||||
`age_text` 是字符串,必须先使用 `int()` 转换后再参与加法计算。
|
||||
|
||||
## 十五、课堂练习
|
||||
|
||||
打开 `practice.py`,编写一个“Agent 开发学习计划生成器”。程序需要接收用户输入,完成简单计算,并输出一份格式清晰的学习计划。
|
||||
|
||||
运行命令:
|
||||
|
||||
```powershell
|
||||
python practice.py
|
||||
```
|
||||
|
||||
请至少使用一次:
|
||||
|
||||
- `input()`;
|
||||
- `int()`;
|
||||
- `float()`;
|
||||
- f-string;
|
||||
- 有明确含义的英文变量名。
|
||||
|
||||
## 十六、思考题
|
||||
|
||||
1. 为什么用户输入 `18` 后,`input()` 返回的仍然是字符串?
|
||||
2. 什么时候应使用 `int()`,什么时候应使用 `float()`?
|
||||
3. 如果用户输入 `2.5`,能否使用 `int()` 直接转换?
|
||||
4. `print("A", "B", sep="-")` 会输出什么?
|
||||
5. 为什么输入数字时不建议让用户同时输入“天”“小时”等单位?
|
||||
|
||||
## 十七、本课小结
|
||||
|
||||
- 许多程序都包含输入、处理和输出三个阶段;
|
||||
- `input()` 会显示提示并等待用户输入;
|
||||
- `input()` 返回的数据始终是字符串;
|
||||
- 数字文本参与计算前,通常需要使用 `int()` 或 `float()` 转换;
|
||||
- f-string 可以将用户输入、计算结果和固定文字组合起来;
|
||||
- `print()` 可以一次输出多个数据;
|
||||
- `sep` 可以设置多个数据之间的分隔符;
|
||||
- `end` 可以设置输出结尾;
|
||||
- 转换数字时,输入内容必须符合对应格式。
|
||||
|
||||
## 十八、验收标准
|
||||
|
||||
- [ ] 能使用 `input()` 接收并保存用户输入;
|
||||
- [ ] 能证明 `input()` 返回的是字符串;
|
||||
- [ ] 能把数字文本转换为整数或浮点数;
|
||||
- [ ] 能使用输入的数据进行简单计算;
|
||||
- [ ] 能使用 f-string 输出完整句子;
|
||||
- [ ] 能使用 `sep` 或 `end` 调整一次输出;
|
||||
- [ ] 能完成并运行 `practice.py`;
|
||||
- [ ] 能回答五道思考题。
|
||||
52
01_python基础/1_3_输入与输出/input_output.py
Normal file
52
01_python基础/1_3_输入与输出/input_output.py
Normal file
@@ -0,0 +1,52 @@
|
||||
# 第 1-3 课示例:输入与输出
|
||||
#
|
||||
# 这个程序会暂停并等待用户依次输入四项数据。
|
||||
# 输入数字时请只输入数字本身,不要添加“天”或“小时”等单位。
|
||||
|
||||
|
||||
# 一、接收字符串输入
|
||||
# input() 会先显示提示语,再等待用户输入并按下回车键。
|
||||
# 用户输入的内容会以字符串形式保存到 user_name 变量中。
|
||||
user_name = input("请输入你的名字或称呼:")
|
||||
|
||||
|
||||
# 二、接收整数输入
|
||||
# input() 得到的 learning_days_text 是字符串。
|
||||
# 这里分成两步编写,方便观察类型转换前后的数据。
|
||||
learning_days_text = input("请输入你已经学习 Python 的天数:")
|
||||
learning_days = int(learning_days_text)
|
||||
|
||||
|
||||
# 三、接收浮点数输入
|
||||
# 每天学习时间可能包含小数,因此使用 float() 进行转换。
|
||||
daily_hours_text = input("请输入你计划每天学习的小时数:")
|
||||
daily_hours = float(daily_hours_text)
|
||||
|
||||
|
||||
# 四、继续接收字符串输入
|
||||
learning_goal = input("请输入你的 Python 学习目标:")
|
||||
|
||||
|
||||
# 五、处理输入的数据
|
||||
# 一周有 7 天,因此每天学习时间乘以 7 可以得到每周计划时间。
|
||||
weekly_hours = daily_hours * 7
|
||||
|
||||
|
||||
# 六、输出分隔线
|
||||
# print() 接收三个字符串,sep="" 表示它们之间不添加默认空格。
|
||||
print("=", "个人 Python 学习计划", "=", sep="")
|
||||
|
||||
|
||||
# 七、使用 f-string 输出变量和计算结果
|
||||
print(f"学习者:{user_name}")
|
||||
print(f"已学习:{learning_days} 天")
|
||||
print(f"每天计划学习:{daily_hours} 小时")
|
||||
print(f"每周计划学习:{weekly_hours} 小时")
|
||||
print(f"学习目标:{learning_goal}")
|
||||
|
||||
|
||||
# 八、演示 end 参数
|
||||
# 第一条 print() 使用 end=":",输出后不换行,而是以中文冒号结尾。
|
||||
# 第二条 print() 会紧接着输出学习状态,之后恢复默认换行。
|
||||
print("当前状态", end=":")
|
||||
print("持续学习中")
|
||||
54
01_python基础/1_3_输入与输出/practice.py
Normal file
54
01_python基础/1_3_输入与输出/practice.py
Normal file
@@ -0,0 +1,54 @@
|
||||
# 第 1-3 课课堂练习:Agent 开发学习计划生成器
|
||||
#
|
||||
# 完成要求:
|
||||
# 1. 根据注释依次接收用户输入。
|
||||
# 2. 对需要计算的数字文本进行类型转换。
|
||||
# 3. 使用有明确含义的英文蛇形变量名。
|
||||
# 4. 使用 f-string 输出最终学习计划。
|
||||
# 5. 不要删除题目注释。
|
||||
# 6. 完成后运行:python practice.py
|
||||
|
||||
|
||||
# 练习一:使用 input() 接收用户的名字或称呼。
|
||||
# 将输入结果保存到变量 user_name。
|
||||
|
||||
# 练习二:使用 input() 接收用户计划学习 Python 的总天数。
|
||||
# input() 返回字符串,请使用 int() 转换为整数并保存到 total_days。
|
||||
# 建议分成“接收原始文本”和“转换类型”两个步骤。
|
||||
|
||||
|
||||
# 练习三:使用 input() 接收用户每天计划学习的小时数。
|
||||
# 使用 float() 转换为浮点数并保存到 daily_hours。
|
||||
|
||||
# 练习四:使用 input() 接收用户想重点学习的 Agent 方向。
|
||||
# 例如:Agent 应用开发、提示词工程、RAG 或模型训练。
|
||||
# 将结果保存到 learning_direction。
|
||||
|
||||
# 练习五:计算总计划学习小时数。
|
||||
# 计算公式:总天数 * 每天学习小时数。
|
||||
# 将计算结果保存到 total_hours。
|
||||
|
||||
|
||||
# 练习六:使用 print() 和 sep 参数输出标题。
|
||||
# 标题可以由 "="、"Agent 开发学习计划"、"=" 三部分组成。
|
||||
# 尝试使用 sep="",让三部分之间不出现默认空格。
|
||||
|
||||
# 练习七:使用 f-string 分行输出以下信息:
|
||||
# 1. 学习者;
|
||||
# 2. 计划学习总天数;
|
||||
# 3. 每天学习小时数;
|
||||
# 4. 预计总学习小时数;
|
||||
# 5. 重点学习方向。
|
||||
|
||||
|
||||
# 练习八:使用两条 print() 输出最终状态。
|
||||
# 第一条使用 end=":" 输出“计划状态”,使它暂时不换行。
|
||||
# 第二条输出“准备开始”。
|
||||
|
||||
|
||||
# 完成后进行自查:
|
||||
# 1. 输入整数时是否只输入了数字;
|
||||
# 2. 输入小数时是否使用了英文小数点;
|
||||
# 3. total_days 的类型是否为 int;
|
||||
# 4. daily_hours 和 total_hours 的类型是否为 float;
|
||||
# 5. 最终输出是否包含全部输入信息和计算结果。
|
||||
Reference in New Issue
Block a user