Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Hàm divmod() trong Python: Thương và dư cùng lúc

divmod(a, b) trả về tuple (quotient, remainder) từ phép chia a // b và a % b. Hiệu quả hơn tính riêng biệt.

Cú pháp

divmod(a, b)  # a, b: int hoặc float

Ví dụ cơ bản

print(divmod(5, 2))      # (2, 1)
print(divmod(25, 5))     # (5, 0)
print(divmod(5.6, 2))    # (2.0, 1.6)
print(divmod(11.3, 9.2)) # (1.0, 2.1000000000000014)

Trường hợp đặc biệt: Chia cho 0

print(divmod(0, 8))   # (0, 0)
print(divmod(8, 0))   # ZeroDivisionError

Ứng dụng 1: Kiểm tra chia hết

m, n = 12, 4
quotient, remainder = divmod(m, n)
if remainder == 0:
    print(f"{m} chia hết cho {n}, thương = {quotient}")
else:
    print(f"{m} KHÔNG chia hết cho {n}")

Kết quả

12 chia hết cho 4, thương = 3

Ứng dụng 2: Kiểm tra số nguyên tố

Số nguyên tố chỉ có 2 ước: 1 và chính nó. Dùng divmod đếm số dư = 0.

def is_prime_divmod(n):
    if n < 2:
        return False
    zero_remainder_count = 0
    for a in range(1, n + 1):
        _, r = divmod(n, a)
        if r == 0:
            zero_remainder_count += 1
    return zero_remainder_count == 2

print(is_prime_divmod(11))  # True
print(is_prime_divmod(12))  # False

Ứng dụng 3: Chuyển đổi cơ số / thời gian

# Giây → Phút:Giây
total_seconds = 125
minutes, seconds = divmod(total_seconds, 60)
print(f"{minutes}:{seconds:02d}")  # 2:05

# Cơ số 10 → Cơ số 2 (binary)
def to_binary(n):
    if n == 0: return "0"
    bits = []
    while n > 0:
        n, r = divmod(n, 2)
        bits.append(str(r))
    return ''.join(reversed(bits))

print(to_binary(13))  # 1101

Tại sao dùng divmod()?

  • Hiệu năng: 1 phép chia hardware cho cả thương và dư
  • Code ngắn gọn, rõ ý đồ
  • Atomic: tránh race condition trong multi-thread (hiếm gặp)