python3 水仙花數練習題


  近期在學習Python的過程中,有一道題:

題目:打印出所有的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數本身。例如:153是一個"水仙花數",因為153=1的三次方+5的三次方+3的三次方。

這是一道經典的for循環遍歷的題,其中涉及到幾個數學運算符,先來復習下:

運算符 描述 實例
+ 加 - 兩個對象相加 a + b 輸出結果 30
- 減 - 得到負數或是一個數減去另一個數 a - b 輸出結果 -10
* 乘 - 兩個數相乘或是返回一個被重復若干次的字符串 a * b 輸出結果 200
/ 除 - x除以y b / a 輸出結果 2
% 取模 - 返回除法的余數 b % a 輸出結果 0
** 冪 - 返回x的y次冪 a**b 為10的20次方, 輸出結果 100000000000000000000
// 取整除 - 返回商的整數部分 9//2 輸出結果 4 , 9.0//2.0 輸出結果 4.0

  然后就是怎么實現的問題了:

1 from math import floor
2 for i in range(100,1000):
3     H = floor(i/100)
4     T = (floor(i/10))%10
5     N = i%10
6     if i==H**3+T**3+N**3:
7         print(i,‘\t’,H**3,T**3,N**3)

執行結果為:

153   1 125 27
370    27 343 0
371    27 343 1
407   64 0 343

   但是查看別人寫的代碼發現,執行的結果為空,這是為何呢?是因為沒有導入math模塊嗎?

for n in range(100,1000):
    i=n/100
    j=n/10%10
    k=n%10
    if n==i**3+j**3+k**3:
        print(n)

  我們可以一步步來分析下,輸出為空。。。

在代碼中間輸出i的值執行看看結果

for n in range(100,1000):
    i=n/100
    j=n/10%10
    k=n%10
    print(i)
    if n==i**3+j**3+k**3:
        print(n)

執行查看就會發現i這個值是浮點數,所以后面的計算就會出錯,且不是我們需要的數值。那么怎么辦呢?python中除法取整有以下幾個方法:

內置函數round(),向上取整math.ceil(),向下取整math.floor(),如果你不想使用上訴幾個方法,你可以這樣:

for n in range(100,1000):
    i=int((n/100))
    j=int(n/10)%10
    k=n%10
    if n==i**3+j**3+k**3:
        print(n)

  這樣,就可以正確輸出了。。。

  bingo.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM