运算符、比较与条件
本页介绍用来组合数值的符号和词语:算术运算、运算的先后顺序、回答 true 或 false 的比较,以及逻辑运算符和位运算符。如果某一行算出的数字和你预想的不一样,或者你想让笔记帮你检查某件事(比如是否还在预算之内),就来这里看看。
算术运算
| 运算符 | 写法 | 示例 | 结果 |
|---|---|---|---|
| 加 | +、plus |
£12.50 + £4.30 |
£16.80 |
| 减 | -、−、minus |
£20 - £4.50 |
£15.50 |
| 乘 | *、×、times、multiplied by、省略乘号 |
3 × £4.50、2(3 + 4) |
£13.50、14 |
| 除 | /、÷、divided by |
£60 / 4 |
£15.00 |
| 乘方 | ^、**、to the power of、raised to、exponent |
2 ** 3、2 raised to 10 |
8、1,024 |
| 取余 | mod、%(位于两个数字之间) |
50 mod 6、50 % 6 |
2 |
| 平方根 | √、sqrt(...)、square root of |
√144 |
12 |
| 平方 / 立方 | ²、³ |
3³ |
27 |
| 阶乘 | !、factorial(...) |
5!、factorial(5) |
120 |
算术运算适用于普通数字、金额和带单位的数量,答案会保留货币或单位:
£12.50 + £4.30 结果为 £16.803 * £4.50 结果为 £13.50£1,000 * 1.05^3 结果为 £1,157.636 times 7 结果为 42100 minus 37.5 结果为 62.5省略乘号是指不写 *,例如 2(3 + 4) 或 2π。隐式乘法一节说明了这种写法什么时候有效、什么时候无效。
运算顺序
计算遵循学校数学课上学过的常规顺序:
- 括号。
- 阶乘,例如
5!。 - 乘方,从右往左计算:
2^3^2就是2^9,即 512。 - 开头的负号,在乘方之后计算:
-2^2是 -4,而(-2)^2是 4。 - 乘法、除法和
mod,从左往右计算。 - 加法和减法,从左往右计算。
省略 * 不会改变这个顺序,所以 2x^2 会先求 x 的平方再乘以 2,和课本上的公式一样。
也就是说,乘法会先于旁边的加减法计算。算账时,这一点很容易让人出错:
£85 - £12.50 * 2 结果为 £60.00(£85 - £12.50) * 2 结果为 £145.00£120 / 4 / 2 结果为 £15.00拿不准的时候就加上括号。括号不会有任何坏处,还能让笔记日后读起来更清楚。
根号只作用于紧跟在它后面的值,所以 √9 + 16 是 19。要对一个和开平方,请把整个表达式放进括号:
√(9 + 16) 结果为 5余数
mod 给出除法之后剩下的部分,适合用来分组:
鸡蛋 = 50鸡蛋 mod 6 结果为 2floor(鸡蛋 / 6) 结果为 8五十个鸡蛋可以装满八盒(每盒六个),还剩两个。
位于两个数字之间的 % 也表示取余,即使第二个数字前面没有空格也一样:50 % 6 和 50% 6 的结果都是 2。% 后面什么都没有时表示百分比(50%),详见百分比。
阶乘
在数字、名称或右括号后面紧跟 !,即可求阶乘:
5! 结果为 120跑者 = 4跑者! 结果为 243! + 2 结果为 85!=4 结果为 true阶乘先于旁边的乘方计算,所以 2^3! 是 2⁶,即 64。如最后一行所示,! 后面紧跟 = 时仍表示“不等于”。factorial(5) 与 5! 的结果相同。
比较
==、!=、<、<=、> 和 >= 用来比较两个值,并回答 true 或 false。它们适用于普通数字、同一货币的金额,以及衡量同一种量的数量,即使单位不同也可以:
预算 = £400已花费 = £365已花费 <= 预算 结果为 true已花费 == 预算 结果为 false已花费 != 预算 结果为 true5 km == 5,000 m 结果为 true90 min >= 1.5 hours 结果为 true2 kg < 2,500 g 结果为 true比较之前会先换算单位,所以 1 mile > 1.5 km 是 true。比较衡量不同量的值(例如千克和米)会得到 incompatible units 错误。
比较不支持的写法
- 连续比较:不支持
5 < x < 10。请改为组合两个比较:5 < x && x < 10。 - Unicode 符号:无法识别
≠、≤和≥。请使用!=、<=和>=。 - 日期:不能用
<或>比较两个日期。请把它们相减,再将差值与一段时长比较:
截止日期 = 30 September 2026预订日期 = 14 September 2026截止日期 - 预订日期 结果为 2 weeks 2 days截止日期 - 预订日期 >= 7 days 结果为 true逻辑运算符
用 &&(两者都必须为真)或 ||(至少一个为真)连接比较。在两个比较之间,单词 and 和 or 的作用相同。
距离 = 5 km用时 = 27 min距离 >= 5 km && 用时 < 30 min 结果为 true距离 >= 10 km || 用时 < 25 min 结果为 false距离 >= 10 km or 用时 < 30 min 结果为 truetrue 和 false 可以直接书写,并用 && 和 || 组合:
true || false 结果为 truetrue && false 结果为 false有些你可能以为可行的写法并不支持:
and和or只能用在比较之间。true and false无效,请写成true && false。- 没有取反运算符:
not true和!true都无效。请改为与false比较,例如(已花费 > 预算) == false。 or不能作为出错时的备用值:1/0 or 5不会得到 5。
在条件中使用比较
比较最有用的地方是 if … then … else …,它会根据比较结果选出一个值:
购物篮 = £34.50if 购物篮 >= £40 then £0 else £3.99 结果为 £3.99条件一节介绍了完整的语法,包括 else if、后置 if 和 unless,以及在分支中赋值。
位运算符
整数支持位运算符 &(与)、|(或)、xor、<<(左移)和 >>(右移)。大写单词 AND、OR 和 XOR 也可以使用。这些运算符主要用于编程相关的任务,例如颜色值和文件权限。
12 & 10 结果为 812 | 10 结果为 1412 xor 10 结果为 612 AND 10 结果为 81 << 10 结果为 1,0241024 >> 3 结果为 128答案显示为普通数字。加上 to binary、in hex 或 to octal,即可用你正在使用的进制查看:
0o644 | 0o111 to octal 结果为 0o755颜色 = 0xFF8800(颜色 >> 8) & 0xFF 结果为 136移位先于 &、| 和 xor 计算,但加上括号能让颜色示例这样的行更容易看懂。
综合运用
下面是一份每月预算检查,同时用到了算术、比较和逻辑:
# 九月预算到手收入 = CNY 12,000房租 = CNY 4,500水电网费 = CNY 800买菜 = 4 * CNY 450 结果为 1,800.00 CNY结余 = 到手收入 - 房租 - 水电网费 - 买菜 结果为 4,900.00 CNY房租 / 到手收入 as % 结果为 37.5%结余 > CNY 3,000 结果为 true结余 > CNY 3,000 && 房租 <= 到手收入 * 45% 结果为 true买菜 先做乘法,再参与其他加减运算;结余 则从左往右依次相减。最后两行把笔记变成了一项检查:只要结余超过 CNY 3,000,并且房租不超过到手收入的 45%,答案就保持为 true;其中任何一个条件不再满足,答案就会立刻变成 false。