例如,當輸入函數時,數字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中文網其他相關文章!