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

王林
發布: 2024-08-21 06:09:10
原創
374 人瀏覽過

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,如語句中所示。然後,我們將結果變數初始化為空字串,建立一個條件為 num > 的 while 迴圈。 0.我們定義變數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) 中的數字的表達式 str(int(digit)**2) 是一個 _generator _(生成器表達式),它迭代數字 num 的字串表示形式中的每個數字。
對於每個數字,它將其轉換為整數 (int(digit)),對其進行平方 (**2),然後將其轉換回字串 (str(...))。然後,使用 ''.join(...) 取得一個序列(在本例中為生成器)並將所有元素連接成一個字串。這裡,所有的平方數字被組合成一個沒有任何分隔符號的字串(因為單引號之間的字串是空'')。

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

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

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

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

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

以上是邏輯和程式設計練習(解決方案):方法和最佳化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!