iT邦幫忙

0

Python的內建函式 divmod()「商和餘數」

  • 分享至 

  • xImage
  •  

在 Python 中,divmod() 是一個內建函式,用來同時計算兩個數字的「商和餘數」。
它的結果會以一個二元組(tuple)的形式返回,分別表示「商」和「餘數」。

什麼是商?

「商」是數學中的術語,指的是在進行除法運算時,被除數(分子)被除數(分母)整除後的結果。商代表「完整分割」的次數或結果,例如,20 除以 5 的商是 4,因為 20 可以被 5 整除四次。

舉例
10÷2=5
10÷2=5,所以 10 除以 2 的商是 5,餘數是 0。

17÷3=5
17÷3=5(餘數 2),所以 17 除以 3 的商是 5,餘數是 2。

在 Python 中,商可以用兩種方式求得:

  • 使用 // 運算符:這是「整數除法」或「地板除」,只保留整數部分。
  • 使用 divmod() 函式,它會返回商和餘數的組合。
# 方法 1: 使用整數除法
quotient = 10 // 3
print(quotient)  # 輸出: 3

# 方法 2: 使用 divmod 函式
quotient, remainder = divmod(10, 3)
print(quotient)  # 輸出: 3
print(remainder)  # 輸出: 1

divmod(a, b) 返回 (a // b, a % b) 的結果,也就是 a 除以 b 的整數商和餘數。

# 假設 a = 10, b = 3
result = divmod(10, 3)
print(result)  # 輸出: (3, 1)

# 分別取得商和餘數
quotient, remainder = divmod(10, 3)
print("商:", quotient)  # 輸出: 商: 3
print("餘數:", remainder)  # 輸出: 餘數: 1

divmod() 使用情境

整除及餘數運算的便捷性:在需要同時得出整數商和餘數的情況下,divmod() 可以避免重複計算。
應用於貨幣、時間等計算:當需要計算小單位的數量和剩餘時數(如小時、分鐘的轉換)時非常實用。

  • 時間計算與格式化,應用場景: 網路伺服器響應時間計算、任務執行時間統計、影片播放進度顯示等。
def seconds_to_hms(seconds):
    h, m = divmod(seconds, 3600)
    m, s = divmod(m, 60)
    return h, m, s

total_seconds = 7265
hours, minutes, seconds = seconds_to_hms(total_seconds)
print(f"{hours}小時{minutes}分{seconds}秒")
  • 資料庫操作, 分頁查詢:Web應用程式中的數據展示。
def paginate_data(data, page, per_page):
    start = (page - 1) * per_page
    end = start + per_page
    return data[start:end]

# 假設資料總數為 100,每頁顯示 10 條資料,查詢第 3 頁
total_data = [i for i in range(100)]
#設定分頁參數
page = 3
per_page = 10
result = paginate_data(total_data, page, per_page)
print(result)

參數:
data: 要分頁的資料列表。
page: 要查詢的頁碼。
per_page: 每頁顯示的資料數量。

  • 運作方式:
    • 運計算起始索引 start: (page - 1) * per_page 這部分計算出當前頁的起始索引。例如,如果要查詢第 3 頁,每頁 10 條資料,那麼 start 就會是 20。
    • 計算結束索引 end: start + per_page 計算出當前頁的結束索引。
    • 返回分頁後的資料: data[start:end] 這部分會從 data 列表中切取從 start 到 end-1 的元素,並返回。

與普通運算對比

如果我們不使用 divmod(),計算整數商和餘數會需要進行兩次操作:

a = 10
b = 3
quotient = a // b
remainder = a % b
print((quotient, remainder))  # 輸出: (3, 1)

而 divmod() 更為簡潔,也會執行得更快,因為它僅進行一次運算。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言