Files
PythonLearn/01_python基础/1_3_输入与输出/README.md
2026-07-22 16:42:56 +08:00

379 lines
9.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第 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`
- [ ] 能回答五道思考题。