Python中取余运算使用百分号 %,其核心规则是:余数符号与除数一致。计算时先执行向下取整的除法(a // b),再通过公式 a % b = a - (a // b) * b 得到结果。例如 10 % 3 返回 1,而 -10 % 3 返回 2。此规则适用于整数和浮点数,但需避免除数为零,跟着小编一起详细了解下。
1. 取余符号
python1remainder = a % b # 计算a除以b的余数
2. 运算规则
Python的取余运算满足以下公式:
a % b = a - (a // b) * b
其中 // 是向下取整的除法(即结果向负无穷方向取整)。
关键特性:
结果符号与除数 b 一致
无论被除数 a 是正是负,余数的符号始终与 b 相同。
例如:
python1print(10 % 3) # 输出: 1 (10 ÷ 3 = 3余1)
2print(-10 % 3) # 输出: 2 (因为 -10 ÷ 3 = -4余2,符号与3一致)
3print(10 % -3) # 输出: -2 (10 ÷ -3 = -4余-2,符号与-3一致)
浮点数同样适用
python1print(10.5 % 3) # 输出: 1.5 (10.5 ÷ 3 = 3.5余1.5)
与 divmod() 函数的关系
divmod(a, b) 返回 (a // b, a % b) 的元组:
python1quotient, remainder = divmod(10, 3)
2print(quotient, remainder) # 输出: 3 1

3. 示例对比
表达式计算过程结果
10 % 310 - (10 // 3)*3 = 10 - 91
-10 % 3-10 - (-10 // 3)*3 = -10 - (-12)2
10 % -310 - (10 // -3)*-3 = 10 - (-9)-2
4. 应用场景
判断奇偶性
python1if num % 2 == 0:
2 print("偶数")
循环索引(如环形缓冲区)
python1index = current_index % buffer_size
时间转换(如秒数转时分秒)
python1seconds = 3665
2minutes = seconds // 60
3remaining_seconds = seconds % 60 # 输出: 5
5. 注意事项
除数 b 不能为0,否则会触发 ZeroDivisionError。
若需严格数学模运算(结果非负),可手动调整:
python1def math_mod(a, b):
2 return ((a % b) + b) % b
3print(math_mod(-10, 3)) # 输出: 2(始终非负)
python中的取余运算其实就是取模运算,通过理解 % 的运算规则,可以避免因符号问题导致的逻辑错误,尤其在处理负数或循环问题时。通过理解 % 的底层逻辑,可更灵活处理边界情况,避免常见陷阱。