Python程式:無需第三變數交換兩個數字


在程式設計中,交換兩個變數的值是一個常見的操作。通常,交換操作是使用第三個變數來臨時儲存其中一個值來完成的。然而,在某些情況下,我們可能希望在不使用額外變數的情況下交換兩個數字。這在記憶體最佳化至關重要或在受限環境中工作時特別有用。

在本文中,我們將探討一個Python程式,它允許我們在不使用第三個變數的情況下交換兩個數字。我們將討論使用臨時變數進行交換的傳統方法,並介紹一種採用按位異或運算的替代方法。此技術提供了一種高效且簡潔的方法來交換兩個變數的值,而無需額外的儲存空間。

理解問題

在深入瞭解解決方案之前,讓我們花點時間來理解在不使用第三個變數的情況下交換兩個數字的問題。

交換兩個數字的傳統方法涉及使用第三個變數作為臨時儲存位置。步驟通常包括:

  • 將第一個數字的值賦給臨時變數。

  • 將第二個數字的值賦給第一個數字。

  • 將臨時變數的值賦給第二個數字。

雖然此方法簡單易懂且被廣泛使用,但它需要一個額外的變數,這在某些情況下可能不理想。

在本文中,我們將探索一種利用按位異或(異或)運算在不使用第三個變數的情況下交換兩個數字的值的替代方法。此技術提供了一種優雅的解決方案,並消除了對額外儲存的需求。

接下來,讓我們瞭解一下能夠讓我們在沒有第三個變數的情況下實現此交換的方法和演算法。

方法和演算法

我們將用於在不使用第三個變數的情況下交換兩個數字的方法基於按位異或(異或)運算。異或是一種二元運算,如果兩個運算元的對應位不同,則返回1;如果相同,則返回0。

使用異或在不使用第三個變數的情況下交換兩個數字的演算法如下:

  • 取兩個數字,我們稱之為a和b。

  • 將a與b異或,並將結果儲存回a。此操作有效地合併了a和b的位,而不會丟失任何資訊。

  • 將更新後的a的值與b異或,並將結果儲存回b。此異或運算將消除a和b之間的公共位,只留下a的原始值在b中。

  • 將更新後的a的值與b異或,並將結果儲存回a。此最終異或運算將消除b中a的原始值,只留下b的原始值在a中。

透過執行這些異或運算,a和b的值將在無需第三個變數的情況下交換。

此方法有效是因為異或是一種按位運算,它操縱單個位。它允許我們原位執行交換操作,直接修改a和b的記憶體位置。

示例

現在我們已經討論了方法和演算法,讓我們看看如何在Python中實現不使用第三個變數交換兩個數字的操作。

# Swapping two numbers without using a third variable
def swap_numbers(a, b):
    print("Before swapping: a =", a, "b =", b)
  
    # Performing the XOR operations to swap the values
    a = a ^ b
    b = a ^ b
    a = a ^ b
  
    print("After swapping: a =", a, "b =", b)

# Testing the function
a = 10
b = 5
swap_numbers(a, b)

程式碼首先定義了swap_numbers函式,該函式接受兩個引數a和b。在函式內部,我們首先使用print函式和字串格式化在交換操作之前列印a和b的值。

接下來,我們使用異或運算執行a和b的交換。異或運算a = a ^ b組合了a和b的位,而不會丟失任何資訊。然後,異或運算b = a ^ b消除了a和b之間的公共位,有效地將a的原始值儲存在b中。最後,異或運算a = a ^ b消除了b中a的原始值,只留下b的原始值在a中。

執行交換操作後,我們使用print函式和字串格式化列印a和b的更新值。

透過利用異或運算,程式碼有效地交換了a和b的值,而無需使用第三個變數。此方法允許高效且簡潔的交換機制。

然後使用a和b的初始值呼叫swap numbers函式來測試交換功能。函式呼叫的輸出將顯示,展示了交換操作前後a和b的值。

輸出

執行程式碼時,您將看到輸出顯示交換操作前後a和b的值。

Before swapping: a = 10 b = 5
After swapping: a = 5 b = 10

結論

在本文中,我們探討了Python程式,該程式用於在不使用第三個變數的情況下交換兩個數字。我們討論了異或運算的概念以及如何利用它們來有效地執行交換。

更新於: 2023年8月10日

500 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

立即開始
廣告