iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 13
0
自我挑戰組

從python入門到物聯網系列 第 13

Day13 - Python函數

  • 分享至 

  • xImage
  •  

函數Function

一旦程式功能變多,相同的功能的程式碼會重複出現,導致程式碼太長、太醜、太難修改,所以需要函式來簡化 - 相同事件只要寫一次就好。

函式(function):可以設置參數,也可以數值傳給其他函式,以及return value。
語法:def functionName()::縮排來表示function區塊。

  • 定義函式
    我們需要用到def關鍵字來告知python我們要定義一個函式

簡單範例:

def try_function():       # 定義try_function()函式
	print("hello world")  # 函式的工作是印出hello world
	return(1+1) 	      #函式回傳的值

x = try_function()        # 呼叫try_function()函式,函式回傳的值放進x變數中
print(x)

結果:

hello world
2
  • 把參數帶入函式內
    在已經定義的函式括號內放入參數。
    簡單範例:
def try_function(name):      # 定義try_function()函式,接收name這個參數
	print("Hello " + name)   # 函式的工作是印出Hello 加上參數name的值

try_function("wsrsw")        # 呼叫try_function()函式,函式帶入'wsrsw'參數

結果:

Hello wsrsw
2

簡單運算範例:

def name_age(name, year):
	age = 2019 - year
	print("Name: ", name)
	print("Age: ", age)


name = input('輸入你的名字: ')
year = int(input('輸入你的出生年: '))

name_age(name, year)

結果:

輸入你的名字: qwe
輸入你的出生年: 1990
Name:  qwe
Age:  29

遞迴

在解決問題時有時需要回到上一個計算或者需要應用到上一個解法的答案,此時就是利用遞迴的概念來撰寫一個函式。

  • 特點:
    • 將大問題拆解成重複性的小問題
    • 自己呼叫自己、設置終止目標
    • 範例:階乘、費氏數列、最大公因數、最小公倍數...

階乘 Factorial

n! = 1 x 2 x ... x (n-1) x n =>
n! = n x (n-1)! =>
n! = n x (n-1) x (n-2) x (n-3) ... x 1

3! = 321

Factorial(3)
= 3 * Factorial(2)
= 3 * 2 * Factorial(1)
= 3 * 2 * 1

範例:

def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n-1)
 
num = int(input('請輸數數字: ')) 
answer = factorial(num)
print(str(num) + '! = ' + str(answer))

結果:

請輸數數字: 4
4! = 24

費氏數列 Fibonacci

在數學上,費氏數列是以遞迴的方法來定義:
F0 = 0
F1 = 1
Fn = F(n-1) + F(n-2), (n>=2)

費氏數列由0和1開始,之後由之前的兩數相加而得出。
用陣列表示:

F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10
0 1 1 2 3 5 8 13 21 34 55

用樹枝狀表示:

範例:

def fib(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    return fib(n-1) + fib(n-2)
 
num = int(input('請輸數數字: ')) 

answer = fib(num)
print('F' + str(num) + ' : ' + str(answer))

結果:

請輸數數字: 10
F10 : 55

最大公因數GCD、最小公倍數LCM

使用輾轉相除法!
輾轉相除法-維基百科

每次用兩者間較小的數去對另一個數取餘數,用餘數和較小的數進行再次進行一樣的步驟。

GCD、LCM 範例:

def gcd(m, n):
    if n == 0:
        return m
    else:
        return gcd(n, m % n)

def lcm(m, n):
	return m * n // gcd(m, n)
    
m = int(input("輸入 m:"))
n = int(input("輸入 n:"))

print("Gcd: ", gcd(m, n))
print("Lcm: ", lcm(m, n))

結果:

輸入 m:252
輸入 n:105
Gcd:  21
Lcm:  1260

上一篇
Day12 - 檔案 I/O
下一篇
Day14 - Python Class
系列文
從python入門到物聯網30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言