Python 的餘數運算徹底解說|從基礎到應用的使用方法

1. 介紹

Python 的「餘數」或「餘數運算」指的是執行除法後剩餘的數值。在程式設計中,餘數運算廣泛應用於判斷奇偶數、處理資料索引、時間格式轉換等多種用途。本文將從基礎到進階,詳細解說 Python 的餘數運算。

什麼是餘數?

「餘數」是指除法運算後未被包含在商中的部分。例如,將 10 除以 3,商為 3,餘數為 1。在 Python 中,我們可以使用「%」運算子來計算餘數。

2. 餘數運算的基礎

% 運算子的使用方法

在 Python 中,可以使用「%」運算子來執行餘數計算。例如,以下程式碼計算 10 除以 3 的餘數:

print(10 % 3)  # 結果為 1

這是一種忽略商數並僅獲取餘數的簡便方法。

判斷奇數與偶數

餘數運算最常見的應用之一是判斷奇數與偶數。當一個數除以 2 的餘數為 0,則為偶數;若餘數為 1,則為奇數。

num = 6
if num % 2 == 0:
    print(f"{num} 是偶數")
else:
    print(f"{num} 是奇數")

這段簡單的程式碼可以快速判斷一個數是奇數還是偶數。

3. 同時獲取商數與餘數的方法

使用 divmod() 函式

在 Python 中,可以使用 divmod() 函式來同時獲取商數與餘數。這個函式可以一次返回兩個計算結果,提高運算效率。

result = divmod(10, 3)
print(result)  # 結果為 (3, 1)

如上所示,divmod() 會以元組(tuple)的形式回傳商數與餘數,使程式碼更加簡潔。

4. 餘數運算的應用範例

循環索引處理

餘數運算在管理列表(list)或陣列(array)的索引時非常實用。例如,當索引超出範圍時,可以使用餘數運算來讓索引循環回到起始位置。

def get_element_with_cyclic_index(lst, index):
    return lst[index % len(lst)]

my_list = [10, 20, 30, 40]
print(get_element_with_cyclic_index(my_list, 5))  # 結果為 10

這樣,即使索引超出了列表的長度,也能安全地獲取對應的元素。

時間格式轉換

餘數運算在時間計算上也相當實用。例如,將秒數轉換為分鐘與秒時,可透過餘數運算來計算剩餘秒數。

time_in_seconds = 125
minutes = time_in_seconds // 60
seconds = time_in_seconds % 60
print(f"{minutes} 分 {seconds} 秒")  # 結果為 2 分 5 秒

這樣可以輕鬆將時間單位轉換為易讀的格式。

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

5. 負數與浮點數的餘數運算

負數的餘數運算

當使用負數進行餘數運算時,結果可能與預期不同。以下程式碼顯示 Python 處理負數餘數的方式:

result = -10 % 3
print(result)  # 結果為 2

從數學的角度來看,-10 除以 3 的餘數應該是 -1,然而在 Python 中,餘數始終為非負數。這與某些其他程式語言的行為不同,因此需要特別注意。

浮點數的餘數運算

當餘數運算與浮點數結合使用時,可能會出現計算誤差,因為浮點數是以近似值表示的。

result = 0.3 % 0.1
print(result)  # 結果為 0.09999999999999995

由於浮點數的精度限制,這類誤差是常見的。為了避免這種問題,可以考慮使用整數運算,或在比較時設定允許的誤差範圍。

6. 總結與實際應用

Python 的餘數運算不僅可以用來計算基本的除法餘數,還能應用於列表的循環索引、時間計算、資料分組等多種場景。特別是使用「%」運算子與 divmod() 函式,可以更有效地處理數據。

此外,在處理負數與浮點數時,需要注意 Python 的特定行為,以避免潛在的錯誤。透過靈活運用餘數運算,我們可以開發出更高效、更靈活的程式。