」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 邏輯和程式設計練習(解決方案):方法和最佳化

邏輯和程式設計練習(解決方案):方法和最佳化

發佈於2024-08-22
瀏覽:400

Ejercicios de logica y programacion (oluciones): Enfoques y Optimización

有鑑於此練習:(來自 codewars.com)

建立一個傳回數字每位數字的平方的函數。

例如,輸入函數時,數字702應傳回4904,因為7的平方是49,0的平方是0 2 的平方是4。如果函數接收到零,則必須傳回 0。

本練習的根本挑戰是逐位遍歷整數並以另一個整數形式傳回結果。

就像程式設計中的所有事情一樣,可以透過多種方式解決這個練習。首先,讓我們使用Python中的數字操作屬性來解決它,然後我將解釋另一種更高級的方法? .

def square_digits(num):
    if num == 0:
        return 0
    result = ""
    while num > 0:
        num_sqr = (num % 10) ** 2 
        num = num // 10
        result = str(num_sqr)   result 
    return int(result)

在此程式碼中,我們首先評估是否接收到 0 以傳回 0,如語句中所示。然後,我們將變數 result 初始化為空字串,建立一個條件 num > 0 的 while 迴圈。我們定義變數 num_sqr,它是收到的每個數字的平方。使用 num % 10,我們獲得收到的數字的最後一位數字,然後將其與 **2 平方。

  • 使用 num % 10 是提取數字最後一位數字的常用方法。

  • 表達式 num = num // 10 刪除數字的最後一位數字,向前移動到每個數字。

解決該問題的另一種方法是將數字轉換為字串,並使用 for 循環遍歷該字串:

def square_digits(num):
    result = ""
    for digit in str(num):
        result  = str(int(digit)**2)
    return int(result)

這段程式碼更優化,行數更少,遍歷也很好理解,不需要評估是否收到 0。在 Python 中,可以使用 for 迴圈逐個字元地遍歷字串。我們使用此功能循環接收到的數字,並使用 str(num) 將其轉換為字串。我們將變數 result 創建為一個空字串,其中將連接一個字符,該字符是數字轉換為整數並提高到 2 的結果,全部轉換為字串。然後,我們回傳轉換為整數的結果。

  • 對於非常大的數字,在循環內連接字串可能效能效率較低,但對於大多數用例來說是完全可以接受的。

*更高級和“優雅”的方式*是使用生成器理解和.join motodo。我首先向您展示程式碼,然後我們將對其進行分解並解釋這些術語。

def square_digits(num):
    return int(''.join(str(int(digit)**2) for digit in str(num)))

如果您不了解這些概念,第一個程式碼的可讀性就不是很好
組成它。

str(num) 中的 digital 的表達式 str(int(digit)**2) 是一個 _generator _(Generator Expression),它迭代數字 num 的字串表示形式中的每個數字。
對於每個數字,它將其轉換為整數 (int(digit)),對其平方 (**2),然後將其轉換回字串 (str(...))。然後,使用 ''.join(...) 取得一個序列(在本例中為生成器)並將所有元素連接成一個字串。這裡,所有的平方數字被組合成一個沒有任何分隔符號的字串(因為單引號之間的字串是空'')。

如我們所見,解決練習的不同方法展示了語言的知識水平。如果通過測試,所有解決方案都是正確的,但有些解決方案比其他解決方案更有效率且更具可讀性。方法的選擇取決於具體情況以及每種情況的優先順序:

  • 可讀性:當其他開發人員要閱讀和維護您的程式碼時,這一點至關重要。清晰、易於理解的程式碼可以減少出錯的可能性並使其更易於維護。 ?

  • 效率:在處理大量資料或在效能至關重要的應用程式中很重要。更優化的程式碼可以在速度和資源消耗方面產生很大的差異。 ?

  • 簡單:適用於優先考慮快速直接解決問題的情況,例如在原型或教學練習中。簡單性通常使程式碼調試和測試變得更容易。 ?

在開發時,重要的是在這些考慮因素之間找到平衡,使解決方案適應專案或任務的特定需求。

版本聲明 本文轉載於:https://dev.to/jpinodev/ejercicios-de-logica-y-programacion-enfoques-y-optimizacion-aka?1如有侵犯,請洽[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3