1. 程式人生 > >[小甲魚] 零基礎入門python第017講課後測試題及答案:函式-python的樂高積木

[小甲魚] 零基礎入門python第017講課後測試題及答案:函式-python的樂高積木

0. 你有聽說過DRY嗎?     沒有1. 都是重複一段程式碼,為什麼我要使用函式(而不使用簡單的拷貝黏貼)呢?    函式方便使用  2. 函式可以有多個引數嗎?    可以,一般三四個為宜  3. 建立函式使用什麼關鍵字,要注意什麼?     def  4. 請問這個函式有多少個引數?

    def MyFun((x, y), (a, b)):          return x * y - a * b    兩個     回答錯誤,因為上面這樣定義函式是錯誤的,函式傳遞的是變數,不是資料型別的實體,具體見後面答案 5. 請問呼叫以下這個函式會列印什麼內容?

    >>> def hello():

                 print('Hello World!')

                 return

                 print('Welcome To FishC.com!')    Hello World!          Welcome To FishC.com!

回答錯誤,Python執行到return語句的時候,Python認為函式到此結束,需要返回了(儘管沒有任何返回值)                  所以,正確列印的是 Hello World! 動動手:0. 編寫一個函式power()模擬內建函式pow(),即power(x, y)

為計算並返回xy次冪的值。

# pov(x,y)=x**y
def power(x,y):
    return x**y

1. 編寫一個函式,利用歐幾里得演算法(腦補連結)求最大公約數,例如gcd(x, y)返回值為引數x和引數y的最大公約數。

def gcd(x,y):
    for each in range(1,x+1):
        if (x%each==0 and y%each==0):
            max=each
    return max

2. 編寫一個將十進位制轉換為二進位制的函式,要求採用2取餘腦補連結)的方式,結果與呼叫bin()一樣返回字串形式。

def ten2two(x):
    result=''
    list1=list()
    while (x//2!=0):
        list1.append(x%2)
        x//=2
    else:
        list1.append(x%2)
    while list1:
        result+=str(list1.pop())
    return result

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)為計算並返回xy次冪的值。

  1. def power(x, y):
  2.     result = 1
  3.     for i in range(y):
  4.         result *= x
  5.     return result
  6. 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. print(gcd(4, 6))

2. 編寫一個將十進位制轉換為二進位制的函式,要求採用2取餘腦補連結)的方式,結果與呼叫bin()一樣返回字串形式。

  1. def Dec2Bin(dec):
  2.     temp = []
  3.     result = ''
  4.     while dec:
  5.         quo = dec % 2
  6.         dec = dec // 2
  7.         temp.append(quo)
  8.     while temp:
  9.         result += str(temp.pop())
  10.     return result
  11. print(Dec2Bin(62))