天天看點

小甲魚Python第十六講課後習題--017函數

函數的定義用def,函數名後要用冒号 函數的傳回:函數中使用return   測試題: 0. 你有聽說過DRY嗎? DRY是指Don't Repeat Yourself ,特指在程式設計以及計算中避免重複代碼,因為這樣會降低靈活性、簡潔性,并且可能導緻代碼之間的沖突。 即不要寫重複的代碼,而是用“abstraction”類來抽象公有的東西。如果你需要多次用到一個寫死值,那麼可以設為公共常量;如果你要在兩個以上的地方使用一個代碼塊,那麼可以将它設為一個獨立的方法。SOLID設計原則的優點是易于維護,但要注意,不要濫用,duplicate 不是針對代碼,而是針對功能。這意味着,即使用公共代碼來驗證OrderID和SSN,二者也不會是相同的。使用公共代碼來實作兩個不同的功能,其實就是近似地把這兩個功能永遠捆綁到了一起,如果OrderID改變了其格式,SSN驗證代碼也會中斷。是以要慎用這種組合,不要随意捆綁類似但不相關的功能。 DRY是Andy Hunt 和 Dave Thomas's 的《 The Pragmatic Programmer 》這本書中的核心原則。   1. 都是重複一段代碼,為什麼我要使用函數(而不使用簡單的拷貝黏貼)呢? 使用函數:

0) 可以降低代碼量(調用函數隻需要一行,而拷貝黏貼需要N倍代碼)

1) 可以降低維護成本(函數隻需修改def部分内容,而拷貝黏貼則需要每一處出現的地方都作修改)

2) 使序更容易閱讀(沒有人會希望看到一個程式重複一萬行“I love FishC.com”)

  2. 函數可以有多個參數嗎? 可以,理論上你想要有多少個就可以有多少個,隻不過如果函數的參數過多,在調用的時候出錯的機率就會大大提高,因而寫這個函數的程式員也會被相應的問候祖宗,是以,盡量精簡吧,在Python的世界裡,精簡才是王道!   3. 建立函數使用什麼關鍵字,要注意什麼? 盡量使用有意義的詞作為關鍵字,每個詞的第一個字母為大寫,并做好注釋。   4. 請問這個函數有多少個參數?

def MyFun((x, y), (a, b)):

  return x * y - a * b

如果你回答兩個,那麼恭喜你錯啦,答案是0,因為類似于這樣的寫法是錯誤的!

我們分析下,函數的參數需要的是變量,而這裡你試圖用“元祖”的形式來傳遞是不可行的。 我想你如果這麼寫,你應該是要表達這麼個意思:

>>> def MyFun(x, y):

return x[0] * x[1] - y[0] * y[1]

>>> MyFun((3, 4), (1, 2))

10

5. 請問調用以下這個函數會列印什麼内容?

def hello():

  print('Hello World!')

  return

  print('Welcome To FishC.com!')

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

動動手

0. 編寫一個函數power()模拟内建函數pow(),即power(x, y)為計算并傳回x的y次幂的值。

自己寫的

def power(x,y):
    z = x**y
    return z
print(power(2,2))

小甲魚代碼:      

def power(x,y):

  result = x**y

  return result

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

自己寫的:

def gcd(x,y):
    while y:
        r =x%y
        x = y
        y = r
    return x
print(gcd(10,5))

算法流程圖:      
小甲魚Python第十六講課後習題--017函數

2. 編寫一個将十進制轉換為二進制的函數,要求采用“除2取餘”(腦補連結)的方式,結果與調用bin()一樣傳回字元串形式

不會寫:利用數組、while循環

def DectoBin(num):

  temp = []

  result = ''

  while num:

    x = num%2

    num = num//2

    temp.append(x)

  while temp:

    result += str(temp.pop())

  return result

轉載于:https://www.cnblogs.com/jieperhaps/p/9018410.html