從 def 基礎複習到自製「四則運算計算機」
← → 切換區塊 | ↑ ↓ 瀏覽內容
def、參數、return、預設值、作用域
按 ↓ 開始閱讀
# 沒有函式:每次都要重打一次
print("=" * 20)
print("歡迎光臨")
print("=" * 20)
# 有函式:定義一次,重複使用
def welcome():
print("=" * 20)
print("歡迎光臨")
print("=" * 20)
welcome() # 呼叫函式
welcome() # 想用幾次就用幾次
def 只是「定義」,函式裡的程式碼要等到呼叫(加上 ())才會執行。
def 語法拆解def add(a, b): # 名稱 add,兩個參數 a、b
result = a + b # 主體:縮排
return result # 回傳計算結果
answer = add(3, 5) # 呼叫,把回傳值存起來
print(answer) # 8
def greet(name, age): # name, age 是「參數」
print(f"{name} 今年 {age} 歲")
greet("小明", 18) # "小明", 18 是「引數」
greet(age=18, name="小明") # 用名字指定,順序可以顛倒
不指定名字時,引數是照順序對進去的。greet(18, "小明") 會得到奇怪的結果。
print vs returndef add_print(a, b):
print(a + b) # 只印出來,沒有交回任何東西
def add_return(a, b):
return a + b # 把結果交回呼叫的地方
x = add_print(3, 5) # 印出 8,但 x 是 None
y = add_return(3, 5) # 沒有印東西,但 y 是 8
print(y * 2) # 16 ← 因為有 return 才能繼續運算
要拿結果繼續算就用 return;只是要給使用者看才用 print。
return 的細節def check(score):
if score >= 60:
return "及格"
return "不及格" # 只有上面沒 return 才會跑到這
print(check(80)) # 及格
def divide(a, b):
return a // b, a % b # 回傳商和餘數
q, r = divide(17, 5) # q=3, r=2
print(f"商 {q},餘 {r}")
def power(base, exp=2): # exp 預設是 2
return base ** exp
print(power(5)) # 25 → 用預設 exp=2
print(power(5, 3)) # 125 → 自己指定 exp=3
有預設值的參數必須放在後面。def f(a=1, b) 會直接語法錯誤。
def calc():
temp = 100 # 區域變數,只活在 calc 裡面
print(temp) # 100
calc()
print(temp) # NameError:外面找不到 temp
tax = 0.05 # 全域變數
def total(price):
return price * (1 + tax) # 讀得到 tax
print(total(100)) # 105.0
def add(a, b):
return a + b
def average(a, b):
return add(a, b) / 2 # 在函式裡呼叫另一個函式
print(average(10, 20)) # 15.0
每個函式只負責一件小事,再組合起來完成複雜功能。等一下的「計算機」練習就是用這個方式做出來的。
測試你對函式的理解程度!
按 ↓ 開始作答
def add(a, b):
print(a + b)
x = add(3, 5)
print(x)
def hello(): 但沒有呼叫,會發生什麼?def power(base, exp=2):
return base ** exp
print(power(3))
def check(n):
if n > 0:
return "正數"
return "非正數"
print(check(5))
def show():
msg = "hi"
show()
print(msg)
def divide(a, b):
return a // b, a % b
print(divide(17, 5))
def greet(name, age):
print(f"{name} 今年 {age} 歲")
greet(age=18, name="小明")
def f(n):
for i in range(n):
if i == 2:
return i
return -1
print(f(5))
def add(a, b):
return a + b
def average(a, b):
return add(a, b) / 2
print(average(10, 20))
從單一函式開始,最後組出完整的四則運算計算機!
按 ↓ 開始練習
寫一個函式 greet(name),印出招呼語。
寫一個函式 add(a, b),回傳兩數相加的結果(不是 print)。
寫一個 square(n) 回傳平方值,並讓使用者輸入數字。
把 BMI 計算包成函式 bmi(height, weight),回傳計算結果。
寫一個 bigger(a, b),回傳兩個數字中比較大的那個(不要用內建 max)。
寫一個 grade(score),回傳 A/B/C/D/F 等第字串。
寫一個 discount(price, rate=0.9),回傳打折後的價格。沒指定折數就打 9 折。
寫一個 divide(a, b),同時回傳商和餘數。
寫一個 total(n),回傳 1 + 2 + ... + n 的總和。
寫一個 factorial(n),回傳 n!(即 1 × 2 × ... × n)。
寫一個 is_prime(n),回傳 True 或 False。
讓使用者選運算、輸入兩個數字,算出結果
接下來會分 4 個步驟 慢慢做出來
分別寫出 add、sub、mul、div 四個函式,各自回傳結果。
印出選單讓使用者選 1~4,再輸入兩個數字,用 if/elif 呼叫對應的函式。
把「判斷選項並計算」包成 calculate(choice, a, b),並在除法時檢查 b 是不是 0。
用 while 讓計算機重複執行,輸入 0 才離開,並統計總共算了幾次。
# 5) 次方 a ** b
# 6) 取餘數 a % b
# 7) 整數除法 a // b
# 用 list 存下每次的算式字串
# 離開前把所有算式印出來
# 讓使用者一直輸入數字,輸入 end 才停
# 寫一個 sum_all(numbers) 回傳全部的總和
函式是把程式拆小、重複利用的關鍵,計算機練習建議在 Playground 實際跑一次!