選擇題
複習選擇題
測試你對函式的理解程度!
按 ↓ 開始作答
選擇題 1 / 12
定義函式要用哪個關鍵字?
function
def
func
define
選擇題 2 / 12
下列程式碼的輸出是什麼?
def add(a, b):
print(a + b)
x = add(3, 5)
print(x)
8 然後 8
8
8 然後 None
錯誤
選擇題 3 / 12
只寫 def hello(): 但沒有呼叫,會發生什麼?
什麼都不會發生
函式主體會自動執行一次
程式會報錯
會印出函式名稱
選擇題 4 / 12
下列程式碼的輸出是什麼?
def power(base, exp=2):
return base ** exp
print(power(3))
3
9
27
錯誤,少一個引數
選擇題 5 / 12
下列程式碼的輸出是什麼?
def check(n):
if n > 0:
return "正數"
return "非正數"
print(check(5))
正數
非正數
正數 然後 非正數
None
選擇題 6 / 12
哪一個函式定義是錯誤 的?
def f(a, b): return a + b
def f(a, b=1): return a + b
def f(): return 0
def f(a=1, b): return a + b
選擇題 7 / 12
下列程式碼的結果是?
def show():
msg = "hi"
show()
print(msg)
印出 hi
印出 None
NameError(找不到 msg)
什麼都不印
選擇題 8 / 12
下列程式碼的輸出是什麼?
def divide(a, b):
return a // b, a % b
print(divide(17, 5))
3
(3, 2)
[3, 2]
3.4
選擇題 9 / 12
下列程式碼的輸出是什麼?
def greet(name, age):
print(f"{name} 今年 {age} 歲")
greet(age=18, name="小明")
小明 今年 18 歲
18 今年 小明 歲
錯誤,順序不對
None
選擇題 10 / 12
下列程式碼的輸出是什麼?
def f(n):
for i in range(n):
if i == 2:
return i
return -1
print(f(5))
-1
2
0 1 2
5
選擇題 11 / 12
下列程式碼的輸出是什麼?
def add(a, b):
return a + b
def average(a, b):
return add(a, b) / 2
print(average(10, 20))
30
15
15.0
錯誤,函式不能呼叫函式
選擇題 12 / 12
想把計算結果拿去繼續運算,函式裡要用?
print(結果)
return 結果
input(結果)
break
練習題庫
動手寫函式
從單一函式開始,最後組出完整的四則運算計算機!
按 ↓ 開始練習
練習 1 — 基礎 def
打招呼函式
寫一個函式 greet(name),印出招呼語。
# 呼叫方式:
greet("小明")
# 預期輸出:
哈囉,小明!歡迎來學 Python
greet(name):
print(f"哈囉,{ }!歡迎來學 Python")
greet("小明")
def
return
function
name
"name"
greet
f-string 的大括號裡放變數名 ,加了引號就變成印出「name」這四個字。
顯示答案
def greet(name):
print(f"哈囉,{name}!歡迎來學 Python")
greet("小明")
練習 2 — 基礎 def
加法函式
寫一個函式 add(a, b),回傳 兩數相加的結果(不是 print)。
# 呼叫方式:
print(add(3, 5))
print(add(10, 20) * 2)
# 預期輸出:
8
60
def add(a, b):
print(add(3, 5))
print(add(10, 20) * 2)
return
print
a + b
a - b
"a + b"
用 print 的話函式沒交回任何東西,第二行的 add(10, 20) * 2 會因為 None 不能乘而出錯。
顯示答案
def add(a, b):
return a + b
print(add(3, 5))
print(add(10, 20) * 2)
練習 3 — 基礎 def
搭配 input 使用
寫一個 square(n) 回傳平方值,並讓使用者輸入數字。
# 預期輸入:
請輸入一個數字:7
# 預期輸出:
7 的平方是 49
def square(n):
return
num = (input("請輸入一個數字:"))
print(f"{num} 的平方是 { }")
n * n
n + n
n
int
str
float
square(num)
square
input() 拿回來是字串,不轉成 int 的話 n * n 會變成把字串重複很多次。
顯示答案
def square(n):
return n * n
num = int(input("請輸入一個數字:"))
print(f"{num} 的平方是 {square(num)}")
練習 4 — 參數與回傳
BMI 函式化
把 BMI 計算包成函式 bmi(height, weight),回傳計算結果。
# 公式:BMI = 體重 / (身高公尺)²
# 預期輸入:
身高(cm):170
體重(kg):65
# 預期輸出:
你的 BMI 是 22.5
def bmi(height, weight):
return weight / (height / 100) 2
h = (input("身高(cm):"))
w = float(input("體重(kg):"))
print(f"你的 BMI 是 {bmi(h, w):.1f}")
**
*
//
float
int
str
身高體重可能有小數,用 int 會把 170.5 砍成 170。
顯示答案
def bmi(height, weight):
return weight / (height / 100) ** 2
h = float(input("身高(cm):"))
w = float(input("體重(kg):"))
print(f"你的 BMI 是 {bmi(h, w):.1f}")
練習 5 — 參數與回傳
找出最大值
寫一個 bigger(a, b),回傳兩個數字中比較大的那個(不要用內建 max)。
# 呼叫方式:
print(bigger(3, 9))
print(bigger(12, 7))
# 預期輸出:
9
12
def bigger(a, b):
if a b:
return b
print(bigger(3, 9))
print(bigger(12, 7))
>
<
==
return a
return b
print(a)
return 一執行函式就結束了,所以下面那行 return b 只有在 a 不大於 b 時才會跑到。
顯示答案
def bigger(a, b):
if a > b:
return a
return b
print(bigger(3, 9))
print(bigger(12, 7))
練習 6 — 參數與回傳
成績等第函式
寫一個 grade(score),回傳 A/B/C/D/F 等第字串。
# 預期輸入:
請輸入成績:85
# 預期輸出:
成績等第:B
def grade(score):
if score >= 90:
return "A"
score >= 80:
return "B"
elif score >= 70:
return "C"
elif score >= 60:
return "D"
s = int(input("請輸入成績:"))
print(f"成績等第:{grade(s)}")
elif
if
else
return "F"
print("F")
return "A"
全部用 if 的話每個條件都會被檢查一次;elif 是「前面沒成立才檢查」。
顯示答案
def grade(score):
if score >= 90:
return "A"
elif score >= 80:
return "B"
elif score >= 70:
return "C"
elif score >= 60:
return "D"
return "F"
s = int(input("請輸入成績:"))
print(f"成績等第:{grade(s)}")
練習 7 — 參數與回傳
預設參數:打折函式
寫一個 discount(price, rate=0.9),回傳打折後的價格。沒指定折數就打 9 折。
# 呼叫方式:
print(discount(1000))
print(discount(1000, 0.8))
# 預期輸出:
900.0
800.0
def discount(price, ):
return price rate
print(discount(1000))
print(discount(1000, 0.8))
rate=0.9
rate
rate=0.8
*
/
+
只寫 rate 沒有預設值的話,discount(1000) 會因為少一個引數而出錯。
顯示答案
def discount(price, rate=0.9):
return price * rate
print(discount(1000))
print(discount(1000, 0.8))
練習 8 — 參數與回傳
回傳多個值
寫一個 divide(a, b),同時回傳商 和餘數 。
# 呼叫方式:
q, r = divide(17, 5)
print(f"商 {q},餘 {r}")
# 預期輸出:
商 3,餘 2
def divide(a, b):
return a b, a b
= divide(17, 5)
print(f"商 {q},餘 {r}")
//
/
%
*
q, r
q
[q, r]
/ 會得到 3.4(小數),要取「商」得用 //。
顯示答案
def divide(a, b):
return a // b, a % b
q, r = divide(17, 5)
print(f"商 {q},餘 {r}")
練習 9 — 函式 + 迴圈
加總函式
寫一個 total(n),回傳 1 + 2 + ... + n 的總和。
# 預期輸入:
請輸入 N:100
# 預期輸出:
1 到 100 的總和是 5050
def total(n):
s = 0
for i in range(1, ):
s i
s
n = int(input("請輸入 N:"))
print(f"1 到 {n} 的總和是 {total(n)}")
n + 1
n
n - 1
+=
-=
=
return
print
range 的結束不包含 在內,寫 n 的話會少加最後一個數。
顯示答案
def total(n):
s = 0
for i in range(1, n + 1):
s += i
return s
n = int(input("請輸入 N:"))
print(f"1 到 {n} 的總和是 {total(n)}")
練習 10 — 函式 + 迴圈
階乘函式
寫一個 factorial(n),回傳 n!(即 1 × 2 × ... × n)。
# 呼叫方式:
print(factorial(5))
# 預期輸出:
120
def factorial(n):
result =
for i in range(1, n + 1):
result i
return result
print(factorial(5))
1
0
n
*=
+=
/=
result 從 0 開始的話,乘幾次都還是 0。連乘要從 1 開始。
顯示答案
def factorial(n):
result = 1
for i in range(1, n + 1):
result *= i
return result
print(factorial(5))
練習 11 — 函式 + 迴圈
質數判斷
寫一個 is_prime(n),回傳 True 或 False。
# 呼叫方式:
print(is_prime(7))
print(is_prime(9))
# 預期輸出:
True
False
def is_prime(n):
if n < 2:
return
for i in range(2, n):
if n i == 0:
return False
print(is_prime(7))
print(is_prime(9))
False
True
%
//
/
return True
return False
最後的 return True 要在迴圈外面 —— 放進迴圈裡的話,第一個除不盡就直接判定是質數了。
顯示答案
def is_prime(n):
if n < 2:
return False
for i in range(2, n):
if n % i == 0:
return False
return True
print(is_prime(7))
print(is_prime(9))
綜合挑戰
四則運算計算機
讓使用者選運算、輸入兩個數字,算出結果
接下來會分 4 個步驟 慢慢做出來
計算機 — 步驟 1
先寫四個運算函式
分別寫出 add、sub、mul、div 四個函式,各自回傳 結果。
# 呼叫方式:
print(add(10, 3))
print(sub(10, 3))
print(mul(10, 3))
print(div(10, 3))
# 預期輸出:
13
7
30
3.3333333333333335
def add(a, b):
a + b
def sub(a, b):
return a b
def mul(a, b):
return a b
def div(a, b):
return a b
print(add(10, 3), sub(10, 3), mul(10, 3), div(10, 3))
return
print
-
+
*
/
//
除法用 / 才會得到 3.3333…,用 // 會只剩 3。
顯示答案
def add(a, b):
return a + b
def sub(a, b):
return a - b
def mul(a, b):
return a * b
def div(a, b):
return a / b
計算機 — 步驟 2
加上選單
印出選單讓使用者選 1~4,再輸入兩個數字,用 if/elif 呼叫對應的函式。
# 預期畫面:
===== 簡易計算機 =====
1) 加法 2) 減法 3) 乘法 4) 除法
請選擇運算(1-4):1
請輸入第一個數字:10
請輸入第二個數字:3
10 + 3 = 13.0
print("===== 簡易計算機 =====")
print("1) 加法 2) 減法 3) 乘法 4) 除法")
choice = input("請選擇運算(1-4):")
x = (input("請輸入第一個數字:"))
y = float(input("請輸入第二個數字:"))
choice == "1":
print(f"{x} + {y} = {add(x, y)}")
choice == "2":
print(f"{x} - {y} = {sub(x, y)}")
elif choice == "3":
print(f"{x} * {y} = {mul(x, y)}")
elif choice == "4":
print(f"{x} / {y} = {div(x, y)}")
else:
print("沒有這個選項!")
float
int
str
if
elif
while
else
choice 是從 input 來的字串 ,所以要跟 "1" 比對,不是跟 1。
顯示答案
def add(a, b): return a + b
def sub(a, b): return a - b
def mul(a, b): return a * b
def div(a, b): return a / b
print("===== 簡易計算機 =====")
print("1) 加法 2) 減法 3) 乘法 4) 除法")
choice = input("請選擇運算(1-4):")
x = float(input("請輸入第一個數字:"))
y = float(input("請輸入第二個數字:"))
if choice == "1":
print(f"{x} + {y} = {add(x, y)}")
elif choice == "2":
print(f"{x} - {y} = {sub(x, y)}")
elif choice == "3":
print(f"{x} * {y} = {mul(x, y)}")
elif choice == "4":
print(f"{x} / {y} = {div(x, y)}")
else:
print("沒有這個選項!")
計算機 — 步驟 3
處理除以 0 + 包成一個函式
把「判斷選項並計算」包成 calculate(choice, a, b),並在除法時檢查 b 是不是 0。
# 呼叫方式:
print(calculate("4", 10, 0))
# 預期輸出:
不能除以 0!
def div(a, b):
if b 0:
return "不能除以 0!"
return a / b
def calculate(choice, a, b):
if choice == "1":
return add(a, b)
elif choice == "2":
return sub(a, b)
elif choice == "3":
return mul(a, b)
elif choice == "4":
return "沒有這個選項!"
print(calculate("4", 10, 0))
print(calculate("1", 10, 3))
==
!=
>
return div(a, b)
div(a, b)
print(div(a, b))
只寫 div(a, b) 沒有 return 的話,算完了但沒交回去,外面拿到的是 None。
顯示答案
def add(a, b): return a + b
def sub(a, b): return a - b
def mul(a, b): return a * b
def div(a, b):
if b == 0:
return "不能除以 0!"
return a / b
def calculate(choice, a, b):
if choice == "1":
return add(a, b)
elif choice == "2":
return sub(a, b)
elif choice == "3":
return mul(a, b)
elif choice == "4":
return div(a, b)
return "沒有這個選項!"
print(calculate("4", 10, 0))
計算機 — 步驟 4
完整版:可以一直算下去
用 while 讓計算機重複執行,輸入 0 才離開,並統計總共算了幾次。
# 預期畫面:
===== 簡易計算機 =====
1) 加法 2) 減法 3) 乘法 4) 除法 0) 離開
請選擇:1
第一個數字:10
第二個數字:3
結果:13.0
請選擇:0
總共計算了 1 次,掰掰!
count = 0
:
menu()
choice = input("請選擇:")
if choice == "0":
print(f"總共計算了 {count} 次,掰掰!")
if choice not in ["1", "2", "3", "4"]:
print("沒有這個選項,請重選!")
a = float(input("第一個數字:"))
b = float(input("第二個數字:"))
print(f"結果:{calculate(choice, a, b)}")
count 1
while True
for i in range(3)
break
continue
return
+=
-=
continue 是「這一圈不做了,回到迴圈開頭重問」;用 break 的話輸入錯一次程式就結束了。
顯示答案
def add(a, b): return a + b
def sub(a, b): return a - b
def mul(a, b): return a * b
def div(a, b):
if b == 0:
return "不能除以 0!"
return a / b
def calculate(choice, a, b):
if choice == "1":
return add(a, b)
elif choice == "2":
return sub(a, b)
elif choice == "3":
return mul(a, b)
elif choice == "4":
return div(a, b)
return "沒有這個選項!"
def menu():
print("===== 簡易計算機 =====")
print("1) 加法 2) 減法 3) 乘法 4) 除法 0) 離開")
count = 0
while True:
menu()
choice = input("請選擇:")
if choice == "0":
print(f"總共計算了 {count} 次,掰掰!")
break
if choice not in ["1", "2", "3", "4"]:
print("沒有這個選項,請重選!")
continue
a = float(input("第一個數字:"))
b = float(input("第二個數字:"))
print(f"結果:{calculate(choice, a, b)}")
count += 1
延伸挑戰
再進化一點
挑戰 A:加上更多運算
# 5) 次方 a ** b
# 6) 取餘數 a % b
# 7) 整數除法 a // b
挑戰 B:記住歷史紀錄
# 用 list 存下每次的算式字串
# 離開前把所有算式印出來
挑戰 C:連續加總模式
# 讓使用者一直輸入數字,輸入 end 才停
# 寫一個 sum_all(numbers) 回傳全部的總和
函式複習完成!
函式是把程式拆小、重複利用的關鍵,計算機練習建議在 Playground 實際跑一次!