自學Python之心得體會(五)
阿新 • • 發佈:2018-12-18
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迴圈,判斷都放在列表[]中,輸出成一個列表形式。