水仙花數指一個三位數,其各位數字立方和等於該數本身。例如,153就是一個水仙花數,因為1^3 + 5^3 + 3^3 = 153。Python可以通過簡單的代碼實現輸出指定範圍內所有的水仙花數,並且可以通過代碼進行優化來提高效率。下面從多個方面進行詳細的闡述。
一、Python輸出1000以內的水仙花代碼示例
for num in range(100, 1000): sum = 0 temp = num while temp: sum += (temp % 10) ** 3 temp //= 10 if num == sum: print(num)
上述代碼使用了for循環和while循環來計算100到999之間的所有三位數的水仙花數,並輸出結果。其中,sum變數用於存儲立方和,temp變數用於暫存當前三位數。代碼中使用了//=運算符,用於執行地板除法並對結果向下取整。通過運行上述代碼,可以得到100到999之間的所有水仙花數,分別為153、370、371、407。
二、代碼優化
上述代碼雖然可以輸出1000以內的水仙花數,但是在計算的過程中,有一些沒有必要的計算,可以通過代碼優化來減少不必要的計算並提高效率。
for i in range(1, 10): for j in range(0, 10): for k in range(0, 10): n = i * 100 + j * 10 + k if n == i ** 3 + j ** 3 + k ** 3: print(n)
上述代碼是對之前代碼的優化,使用三個for循環直接計算三位數的水仙花數。此時,n變數無需判斷是否等於sum變數,可以直接計算每個三位數,並判斷其是否為水仙花數。通過運行上述代碼,可以得到1000以內的所有水仙花數。
三、其他方面
除了使用for循環和while循環來計算水仙花數,還可以通過遞歸函數來計算水仙花數。此外,還可以使用列表推導式來輸出1000以內的水仙花數,如下所示:
print([i for i in range(100, 1000) if sum(map(lambda x: int(x) ** 3, str(i))) == i])
上述代碼使用了lambda表達式和map函數,將三位數每個數字通過lambda函數計算出其立方和,並通過sum函數將其相加,最後判斷是否等於原數。如果相等,將其加入到列表中並輸出。使用列表推導式可以在一行代碼內實現輸出1000以內的水仙花數。
原創文章,作者:AWIZU,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/374066.html