CC++ & Algorithm

复合赋值运算符——让变量悄悄变化的快捷方式

简单9
语言版本:C++Python
概述:用 +=、-= 等把运算和赋值一步完成,像存钱罐一样每次加一点,省时又省力。

复合赋值运算符:让变量悄悄变化的快捷方式

你有没有过这样的经历:每次往存钱罐里放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 += 5x = x + 5
-=减等于x -= 3x = x - 3
*=乘等于x *= 2x = x * 2
/=除等于x /= 4x = x / 4
//=整除等于x //= 3x = x // 3
%=取余等于x %= 5x = x % 5
**=幂等于x **= 2x = 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?或者用 //= 计算零花钱平均每天花多少?动手练起来吧!

例题精讲

1单选题

执行以下 Python 代码后,变量 x 的值是多少? x = 5 x += 3

A5
B8
C3
D15
2单选题

执行以下 Python 代码后,变量 y 的值是多少? y = 10 y -= 2 * 3

A4
B24
C8
D12
3判断题

执行以下代码后,变量 a 的类型是整数(int)。 a = 5 a += 2.5

4判断题

执行以下代码后,变量 b 的值为 16。 b = 4 b **= 2

5填空题
请补全下方代码,使得变量 n 的值最终为 100。
n = 25
n ___ 4