1. 程式人生 > >自學Python之心得體會(五)

自學Python之心得體會(五)

Python 練習例項13

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

程式分析:利用迴圈找到各個三位數的百分位數,十分位數和個分數,然後判斷各位數字立方和是否等於該數本身。

方法涉及知識點:

       str()函式:將數轉換為字串形式,可以單獨檢視三位數的個位,十位和百位,而不用利用取餘和除法計算。

       列表解析式:將for迴圈寫進列表裡,使得程式碼更加高效。

       pow(x,i):求冪函式,x為數,i為次方。

方法一:最基本的方法,利用迴圈,找到各個位數,然後判斷。

程式碼如下:

for i in range(100,1000):
    x=int(i/100)
    y=int(i%100/10)
    z=int(i%10)
    if i==x*x*x+y*y*y+z*z*z:
        print (i)

程式碼不夠簡潔。

方法二:利用str()函式求解。

程式碼如下:

for i in range(100,1000):
    s=str(i)
    if int(s[0])**3+int(s[1])**3+int(s[2])**3==i:
        print (i)

s[0]相當於取百分位數,s[1]相當於取十分位數,s[2]相當於取個分位數,程式碼簡潔。

方法三:利用列表解析式。

程式碼如下:

l=[x**3+y**3+z**3 for x in range(1,10)
   for y in range(0,10) for z in range(0,10) if(str(x)+str(y)+str(z))==str(x**3+y**3+z**3)]
print (l)

將for迴圈,判斷都放在列表[]中,輸出成一個列表形式。