你的计算器该退休了:Python 算术运算符,让电脑帮你把生活算得明明白白
大年初一,亲戚家小孩攥着7块糖跑过来:“姐姐,这糖分给3个小朋友,怎么分才公平?”
我第一反应是摸手机,但转念一想——这不就是Python里整数除法 // 和取余 % 的经典现场吗?先每人2块,剩下1块,大人再决定给谁。逻辑清清楚楚,一行代码搞定:
7 // 3 # 每人2块
7 % 3 # 还剩1块
你看,有时候数学题不是“算不出来”,而是“不知道该用哪个工具”。Python的算术运算符,就是一套比计算器聪明得多的数字工具箱。
四则运算:和数学课没差,但有一个坑
+、-、*、/ 的用法和课本上几乎一样。5加3是8,9减4是5,2乘6是12。真正容易翻车的是除法——它默认返回浮点数:
8 / 2 # 4.0,不是4
为什么?因为计算机想保留精度。你买3个苹果,每个5.5元,总价就是浮点数。但如果你要分东西,“4.0个苹果”听起来就很奇怪。这时候你就需要另外两个兄弟。
// 和 %:分东西的最佳拍档
整数除法 // 只保留商,取余 % 只保留余数。这两家伙几乎永远一起出现。
比如9块饼干分给4个人:
9 // 4 # 每人2块
9 % 4 # 剩下1块
有读者问:那“9块饼干分给4个人”如果写成 9 / 4 得到2.25,到底错在哪?错在结果含义变了——2.25块不是人能切的整数。所以分东西的题,第一反应就该是 // 和 %。
这道题恰好能检验你懂没懂:
如果小明带了689元,小华带的钱是“去掉小明金额的十位”那么多,所以小华带了69元。输入任意三位数x,输出小华的钱。
这题就是在考“怎么去掉十位”。答案不是字符串切片,而是用整除和取余:
x = 689
个位 = x % 10 # 9
百位 = x // 100 # 6
小华的钱 = 百位 * 10 + 个位 # 69
思路拆开:% 10 拿到个位,// 100 丢掉后两位拿到百位。你甚至可以更暴力:先 // 10 把十位丢掉(变成68),再去掉个位 % 10?不对,那样得到8。所以要小心。正确做法是同时保留百位和个位,再拼起来。这个“拆数字”的过程,就是算术运算符的经典应用。
幂运算 **:不只是数学,还能算游戏
2 ** 3 是8,这个很简单。但值得记住的是——Python里幂运算符是 **,不是 ^。^ 在Python里是按位异或,很多初学者在这里掉坑。下次你看别人写 2 ^ 3 以为是8,其实结果是1,别笑,那是二进制按位运算。
幂运算在生活中也有实际场景:边长为5的正方形面积是 5 ** 2,正方体体积是 5 ** 3。游戏里每次攻击翻倍,初始攻击力3,第4次攻击后的伤害就是 3 ** 4。这些都属于“自己乘自己若干次”,用 ** 比连写一串 * 清晰得多。
优先级:先乘除后加减,Python也一样
2 + 3 * 4 的结果是14,不是20。想先加就用括号:
(2 + 3) * 4 # 20
这道题的教训是:如果你不明确自己的意图,代码的优先级会替你做决定,而那个决定可能不是你要的。比如算总价:买3个5元的玩具和1个10元的书包,正确是 3 * 5 + 10 = 25。如果脑子一热写成 3 * (5 + 10),那就变成“买3套玩具+书包”,价格直接45元,完全变了味道。
还有一道买水果的题正好踩中这个点:
苹果8.5元/斤,鸭梨5.6元/斤,橙子6.2元/斤,输入三种水果的斤数x、y、z,输出总价,保留1位小数。
这就是一道典型的“先乘后加”题:
total = 8.5 * x + 5.6 * y + 6.2 * z
print(f"{total:.1f}")
注意输出保留1位小数,用 :.1f 格式化就行。这里没什么高深技巧,但优先级必须对:三个乘法先算完,再相加。如果你在算式里乱加括号,反而可能把逻辑弄乱。
新手最容易犯的4个错误
- 除以0:
10 / 0直接报错,Python不是神,它也不知道“无限大”怎么表示。 - 混淆
/和//:7 / 3是2.333...,7 // 3是2。分糖果你希望人均2.333块吗?不,你得用//。 - 忘掉优先级:
3 + 4 * 2是11,不是14。你脑子里的“先加后乘”是数学惯性,Python遵守的是运算规则。 - 浮点误差:
0.1 + 0.2不等于0.3,而是0.30000000000000004。二进制存小数天生有误差,涉及金额比较时,用round()或者其他技巧,别傻乎乎直接==。
一道题帮你理清 // 的细节
有的同学问:10 // 3 输出什么?答案不是3.333,也不是3.0,而是3。因为两个操作数都是整数,整数除法的结果也是整数。那什么时候结果带 .0?当操作数里有浮点数时,比如 10 // 3.0,结果是3.0。这个细节经常被忽略,但考试和面试都喜欢考。
同样的,2 ** 3 就是8,没毛病。注意 ** 优先级高于乘除,所以 2 * 3 ** 2 先算 3 ** 2,得到18。
完整示例:把今天学的都用起来
还是那句“5个饼干3元,剩下的买糖果”的老剧情,但代码里藏着所有符号:
总钱 = 20
饼干单价 = 3
糖果单价 = 1
饼干花费 = 饼干单价 * 5
剩余钱 = 总钱 - 饼干花费
糖果数 = 剩余钱 // 糖果单价
零头 = 剩余钱 % 糖果单价
print(饼干花费, 剩余钱, 糖果数, 零头)
输出结果:15,5,5,0。简单,但足够说明问题。
结尾
算术运算符是编程的“底层功夫”,每天都离不开。但真正重要的不是记住符号,而是建立一种感觉:遇到“分东西”想到 // 和 %,遇到“自己乘自己”想到 **,遇到“先乘后加”想到优先级。电脑不会替你做决策,它只是忠实地执行你的表达式——所以你要先想明白,再写代码。
进阶建议:把今天学的运算符和你自己的零花钱、游戏伤害、买水果都算一遍。再从“ input() 输入数字”开始,把这些运算做成互动小脚本——那才叫真的让电脑帮你算数。
关于作者
我是赵老师,持有 NOI 信息学奥赛教练证书,拥有 15 年以上的软件开发经验,从事信息学少儿编程教学已有 8 年时间。
这些年累计帮助 多名 学生通过编程特长升入自己心仪的目标学校。
如果你在编程学习上有任何疑问,欢迎联系我:18620372957(微信同号)