复合赋值运算符——让变量悄悄变化的快捷方式
简单9复合赋值运算符:让变量悄悄变化的快捷方式
你有没有过这样的经历:每次往存钱罐里放10元钱,原来有0元,第一次变10,第二次变20。如果写成代码,我们得这样做:
money = 0 # 初始0元
money = money + 10 # 第一次,变成10
money = money + 10 # 第二次,变成20
每次都要写两遍 money,好麻烦!Python发明了“复合赋值运算符”,可以一步完成:money += 10 就相当于 money = money + 10。就像用快捷键代替鼠标点来点去,省时又省力。
为什么需要复合赋值运算符?
想象你每天都在记录零花钱的变动——今天花掉5元,明天收到10元,后天又花掉3元。如果用普通赋值,每次都得写两遍变量名,比如:
money = 20
money = money - 5 # 花掉5元
money = money + 10 # 收到10元
money = money - 3 # 又花掉3元
写多了很累,而且容易打错。复合赋值运算符把 = 和运算符号合并成一个,让代码更短、更清晰,就像用遥控器一键操作,不用每次按两个按钮。
常见的复合赋值运算符一览
Python提供了7种常用的复合赋值运算符,它们都遵循同一个规则:先对变量做运算,再把结果存回变量。下面这张表总结了它们:
| 运算符 | 名称 | 示例 | 等价写法 |
|---|---|---|---|
+= | 加等于 | x += 5 | x = x + 5 |
-= | 减等于 | x -= 3 | x = x - 3 |
*= | 乘等于 | x *= 2 | x = x * 2 |
/= | 除等于 | x /= 4 | x = x / 4 |
//= | 整除等于 | x //= 3 | x = x // 3 |
%= | 取余等于 | x %= 5 | x = x % 5 |
**= | 幂等于 | x **= 2 | x = x ** 2 |
注意:/= 得到的是小数(浮点数),而 //= 得到的是整数(向下取整)。比如 7 //= 3 结果是2,而 7 /= 3 结果是2.333...。
生活中的小例子,一看就懂
1. 搭积木:每层加2块
玩积木时,每次堆2层,原来有3层,堆3次后有多少层?
layers = 3 # 初始3层
layers += 2 # 第一次加2,变成5
layers += 2 # 第二次,变成7
layers += 2 # 第三次,变成9
print("堆了3次后层数:", layers) # 9
2. 零花钱每天花5元
妈妈给你20元零花钱,每天花5元,过了3天还剩多少?
money = 20 # 初始20元
money -= 5 # 第一天,剩15
money -= 5 # 第二天,剩10
money -= 5 # 第三天,剩5
print("3天后剩下的钱:", money) # 5
3. 翻倍游戏:每次乘2
如果你有5颗糖,每次翻倍,翻3次后有多少颗?
candies = 5 # 初始5颗糖
candies *= 2 # 第一次翻倍,10颗
candies *= 2 # 第二次,20颗
candies *= 2 # 第三次,40颗
print("翻倍3次后有", candies, "颗糖") # 40
4. 平均分水果:用整除和取余
你有23个苹果,要分给4个小朋友,每人能分几个?还剩几个?
apples = 23 # 总共23个苹果
kids = 4 # 4个小朋友
each = apples // kids # 每人分5个(整数除法)
remainder = apples % kids # 还剩3个
# 用复合赋值也可以逐步分:
apples = 23
apples //= 4 # 相当于 apples = apples // 4
print("每人分", apples, "个,但这样会丢失余数。")
实际上,更常见的是用 %= 来求余数:
left = 23
left %= 4 # left = left % 4 = 3
print("分完后还剩", left, "个苹果")
5. 实力提升:每次增加20点经验
游戏里角色初始经验100,打一个怪物加20点,打了3只后经验值是多少?
exp = 100 # 初始经验值
exp += 20 # 第一只怪物,120
exp += 20 # 第二只,140
exp += 20 # 第三只,160
print("打3只怪物后经验值:", exp) # 160
如果想一次加三只的经验,也可以写成 exp += 20 * 3,但那是普通赋值了。
6. 考试分数累加:用加等于记录总分
你考了三次数学测验,成绩分别是85、92、78,怎么算总分?
total = 0 # 初始总分0
total += 85 # 加第一次成绩
total += 92 # 加第二次
total += 78 # 加第三次
print("总分:", total) # 255
新手容易犯的错误
错误1:忘记变量必须先赋值
复合赋值运算符会修改变量的值,所以变量必须先有一个初始值。下面这样会报错:
score += 10 # ❌ 报错:name 'score' is not defined
必须先写 score = 0 才行。
错误2:混淆 /= 和 //=
/= 得到浮点数,//= 得到整数。比如:
x = 10
x /= 3 # x变成3.3333333333333335(浮点数)
y = 10
y //= 3 # y变成3(整数)
如果你希望结果是整数,记得用 //=。
错误3:在复合赋值里叠加其他运算
有人想写成 x += y * 2,这是正确的,因为它等价于 x = x + (y * 2)。但下面这种写法是错误的:
x += 10; y # ❌ 语法错误,分号不是Python的习惯写法
错误4:认为复合赋值只能用于加法
初学者可能只记住 +=,而忘记还有 -=、*= 等,但请放心,它们用法完全一样,只要把 + 换成其他运算符即可。
完整可运行的示例:超市购物小票
小明去超市买东西,一开始钱包里有100元。他买了3样东西:薯片15元、可乐8元、文具盒22元。每次付钱后剩余多少钱?最后还能再买一个32元的玩具吗?
money = 100 # 初始钱包100元
print("初始金额:", money, "元")
money -= 15 # 买薯片,花15元
print("买薯片后剩余:", money, "元")
money -= 8 # 买可乐,花8元
print("买可乐后剩余:", money, "元")
money -= 22 # 买文具盒,花22元
print("买文具盒后剩余:", money, "元")
# 检查是否能买32元的玩具
toy_price = 32
if money >= toy_price:
money -= toy_price
print("还能买玩具,买后剩余:", money, "元")
else:
print("钱不够买玩具,还差", toy_price - money, "元")
运行结果可能是:
初始金额: 100 元
买薯片后剩余: 85 元
买可乐后剩余: 77 元
买文具盒后剩余: 55 元
还能买玩具,买后剩余: 23 元
相关知识点指引
复合赋值运算符是“赋值”和“算术运算”的结合。如果你还想了解更多,可以看这些内容:
- 变量与赋值 – 理解变量如何存储和改变值。
- 算术运算符 – 加、减、乘、除、整除、取余、幂。
- 运算符优先级 – 比如
x += 2 * 3是先算乘法再加法。 - 顺序结构 – 复合赋值常出现在顺序执行的代码中。
现在,试着用 *= 写一个“猜数字翻倍”小游戏:设定一个隐藏数字,每猜一次就翻倍,看几次后超过100?或者用 //= 计算零花钱平均每天花多少?动手练起来吧!
例题精讲
执行以下 Python 代码后,变量 x 的值是多少? x = 5 x += 3
执行以下 Python 代码后,变量 y 的值是多少? y = 10 y -= 2 * 3
执行以下代码后,变量 a 的类型是整数(int)。 a = 5 a += 2.5
执行以下代码后,变量 b 的值为 16。 b = 4 b **= 2
请补全下方代码,使得变量 n 的值最终为 100。
n = 25
n ___ 4