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