2020年9月15日星期二

[課後作業] 第018講:函數:靈活即強大|課後測試題及答案

[課後作業] 第018講:函數:靈活即強大|課後測試題及答案



《零基礎入門學習Python》視頻下載地址:傳送門
   
測試題:
      
0.請問以下哪個是形參哪個是實參?

  1. def MyFun(x):
  2.     return x ** 3

  3. y = 3
  4. print(MyFun(y))
複製代碼

1.函數文檔和直接用“#”為函數寫註釋有什麼不同?
     
2.使用關鍵字參數,可以有效避免什麼問題的出現呢?
     
3.使用help(print)查看print()這個BIF有哪些默認參數?分別起到什麼作用?
     
4.默認參數和關鍵字參數表面最大的區別是什麼?

                             
               
動動手:
     
0.編寫一個符合以下要求的函數:
   
    a)計算打印所有參數的和乘以基數(base=3)的結果
    b)如果參數中最後一個參數為(base=5),則設定基數為5,基數不參與求和計算。
     
   
1.尋找水仙花數
   
題目要求:如果一個3位數等於其各位數字的立方和,則稱這個數為水仙花數。例如153 = 1^3+5^3+3^3,因此153是一個水仙花數。編寫一個程序,找出所有的水仙花數。
   
      
2.編寫一個函數findstr(),該函數統計一個長度為2的子字符串在另一個字符串中出現的次數。例如:假定輸入的字符串為“You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.”,子字符串為“im”,函數執行後打印“子字母串在目標字符串中共出現3次”。
     
程序執行效果:


   
3.請寫下這一節課你學習到的內容:格式不限,回憶並複述是加強記憶的好方式!
     
回复您的答案即可查看參考答案!

      
測試題答案:
     

本帖隱藏的內容

0. 請問以下哪個是形參哪個是實參?
  1. def MyFun(x):
  2.     return x ** 3

  3. y = 3
  4. print(MyFun(y))
複製代碼

x是形式參數(形參),y是實際參數(實參)。
跟絕大部分編程語言一樣,形參指的是函數創建和定義過程中小括號裡的參數,而實參指的是函數在調用過程中傳遞進去的參數。
     
     
1.函數文檔和直接用“#”為函數寫註釋有什麼不同?

給函數寫文檔是為了讓別人可以更好的理解你的函數,所以這是一個好習慣:
  1. >>> def MyFirstFunction(name):
  2.         '函數文檔在函數定義的最開頭部分,用不記名字符串表示'
  3.         print('I love FishC.com!')
複製代碼

我們看到在函數開頭寫下的字符串Ta是不會打印出來的,但Ta會作為函數的一部分存儲起來,這個我們稱之為函數文檔字符串,Ta的功能跟註釋是一樣的。

函數的文檔字符串可以按如下方式訪問:
  1. >>> MyFirstFunction.__doc__
  2. '函數文檔在函數定義的最開頭部分,用不記名字符串表示'
複製代碼

另外,我們用help()來訪問這個函數也可以看到這個文檔字符串:
  1. >>> help(MyFirstFunction)
  2. Help on function MyFirstFunction in module __main__:

  3. MyFirstFunction(name)
  4. 函數文檔在函數定義的最開頭部分,用不記名字符串表示
複製代碼


2.使用關鍵字參數,可以有效避免什麼問題的出現呢?

關鍵字參數,是指函數在調用的時候,帶上參數的名字去指定具體調用的是哪個參數,從而可以不用按照參數的順序調用函數,例如:
  1. >>> def SaySome(name, words):
  2.         print(name + '->' + words)

  3. >>> SaySome(words='讓編程改變世界!', name='小甲魚')
複製代碼

使用關鍵字參數,可以有效避免因不小心搞亂參數的順序導致的BUG出現。


3.使用help(print)查看print()這個BIF有哪些默認參數?分別起到什麼作用?

  1. >>> help(print)
  2. Help on built-in function print in module builtins:

  3. print(...)
  4.     print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
  5.    
  6.     Prints the values to a stream, or to sys.stdout by default.
  7.     Optional keyword arguments:
  8.     file: a file-like object (stream); defaults to the current sys.stdout.
  9.     # 文件類型對象,默認是sys.stdout(標準輸出流)
  10.     sep: string inserted between values, default a space.
  11.     # 第一個參數如果有多個值(第一個參數是收集參數),各個值之間默認用空格(space)隔開
  12.     end: string appended after the last value, default a newline.
  13.     # 打印最後一個值之後默認參數一個新行標識符('\n')
  14.     flush: whether to forcibly flush the stream.
  15.     # 是否強制刷新流
複製代碼


4.默認參數和關鍵字參數表面最大的區別是什麼?

呃,其實這道題考大家有沒有認真聽課啦~

關鍵字參數是在函數調用的時候,通過參數名制定需要賦值的參數,這樣做就不怕因為搞不清參數的順序而導致函數調用出錯。而默認參數是在參數定義的過程中,為形參賦初值,當函數調用的時候,不傳遞實參,則默認使用形參的初始值代替。


   
         
動動手答案:
   

本帖隱藏的內容

0.編寫一個符合以下要求的函數:
    a)計算打印所有參數的和乘以基數(base=3)的結果
    b)如果參數中最後一個參數為(base=5),則設定基數為5,基數不參與求和計算。

  1. def mFun(*param, base=3):
  2.     result = 0
  3.     for each in param:
  4.         result += each

  5.     result *= base
  6.    
  7.     print('結果是:', result)

  8. mFun(1, 2, 3, 4, 5, base=5)
複製代碼


1.尋找水仙花數

題目要求:如果一個3位數等於其各位數字的立方和,則稱這個數為水仙花數。例如153 = 1^3+5^3+3^3,因此153是一個水仙花數。編寫一個程序,找出所有的水仙花數。


  1. def Narcissus():
  2.     for each in range(100, 1000):
  3.         temp = each
  4.         sum = 0
  5.         while temp:
  6.             sum = sum + (temp%10) ** 3
  7.             temp = temp // 10 # 注意這裡用地板除

  8.         if sum == each:
  9.             print(each, end='\t')

  10. print("所有的水仙花數分別是:", end='')
  11. Narcissus()
複製代碼

                  
2. 編寫一個函數findstr(),該函數統計一個長度為2 的子字符串在另一個字符串中出現的次數。例如:假定輸入的字符串為“You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.”,子字符串為“im”,函數執行後打印“子字母串在目標字符串中共出現3 次”。

  1. def findStr(desStr, subStr):
  2.     count = 0
  3.     length = len(desStr)
  4.     if subStr not in desStr:
  5.         print('在目標字符串中未找到字符串!')
  6.     else:
  7.         for each1 in range(length-1):      
  8.             if desStr[each1] == subStr[0]:
  9.                 if desStr[each1+1] == subStr[1]:
  10.                     count += 1
  11.                     
  12.         print('子字符串在目標字符串中共出現%d 次' % count)

  13. desStr = input('請輸入目標字符串:')
  14. subStr = input('請輸入子字符串(兩個字符):')
  15. findStr(desStr, subStr)
複製代碼


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

小甲魚希望你認真對待作業就像你希望小甲魚推出高質量視頻一樣渴望^_^
本節課主要針對函數的參數進行進一步學習。
(1)形參和實參
參數定義過程中的參數叫做形參,因為Ta只是一個形式,表示佔據一個參數位置。
調用參數時傳遞進來的參數叫做實參,因為Ta是具體的參數值。
(2)函數文檔
給函數寫文檔是為了便於別人更好的理解你的函數。在函數定義裡面,用引號引起來的部分。
例如:
調用該函數的默認屬性:
(3)關鍵字參數
為了方式參數輸入時順序的錯亂,導致調用參數實現的結果錯誤,引入了關鍵字參數。
有了關鍵字提示之後,Python就不會使用順序索引了,而是使用關鍵字索引。
(4)默認參數
定義了默認值的參數,在函數定義時,為形參賦初值。
當調用參數時,沒有帶參數,就會使用默認值的參數。
如果給它一個參數,就會使用新給的參數。
(5)收集參數(可變參數)
發明這種機制的動機是函數的作者有時候也不知道這個函數到底需要多少個參數。在這種情況下,只需要在參數的前面加上星號*。
需要注意的是:如果收集參數後邊還需要加上其它定制的參數,那麼在調用函數的時候應該使用關鍵字參數,否則Python就會把你後面的參數全部列為收集參數的範疇了。
建議是:函數定義有收集參數和其它需要定制的參數,那麼請為這些其它的參數設置為默認參數。設置默認參數的話,就不容易出錯啦。
這裡的new的值6,來自於默認值,而不是給定的實參。

0 留言:

發佈留言