第1章 1.4 输入输出与运算符
🎯 开场:为什么你需要一个"会说话"的程序?
上一章我们学会了用 f-string 把字符串玩出花——动态拼接名字、格式化数字、搞定各种显示需求。但你发现没有,那些程序都是自问自答:代码里写死数据,程序跑起来直接出结果。
现实哪有这么简单?
想象一下:你写了一个计算器,但每次算 2+2 都得改代码——这也太蠢了吧?
真正有用的程序,得能和人互动:
- 用户输入一个数,程序告诉你它是奇数还是偶数
- 读取一份成绩单,自动算出平均分
- 根据不同情况,做不同的处理
这,就是本章要解决的问题:让程序开口说话(输出),同时学会倾听(输入),再配合运算符做判断和计算。
学完这章,你就能写出真正意义上的"交互式程序"——不是冷冰冰的固定输出,而是能根据用户输入不同而产生不同结果。
🧱 基础:三个核心概念
1.4.1 print()——程序的"嘴巴"
print() 大家已经不陌生了,但它的两个参数 sep 和 end,很多人从来没注意过。
生活类比:想象你在喊人。sep 就像多人名字之间的停顿符,end 就像喊完之后要不要换气继续喊。
先看一个经典问题——你想输出 A和B和C,通常会这么写:
print("A")
print("和")
print("B")
print("和")
print("C")
输出:
A
和
B
和
C
每行一个,不是你想要的吧?
用 end 参数,一行搞定:
print("A", end="和")
print("B", end="和")
print("C")
输出:
A和B和C
end 默认是 \n(换行),改成空字符串 "" 就能连成一行了。
再看 sep——批量输出时自动加分隔符:
print("北京", "上海", "广州", "深圳")
输出:
北京 上海 广州 深圳
print("北京", "上海", "广州", "深圳", sep=" | ")
输出:
北京 | 上海 | 广州 | 深圳
一句话解释:end 控制"结尾符",sep 控制"分隔符"。记住这俩,你的输出格式想怎么调就怎么调。

1.4.2 input()——程序的"耳朵"
程序光会说话不行,还得会听。input() 就是 Python 的"耳朵"。
生活类比:你去早餐店点单,阿姨问"吃什么?",你回答"豆浆油条"。阿姨听到了你的话,才能给你准备。input() 就是程序问用户"吃什么",然后等用户回答,再继续往下走。
最基本用法:
名字 = input("请输入你的名字:")
print("你好," + 名字 + "!")
运行效果:
请输入你的名字:小明
你好,小明!
注意!input() 永远返回字符串。如果用户输入数字,你要自己做转换:
年龄 = input("请输入你的年龄:") # 收到的是 "18"(字符串)
年龄 = int(年龄) # 转成整数 18
print("明年你就", 年龄 + 1, "岁了")
或者一行搞定:
年龄 = int(input("请输入你的年龄:"))
一句话解释:input() 总是返回字符串,用 int() 或 float() 转换后才能做数学运算。
1.4.3 运算符——程序的"大脑"
光听不说没用,程序还得会思考。运算符就是程序的"思考工具"。
算术运算符:数学计算
a = 10
b = 3
print(a + b) # 加法:13
print(a - b) # 减法:7
print(a * b) # 乘法:30
print(a / b) # 除法:3.333...
print(a // b) # 整除:3(砍掉小数部分)
print(a % b) # 取余:1(10除以3余1)
print(a ** b) # 幂运算:10的3次方=1000
生活类比:
- / 就像分蛋糕,关心你到底分到多少(有小数)
- // 就像数人头,只关心能完整分给几个人(取整)
- % 就像分完蛋糕后盘子里剩的那一口
比较运算符:判断对错
年龄 = 18
print(年龄 > 17) # True(成年了)
print(年龄 == 18) # True(正好18)
print(年龄 != 20) # True(不是20岁)
print(年龄 >= 18) # True(满了18岁)
注意:判断相等用 ==,不是 =。= 是赋值(把右边的东西塞给左边),== 是比较(问左右是不是一样)。
逻辑运算符:组合判断
成绩 = 85
出勤率 = 0.9
# and:两个都要满足
print(成绩 >= 60 and 出勤率 >= 0.8) # True
# or:满足一个就行
print(成绩 < 60 or 出勤率 < 0.8) # False
# not:取反
print(not (成绩 >= 60)) # False
生活类比:AND 就像"买一送一"——两个条件都要满足才生效。OR 就像"任选其一"——随便哪个都行。NOT 就像"反悔"——本来是真的,变成假的。
赋值运算符:简写规则
x = 10
x += 5 # 等价于 x = x + 5,现在 x = 15
x -= 3 # 等价于 x = x - 3,现在 x = 12
x *= 2 # 等价于 x = x * 2,现在 x = 24
x /= 4 # 等价于 x = x / 4,现在 x = 6.0
x //= 2 # 等价于 x = x // 2,现在 x = 3.0
一句话解释:赋值运算符就是个偷懒工具,帮你少写重复的字。
运算符优先级:谁先算?
和你数学课学的一样:
result = 2 + 3 * 4 # 先算乘法:2 + 12 = 14
result = (2 + 3) * 4 # 括号优先:5 * 4 = 20
小技巧:不确定就先加括号,反正括号不要钱。

🔥 实战:三个小项目
项目 1:猜数字游戏(5 分钟)
场景:程序想一个 1-10 的数字,你来猜,告诉你猜大了还是猜小了。
import random
# 程序随机想一个数字
正确答案 = random.randint(1, 10)
print("我想了一个1-10之间的数字,请你猜猜是几?")
while True:
猜测 = int(input("你的猜测是:"))
if 猜测 > 正确答案:
print("猜大了,往小一点猜!")
elif 猜测 < 正确答案:
print("猜小了,往大一点猜!")
else:
print("恭喜你,猜对了!")
break
预期输出:
我想了一个1-10之间的数字,请你猜猜是几?
你的猜测是:5
猜小了,往大一点猜!
你的猜测是:8
猜大了,往小一点猜!
你的猜测是:7
恭喜你,猜对了!
一句话解释:用 random.randint() 生成随机数,用 while True 循环配合 if/elif/else 做判断,直到猜对才用 break 退出。
项目 2:成绩统计分析器(15 分钟)
场景:老师输入5个学生的成绩,程序自动统计平均分、最高分、最低分,以及不及格人数。
print("=== 成绩统计分析系统 ===\n")
成绩列表 = []
for i in range(1, 6):
分数 = float(input(f"请输入第{i}个学生的成绩:"))
成绩列表.append(分数)
# 计算统计数据
平均分 = sum(成绩列表) / len(成绩列表)
最高分 = max(成绩列表)
最低分 = min(成绩列表)
不及格人数 = sum(1 for 分数 in 成绩列表 if 分数 < 60)
# 输出结果
print("\n=== 统计结果 ===")
print(f"平均分:{平均分:.2f}")
print(f"最高分:{最高分}")
print(f"最低分:{最低分}")
print(f"不及格人数:{不及格人数}人")
# 给个评语
if 平均分 >= 90:
print("班级表现优秀!")
elif 平均分 >= 80:
print("班级表现良好!")
elif 平均分 >= 60:
print("班级表现及格。")
else:
print("班级表现需要加油!")
预期输出:
=== 成绩统计分析系统 ===
请输入第1个学生的成绩:85
请输入第2个学生的成绩:92
请输入第3个学生的成绩:78
请输入第4个学生的成绩:55
请输入第5个学生的成绩:88
=== 统计结果 ===
平均分:79.60
最高分:92.0
最低分:55.0
不及格人数:1人
班级表现良好!
一句话解释:用 sum()、len()、max()、min() 这些内置函数做统计,用列表推导式筛不及格人数。
项目 3:个人消费记账本(15 分钟)
场景:记录一周的每天消费,周末统计总支出、平均日消费、最高消费日,并找出超过平均值的日子。
print("=== 个人消费记账本 ===\n")
日期列表 = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
消费列表 = []
# 逐日输入消费
for 日期 in 日期列表:
金额 = float(input(f"{日期}的消费是多少?"))
消费列表.append(金额)
# 统计数据
总支出 = sum(消费列表)
平均消费 = 总支出 / len(消费列表)
最高消费 = max(消费列表)
最高消费日 = 日期列表[消费列表.index(最高消费)]
print("\n=== 本周消费报告 ===")
print(f"总支出:{总支出:.2f}元")
print(f"平均日消费:{平均消费:.2f}元")
print(f"最高消费日:{最高消费日}({最高消费:.2f}元)")
# 找出超平均的日子
超平均的日子 = []
for i in range(len(消费列表)):
if 消费列表[i] > 平均消费:
超平均的日子.append(日期列表[i])
if 超平均的日子:
超平均_str = "、".join(超平均的日子)
print(f"消费超标的日子:{超平均_str}")
else:
print("所有日子消费都在平均水平以下,真会省钱!")
预期输出:
=== 个人消费记账本 ===
周一的消费是多少?25
周二的消费是多少?40
周三的消费是多少?30
周四的消费是多少?55
周五的消费是多少?20
周六的消费是多少?80
周日的消费是多少?15
=== 本周消费报告 ===
总支出:265.00元
平均日消费:37.86元
最高消费日:周六(80.00元)
消费超标的日子:周四、周六
一句话解释:用 index() 找出最高消费对应的日期索引,再从日期列表里拿到星期几的名字。
💪 进阶:常见坑与调试技巧
坑 1:input 收到的是字符串,不是数字
# ❌ 错误写法
age = input("年龄:")
if age > 17: # 报错!字符串和整数不能比大小
print("成年了")
# ✅ 正确写法
age = int(input("年龄:"))
if age > 17:
print("成年了")
坑 2:== 是比较,= 是赋值
# ❌ 错误写法
if age = 18: # 报错!if后面不能用赋值
print("正好18岁")
# ✅ 正确写法
if age == 18:
print("正好18岁")
坑 3:while 循环忘了设退出条件
# ❌ 错误写法
n = 0
while n < 10:
print(n)
# 忘了 n += 1,死循环!
# ✅ 正确写法
n = 0
while n < 10:
print(n)
n += 1 # 别忘了让条件有机会变为False
坑 4:浮点数比较要小心
# ❌ 错误写法
result = 0.1 + 0.2
if result == 0.3: # 可能 False!因为精度问题
print("相等")
# ✅ 正确写法
result = 0.1 + 0.2
if abs(result - 0.3) < 0.0001: # 允许一点误差
print("近似相等")
坑 5:运算符优先级搞混
# ❌ 错误理解
flag = True
result = flag and not flag or True # 以为先算 and
# ✅ 实际上:not > and > or
# 拆开看:(True and (not True)) or True = (True and False) or True = False or True = True
调试技巧:print 大法
程序跑出来不对?先加 print 看看变量值:
def 复杂计算(a, b, c):
print(f"调试:a={a}, b={b}, c={c}") # 关键步骤
result = (a + b) * c / (a - b)
print(f"调试:result={result}")
return result
什么时候用 print 调试:逻辑简单、变量不多的时候,直接 print 最快。
什么时候用 pdb:复杂项目、多层函数调用时,用 import pdb; pdb.set_trace() 逐步执行。
✏️ 练习题
练习 1(2 分钟):改改输出格式
- 输入:
print("北京", "上海", "广州", sep=" -> ")预期输出是什么? - 提示:sep 参数控制多个值之间的分隔符
练习 2(2 分钟):类型转换
- 输入:用户输入 "100",如何把它变成整数 100 来做运算?
- 提示:
input()返回的是字符串,要用int()转换
练习 3(3 分钟):猜数字加限制
- 基于项目 1,给猜数字游戏加一个限制:最多猜 5 次,猜不到就输了
- 提示:用一个计数器变量,每次猜测后 +1,然后用
if 计数 > 5: break
练习 4(5 分钟):成绩等级判定
- 输入 5 个成绩,输出每个成绩的等级(>=90 A,>=80 B,>=60 C,<60 D)
- 提示:用 if/elif/else 链判断每个分数
练习 5(3 分钟):找错
- 下面代码为什么会死循环?如何修复?
n = 5
while n > 0:
print(n)
- 提示:while 循环需要有能让条件变成 False 的机会
作业:做一个「BMI 计算器」
需求描述:输入身高(cm)和体重(kg),计算 BMI 并给出健康建议。
功能点:
1. 用户输入身高和体重
2. 计算 BMI = 体重(kg) / (身高(m))²
3. 根据 BMI 判断体型:<18.5 偏瘦,18.5-24 正常,24-28 超重,>=28 肥胖
4. 输出格式美观,像个小报告
加分项:
1. 用 f-string 格式化输出,保留 1 位小数
2. 输入身高时支持直接输入厘米数(比如 175),自动转米
验收标准:
- 输入:身高 175,体重 70
- 输出:BMI 约 22.86,体型正常
📚 总结
本文学了 3 个核心点:
1. print() 的 sep 和 end 参数让你控制输出格式
2. input() 负责读取用户输入,永远返回字符串需要转换
3. 算术、比较、逻辑、赋值运算符配合使用,让程序能做判断和计算
延伸学习资源:
- 官方文档:Python 输入输出
- 书籍:《Python编程:从入门到实践》第3章
- 视频:B站小甲鱼《零基础学Python》第15-18讲
互动钩子:你在生活里有没有什么重复性计算,想用 Python 自动化?比如算工资、算水电费、算股票收益?评论区聊聊,下一章的项目实战我们就来解决其中一个问题!
📢 下章预告:学了输入输出和运算符,感觉自己行了?但光会单个功能还不行——下一章我们要做一个个人名片生成器,把字符串、输入输出、运算符全串起来,做一个能实际展示的小工具。敬请期待!

评论(0)