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


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. 請寫下這一節課你學習到的內容:格式不限,回憶並復述是加強記憶的好方式!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM