Python divmod() 函数

Python divmod() 语法

divmod() 是 Python 的一个内置函数,它用于将两个数字相除,然后以元组的方式返回这两个数的 “商” 和 “余数”。

其中,divmod 是 “division” 和 “modulus” 的缩写。

语法:

divmod(a, b)

说明:

divmod() 函数接收 2 个参数,这两个参数必须是数字(整数或浮点数)。其中 a 作为分子,b 作为分母。

当参数都是整数时,返回 (int, int) 元组。当至少有一个参数为浮点数时,返回 (float, float) 元组。

divmod(a, b) 的结果等价于 (a // b, a % b)。

注意:

  • divmod() 函数不能用于处理复数,否则会抛出 TypeError 异常。
  • 当除数为 0 时,divmod() 会抛出 ZeroDivisionError 异常。
  • 若 divmod() 参数为浮点数,余数可能存在浮点精度误差。

Python divmod() 摘要

使用频率
官方文档 查看
相关函数 abs()round()pow()

Python divmod() 示例

接下来,我们通过几个简单的例子来讲解一下 Python divmod() 函数是如何使用的。

示例 1:divmod() 参数是 “整数”

print(divmod(9,4))      # (2, 1)
print(divmod(4,9))      # (0, 4)
print(divmod(6,6))      # (1, 0)
print(divmod(-9,4))     # (-3, 3)
print(divmod(9,-4))     # (-3, -3)

运行结果如下。

(2, 1)
(0, 4)
(1, 0)
(-3, 3)
(-3, -3)

分析:

对于 divmod(9, 4) 来说,9 除以 4 的商为 2,余数为 1,因此返回的是 (2, 1)。同理地,小伙伴们可以自行推断一下 divmod(4, 9) 和 divmod(6, 6)。

对于 divmod(-9, 4) 来说,商为 -3(向下取整),余数 3(符号与除数一致)。

对于 divmod(9, -4) 来说,余数 -3(符号与除数一致),满足 9 = (-4)*(-3) + (-3)。

示例 2:divmod() 参数是浮点数

print(divmod(9.0, 4))
print(divmod(4, 9.0))
print(divmod(7.5, 2.5))
print(divmod(7.5, 2.1))

运行结果如下。

(2.0, 1.0)
(0.0, 4.0)
(3.0, 0.0)
(3.0, 1.1999999999999997)

分析:

对于 divmod() 函数来说,只要有一个参数是浮点数,那么它的商和余数都是浮点数。

示例 3:divmod() 参数是非数字

result = divmod('lvye', 'Python')
print(result)

运行结果如下。

(报错)TypeError: unsupported operand type(s) for divmod(): 'str' and 'str'

分析:

如果 divmod() 函数的参数包含了非数字,那么 Python 就会报错,抛出 TypeError 异常。

示例 4:divmod() 除数为 0

result = divmod(666, 0)
print(result)

运行结果如下。

(报错)ZeroDivisionError: integer division or modulo by zero

分析:

如果除数为 0,那么 divmod() 函数会抛出 ZeroDivisionError 异常。因此在使用 divmod() 函数时,要确保除数不为 0。

示例 5:divmod() 与运算符对比

a, b = 9, 4
q, r = divmod(a, b)
print(q == a // b and r == a % b)

运行结果如下。

True

分析:

divmod(a, b)  等价于  (a // b, a % b),但计算效率更高。这是因为相比分别计算 // 和 %,divmod() 只需一次除法运算,在处理大数时性能更高。

Python divmod() 实际应用

最后,我们通过一个简单例子来看看 divmod() 函数是如何实现时间转换的。

示例 6:divmod() 实现时间转换

total_seconds = 3670
minutes, seconds = divmod(total_seconds, 60)
hours, minutes = divmod(minutes, 60)
print(f'{hours}h {minutes}m {seconds}s')

运行结果如下。

1h 1m 10s

分析:

这段代码的功能是将总秒数转换为小时、分钟和秒。其中,divmod() 函数分别用于计算分钟和秒、小时和分钟的对应值,最后以  “1h 1m 10s”  的格式输出结果。

上一篇: pow()

下一篇: max()

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号