第1章 1.4 输入输出与运算符

🎯 开场:为什么你需要一个"会说话"的程序?

上一章我们学会了用 f-string 把字符串玩出花——动态拼接名字、格式化数字、搞定各种显示需求。但你发现没有,那些程序都是自问自答:代码里写死数据,程序跑起来直接出结果。

现实哪有这么简单?

想象一下:你写了一个计算器,但每次算 2+2 都得改代码——这也太蠢了吧?

真正有用的程序,得能和人互动
- 用户输入一个数,程序告诉你它是奇数还是偶数
- 读取一份成绩单,自动算出平均分
- 根据不同情况,做不同的处理

这,就是本章要解决的问题:让程序开口说话(输出),同时学会倾听(输入),再配合运算符做判断和计算

学完这章,你就能写出真正意义上的"交互式程序"——不是冷冰冰的固定输出,而是能根据用户输入不同而产生不同结果


🧱 基础:三个核心概念

1.4.1 print()——程序的"嘴巴"

print() 大家已经不陌生了,但它的两个参数 sepend,很多人从来没注意过。

生活类比:想象你在喊人。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 - 配图1


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

小技巧:不确定就先加括号,反正括号不要钱。

配图2 - 配图2


🔥 实战:三个小项目

项目 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()sepend 参数让你控制输出格式
2. input() 负责读取用户输入,永远返回字符串需要转换
3. 算术、比较、逻辑、赋值运算符配合使用,让程序能做判断和计算

延伸学习资源
- 官方文档:Python 输入输出
- 书籍:《Python编程:从入门到实践》第3章
- 视频:B站小甲鱼《零基础学Python》第15-18讲

互动钩子:你在生活里有没有什么重复性计算,想用 Python 自动化?比如算工资、算水电费、算股票收益?评论区聊聊,下一章的项目实战我们就来解决其中一个问题!


📢 下章预告:学了输入输出和运算符,感觉自己行了?但光会单个功能还不行——下一章我们要做一个个人名片生成器,把字符串、输入输出、运算符全串起来,做一个能实际展示的小工具。敬请期待!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。