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