2020年9月14日星期一

[課後作業] 第017講:函數- Python的樂高積木|課後測試題及答案

[課後作業] 第017講:函數- Python的樂高積木|課後測試題及答案 




《零基礎入門學習Python》視頻下載地址:傳送門
   
測試題:
      
0.你有聽說過DRY嗎?
      
1.都是重複一段代碼,為什麼我要使用函數(而不使用簡單的拷貝黏貼)呢?
     
2.函數可以有多個參數嗎?
     
3.創建函數使用什麼關鍵字,要注意什麼?
     
4.請問這個函數有多少個參數?

  1. def MyFun((x, y), (a, b)):
  2.     return x * y - a * b
複製代碼

5. 請問調用以下這個函數會打印什麼內容?
  1. >>> def hello():
  2.         print('Hello World!')
  3.         return
  4.         print('Welcome To FishC.com!')
複製代碼


動動手:
     
0.編寫一個函數power()模擬內建函數pow(),即power(x, y)為計算並返回x的y次冪的值。
     
   
1.編寫一個函數,利用歐幾里得算法(腦補鏈接)求最大公約數,例如gcd(x, y)返回值為參數x和參數y的最大公約數。
   
   
2.編寫一個將十進制轉換為二進制的函數,要求採用“除2取餘”(腦補鏈接)的方式,結果與調用bin()一樣返回字符串形式。
     
      
3.請寫下這一節課你學習到的內容:格式不限,回憶並複述是加強記憶的好方式!

     

回复您的答案即可查看參考答案!      

測試題答案:
     

本帖隱藏的內容

0.你有聽說過DRY嗎?
      
DRY是程序員們公認的指導原則:Don't Repeat Yourself.
快快武裝你的思維吧,拿起函數,不要再去重複拷貝一段代碼了!
   
   
1.都是重複一段代碼,為什麼我要使用函數(而不使用簡單的拷貝黏貼)呢?
     
使用函數:
0)可以降低代碼量(調用函數只需要一行,而拷貝黏貼需要N倍代碼)
1)可以降低維護成本(函數只需修改def部分內容,而拷貝黏貼則需要每一處出現的地方都作修改)
2)使序更容易閱讀(沒有人會希望看到一個程序重複一萬行“I love FishC.com”)

2.函數可以有多個參數嗎?
      
可以的,理論上你想要有多少個就可以有多少個,只不過如果函數的參數過多,在調用的時候出錯的機率就會大大提高,因而寫這個函數的程序員也會被相應的問候祖宗,所以,盡量精簡吧,在Python的世界裡,精簡才是王道!
     
     
3.創建函數使用什麼關鍵字,要注意什麼?
   
使用“def”關鍵字,要注意函數名後邊要加上小括號“()”,然後小括號後邊是冒號“:”,然後縮進部分均屬於函數體的內容,例如:
  1. def MyFun():
  2.     # 我是函數體
  3.     # 我也是函數體
  4.     # 我們都屬於函數MyFun()

  5. # 噢,我不屬於MyFun()函數的了
複製代碼


4. 請問這個函數有多少個參數?
  1. def MyFun((x, y), (a, b)):
  2.     return x * y - a * b
複製代碼

如果你回答兩個,那麼恭喜你錯啦,答案是0,因為類似於這樣的寫法是錯誤的!
我們分析下,函數的參數需要的是變量,而這裡你試圖用“元祖”的形式來傳遞是不可行的。
     
我想你如果這麼寫,你應該是要表達這麼個意思:
  1. >>> def MyFun(x, y):
  2.         return x[0] * x[1] - y[0] * y[1]

  3. >>> MyFun((3, 4), (1, 2))
  4. 10
複製代碼


5. 請問調用以下這個函數會打印什麼內容?
  1. >>> def hello():
  2.         print('Hello World!')
  3.         return
  4.         print('Welcome To FishC.com!')
複製代碼

會打印:
  1. >>> hello()
  2. Hello World!
複製代碼

因為當Python執行到return語句的時候,Python認為函數到此結束,需要返回了(儘管沒有任何返回值)。

   
         
動動手答案:
   

本帖隱藏的內容

0. 編寫一個函數power()模擬內建函數pow(),即power(x, y)為計算並返回x的y次冪的值。
  1. def power(x, y):
  2.     result = 1
  3.    
  4.     for i in range(y):
  5.         result *= x

  6.     return result

  7. print(power(2, 3))
複製代碼


1.編寫一個函數,利用歐幾里得算法(腦補鏈接)求最大公約數,例如gcd(x, y)返回值為參數x和參數y的最大公約數。
  1. def gcd(x, y):
  2.     while y:
  3.         t = x % y
  4.         x = y
  5.         y = t

  6.     return x
  7.    
  8. print(gcd(4, 6))
複製代碼


2.編寫一個將十進制轉換為二進制的函數,要求採用“除2取餘”(腦補鏈接)的方式,結果與調用bin()一樣返回字符串形式。
  1. def Dec2Bin(dec):
  2.     temp = []
  3.     result = ''
  4.    
  5.     while dec:
  6.         quo = dec % 2
  7.         dec = dec // 2
  8.         temp.append(quo)

  9.     while temp:
  10.         result += str(temp.pop())
  11.    
  12.     return result

  13. print(Dec2Bin(62))
複製代碼


3.請寫下這一節課你學習到的內容:格式不限,回憶並複述是加強記憶的好方式!


小甲魚希望你認真對待作業就像你希望小甲魚推出高質量視頻一樣渴望^_^
(1)函數的參數
函數的參數可以是0個,1個或多個,定義時在括號內用逗號隔開,可以對某些參數進行初始值定義,定義了初始值的參數必須放在括號裡的前面的位置,也就是說,沒有定義初始值的參數要放在定義了初始值的參數的後面。
在編程中出現non-default parameter follows default parameter這種錯誤原因是將沒有默認值的參數在定義時放在了有默認值的參數的後面,如下所示:
  1. def test(self,a=1,b):
  2. self.a=a
  3. self.b=b
  4. >>SyntaxError: non-default argument follows default argument
調換以上定義參數的順序即可解決此問題:
  1. def test(self,b,a=1):
  2. self.a=a
  3. self.b=b
  4. >>Process finished with exit code 0
(2)函數的返回值
關鍵字:return

0 留言:

發佈留言