課程
/后端開發(fā)
/Python
/Python3 進階教程(新版)
int()是把參數(shù)變成整型 那is_sqrt中x=1 x=2的值是一樣的,那么在filter中為什么不會輸出兩個1呢
2020-12-12
源自:Python3 進階教程(新版) 8-5
正在回答
因為本題的條件是開平方后的數(shù)是整數(shù),定義條件時is_sqrt()時用相反的方向去推導(dǎo):
def? is_sqrt(x):? ? ? ? ? ? ? ? ? ? ? #輸入一個數(shù)x,求他的平方根
? ?r = int(math.sqrt(x))? ? ? ? ?# 先把這個數(shù)開平方根后取整
? return r * r == x? ? ? ? ? ? ? ? # 如果開平方根后取整的數(shù)的平方等于原來這個數(shù)x,就可以證明x開平方后是一個整數(shù)
也就是說,第一步is_sqrt最終輸出的是一個條件,即開平方后的數(shù)是整數(shù)
然后第二步,去判斷某個范圍里面符合這個條件的值
for i in filter( is_sqrt, range(1,101)):? ? ? # 判斷1-100范圍內(nèi)符合這個條件的數(shù)
? ? ? print(i)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# 把符合條件的數(shù)打印出來
這一步就是去判斷每個數(shù)是否符合開方取整的數(shù)乘以自己等于原來的數(shù):
當(dāng)x = 1 時,x開方仍然等于1,取整數(shù)仍然等于1,顯然 1*1=1,是符合條件的
當(dāng)x = 2 時,x開方等于1.41.....,取整數(shù)等于1 ,顯然1*1 不等于2,所以不符合條件,因此不會輸出2
關(guān)鍵在于邏輯判斷語句:?【return?r?*?r?==?x】 當(dāng)x=1?時,【return?r?*?r?==?x】?-->?True 當(dāng)x=2?時,【return?r?*?r?==?x】?-->?False 然后filter是根據(jù)True/False來過濾的。
舉報
學(xué)習(xí)函數(shù)式、模塊和面向?qū)ο缶幊?,掌握Python高級程序設(shè)計
1 回答為什么不輸出pyhton?
1 回答為什么我用了str()函數(shù),print出來的數(shù)據(jù)類型也沒有改變呢?
1 回答沒有引用類中的who()函數(shù),為什么可以打印出who()函數(shù)中的內(nèi)容
2 回答為什么我在geany中輸入的代碼打不開同目錄的圖片?
4 回答init和set內(nèi)容重復(fù)
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2022-03-30
因為本題的條件是開平方后的數(shù)是整數(shù),定義條件時is_sqrt()時用相反的方向去推導(dǎo):
def? is_sqrt(x):? ? ? ? ? ? ? ? ? ? ? #輸入一個數(shù)x,求他的平方根
? ?r = int(math.sqrt(x))? ? ? ? ?# 先把這個數(shù)開平方根后取整
? return r * r == x? ? ? ? ? ? ? ? # 如果開平方根后取整的數(shù)的平方等于原來這個數(shù)x,就可以證明x開平方后是一個整數(shù)
也就是說,第一步is_sqrt最終輸出的是一個條件,即開平方后的數(shù)是整數(shù)
然后第二步,去判斷某個范圍里面符合這個條件的值
for i in filter( is_sqrt, range(1,101)):? ? ? # 判斷1-100范圍內(nèi)符合這個條件的數(shù)
? ? ? print(i)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# 把符合條件的數(shù)打印出來
這一步就是去判斷每個數(shù)是否符合開方取整的數(shù)乘以自己等于原來的數(shù):
當(dāng)x = 1 時,x開方仍然等于1,取整數(shù)仍然等于1,顯然 1*1=1,是符合條件的
當(dāng)x = 2 時,x開方等于1.41.....,取整數(shù)等于1 ,顯然1*1 不等于2,所以不符合條件,因此不會輸出2
2020-12-24