Python 基礎教學

1. Python 環境設定 2. Python 基本變數 3. Python 流程控制 4. Python 模組與套件概念 5. Pandas 資料處理 6. Matplotlib 繪圖 7. Jieba 切詞
課程介紹 & 程式碼

方法function

或許您常常聽到程式的老手提到「物件」、「物件化」、「物件導向」...,我知道您很想罵他宅男,但這確實是寫程式一個很重要的觀念與技能。而直接跟Python的初學者討論「物件導向」,那也只會讓初學者「從入門到放棄」。反之,不如先放下這些名詞解釋,先來理解為何這樣的寫程式方法會很有效率吧!

# python中 def function的基本結構
def 方法名稱(方法所需變數):
    方法內容

1. 排列組合:從10顆球的袋子當中取2顆球有幾種?

如果您還記得要怎麼算很棒,但如果你忘了,那這裡直接告訴你公式,不要花時間專注在數學上,這不是重點:

         10 x 9 x 8 x .....x 1
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (8 x 7 x 6 x... x 1) x (2 x 1)

數學式的寫法:
        10!
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (10-2)! * 2!

1. for迴圈:土法煉鋼

我們在迴圈for的課程中知道這種連續型的數字最適合使用for迴圈了,因此分別將三個數字算出來以後做計算,python程式碼如下: 

# 問題:用程式實現機率「c的X取Y」

# 10!/(10-2)! * 2!
#----- 土法煉鋼寫法 -----
x = 10
y = 2
# 計算10!
count1 = 1
for i in range(1, x+1):
    count1 = count1 * i
    
# 計算(10-2)!
count2 = 1
for i in range(1, x-y+1):
    count2 = count2 * i
    
# 計算2!
count3 = 1
for i in range(1, y+1):
    count3 = count3 * i

#產出計算結果
c = count1 / (count2 * count3)
print(c)

以上的指令會產出以下的結果:

45.0

這個結果雖然是我們要的,不過寫完也滿身大汗。細心的您有注意到上面的三個迴圈似乎都長得很像,但又有些細微的不一樣。這樣重複的工作應該要交給電腦,怎麼會是讓人工來處理呢?

2. def方法

我們將剛剛的三個迴圈整理成以下的def方法:

def factorial(n):
    """
    參數n:欲計算階層的尾數
    範例:計算10!,n輸入10
    """
    count = 1
    for i in range(1, n+1):
        count = count * i
    return count
程式內容 說明
factorial 自訂的方法名稱,跟變數一樣可以隨意命名,只要不要使用到保留字元即可。
n 此方法「內部」使用的變數,在使用此方法時必須要傳給n一個數值,而n也只會在方法內使用,在方法外無法使用
""" 很明顯就是寫註解,建議在建立方法時要有寫註解的習慣,方便後續的維護。而方法內的註解至少要:這個方法在幹嘛?需要什麼參數?|
return 回傳值,也可以不回傳,需要看方法的設計與目的

而呼叫這個方法已也很簡單,直接輸入「方法名稱()」即可,而在此次舉例中factorial方法需要一個n變數,因此在括號中需要傳送一個數字給他,而這個數字也是我們想要進行階層計算的數字:

factorial(5) # 計算5!

因此這次的排列組合問題,也可以寫成這樣:

x = 10
y = 2
# 階層計算機
def factorial(n):
    """
    參數n:欲計算階層的尾數
    範例:計算10!,n輸入10
    """
    count = 1
    for i in range(1, n+1):
        count = count * i
    return count

c = factorial(x) / (factorial(x-y) * factorial(y))
print(c)

以上的指令會產出以下的結果:

45.0

2. 預設變數

有時候呼叫方法時可能會忘記輸入變數,又或者這個方法的變數大部分的時間都是一樣的,只有少數的例外狀況需要調整此變數,那每次呼叫該方法都要指定變數變成一件很麻煩的事情,但又不能直接寫死,該怎麼辦呢?其實可以改成以下的方式,在方法的參數n中指定5:

def factorial(n = 5): # 預設參數5
    """
    參數n:欲計算階層的尾數
    範例:計算10!,n輸入10
    """
    count = 1
    for i in range(1, n+1):
        count = count * i
    return count

factorial() # 沒給n就預設n是5,計算5!

以上的指令會產出以下的結果:

120.0

3. return多個值

在一開始寫def方法的時候腦筋會需要轉一下,要考慮什麼東西要設定成變數,最後又要回傳什麼東西。值得一提的是python的回傳return可以回傳多個值,這在其他程式語言中是無法做到的,如以下程式碼範例:

def notThing():
    return 10, 20

# 用a跟b兩個變數來接收
a, b = notThing()

print(a)
print(b)

以上的指令會產出以下的結果:

10
20

作者:楊超霆 行銷搬進大程式 創辦人

©2023 行銷搬進大程式 Marketing Live in Code