🏃‍♀️從 BMI計算 學python function 函式觀念與實作

更新於 發佈於 閱讀時間約 1 分鐘

前言


在之前 從冷笑話 學python 基本輸出 print()已經學會如何用python來輸出訊息,

從閏年判斷 學 Python 的 if ... else ... 語法

學會如何用進行流程控制和邏輯判斷。


接著,在上次的BMI(身體質量指標)計算教學裡,

學會如何用python來接收使用者輸入的訊息,並且做一些簡單的四則運算。


今天,在這次的BMI(身體質量指標)計算的續集裡,將學會funciton的基本觀念與實作,
常用的功能封裝成可重複利用的元件: function


觀念

function在數學上的觀念上是y = f(x) ,
給定輸入x,遵循固定的計算公式 或者 運算規則,計算出結果y。


function在程式領域的觀念也是類似的,

output = function( input )

給定輸入x遵循固定的計算式 或者 運算、判斷邏輯,計算出結果輸出y

raw-image


白話地說,就是把一個特定常用的功能,封裝起來,變成可以重複利用的元件


語法

口語的表達

定義一個含有計算規則的function,名字叫做f,輸入是x,輸出是y

對應的python語法

def f(x):

... 此處實現真正的計算規則...
return y


# 外面要呼叫function時,就用名字去呼叫,()內傳入輸入參數。
result = f(x)

範例1: 經典的問候


承接上次同樣的範例,我們可以發現打招呼的邏輯與語句其實是有規則的
可以把打招呼的功能包裝成greeting function。

name = input("What is your name? ")

print(f"Hi, {name}. Nice to meet you.")

定義一個greeting function

對應的python程式碼如下

def greeting(name):

message = f"Hi, {name}. Nice to meet you."
return message


完整的測試python程式碼如下

def greeting(name):
message = f"Hi, {name}. Nice to meet you."
return message

name = input("What is your name? ")
print( greeting(name) )


輸入:

Tom


輸出結果:

What is your name? Tom
Hi, Tom. Nice to meet you.

之後,如果要產生好幾次打招呼的訊息,只要呼叫greeting(name)即可

就算要修改打招呼的內容或格式,也只要修改greeting(name)就可以即時更新,作用在整份專案上


範例2: e的近似值估計


e = 自然底數 = 自然常數 近似於 (1 + 1/n)的n次方 = (1 + 1/n)^n, n越大時越準確


raw-image


可以發現n不管是多大的正整數,
e近似值的計算公式都是相同的,計算邏輯也是雷同的

我們可以把計算(1 + 1/n)^n的過程封裝成一個近似值計算的function,隨著n值的不同,返回精確度不同的近似值


定義一個近似值計算的function calc_e(n)

def calc_e(n):

approx_e = (1 + 1/n) ** n
return approx_e


接著,再定義一個近似值計算的function check_precision,
方便觀察近似值的準確度到小數點下第幾位

def check_precision(val, target, decimal_place):

return abs( int(val * 10**decimal_place) - int(target * 10**decimal_place) ) == 0


完整的測試python程式碼如下

import math

def calc_e(n):

approx_e = (1 + 1/n) ** n
return approx_e


def check_precision(val, target, decimal_place):

return abs( int(val * 10**decimal_place) - int(target * 10**decimal_place) ) == 0


places = {1: False, 2: False, 3:False}

print(f"e = {math.e} \n")

for n in range(1,5001):

estimated_e = calc_e(n)

for place in range(1,4):

if check_precision(estimated_e, math.e, place) and not places[place]:

print(f"approximated to {place} decimal place(s) at n = {n}")
print(f"e ~ { estimated_e } \n")
places[place] = True


輸出結果:

e = 2.718281828459045 

approximated to 1 decimal place(s) at n = 74
e ~ 2.7001396788468326

approximated to 2 decimal place(s) at n = 164
e ~ 2.710040437932739

approximated to 3 decimal place(s) at n = 4822
e ~ 2.718000019542224

DEMO: BMI計算機


BMI = 體重(kg) / [ 身高(m) 的平方 ]


不論是誰,BMI的計算公式和提示訊息都是相同的。

我們可以把BMI的計算和訊息顯示封裝成function bmi_calc(weight, height)


在螢幕上顯示提示訊息,請使用者從鍵盤輸入體重和身高。

接著,在螢幕上顯示BMI和相對應的健康提示訊息。


直反覆進行,直到使用者輸入-1離開程式

def bmi_calc(weight, height):
# 計算BMI
bmi = weight / (height ** 2)

# 顯示結果
print(f"您的BMI值為:{bmi}")

# 判斷BMI範圍
if bmi < 18.5:
print("體重過輕")

elif 18.5 <= bmi < 25:
print("體重正常")

elif 25 <= bmi < 30:
print("體重過重")

else:
print("肥胖")

return


while True:
print("\n假如要離開程式,請輸入-1")

# 輸入體重和身高
weight = input("請輸入體重(kg):")

# 字串轉成浮點數
weight = float(weight)

if weight == -1:
break

height = input("請輸入身高(cm):")

# 字串轉成浮點數
height = float(height)

if height == -1:
break

# 公分轉換成公尺
height = height / 100

# 計算bmi
bmi_calc(weight, height)

測試範例:

輸入 與 輸出結果

假如要離開程式,請輸入-1
請輸入體重(kg):50
請輸入身高(cm):170
您的BMI值為:17.301038062283737
體重過輕

假如要離開程式,請輸入-1
請輸入體重(kg):70
請輸入身高(cm):180
您的BMI值為:21.604938271604937
體重正常

假如要離開程式,請輸入-1
請輸入體重(kg):-1

還有其他幾種不同的輸出結果,讀者可以試著輸入不同數值玩玩看。


結語


function就相當於把一個常用的功能進行封裝,變成一個可以重複利用的小元件

之後要使用這個功能就去call function即可。

之後要修改,也只要去修改對應的function定義,就可以套用到整份專案上


讀者可以試著從生活中的範例開始練習,先定義出明確的輸入與計算規則,

接著寫幾個小程式測試一下是否與預期中的執行結果相符合。

留言
avatar-img
留言分享你的想法!
avatar-img
小松鼠的演算法樂園
96會員
427內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
2024/10/10
從Python 內建deque資料結構的角度切入, 同時了解deque 與 FIFO Queue相關的function用法。 collections.deque是一種兩端點皆可進出的雙端佇列 在兩端點高效地在O(1)常數時間內添加和刪除元素。 這使得deque非常適合實現FIFO Queue
Thumbnail
2024/10/10
從Python 內建deque資料結構的角度切入, 同時了解deque 與 FIFO Queue相關的function用法。 collections.deque是一種兩端點皆可進出的雙端佇列 在兩端點高效地在O(1)常數時間內添加和刪除元素。 這使得deque非常適合實現FIFO Queue
Thumbnail
2024/09/27
井字遊戲(OOXX)的遊戲描述 Tic Tac Toe(井字遊戲)是經典的雙人棋盤遊戲,在一個3x3的方格中進行。 每回合兩個玩家輪流選一個位置,先讓自己的符號(是 X 或 O)在 水平線、垂直線或對角線上連成一線的玩家宣告獲勝。
Thumbnail
2024/09/27
井字遊戲(OOXX)的遊戲描述 Tic Tac Toe(井字遊戲)是經典的雙人棋盤遊戲,在一個3x3的方格中進行。 每回合兩個玩家輪流選一個位置,先讓自己的符號(是 X 或 O)在 水平線、垂直線或對角線上連成一線的玩家宣告獲勝。
Thumbnail
2024/09/23
深入探討圖(Graph)的基本概念 及 最短路徑Shortest Path的尋找。 我們專注於廣度優先搜尋(BFS)演算法,以等權圖的最短路徑為例, 詳細說明如何利用BFS從起點擴散到終點,並且提供詳細的程式碼範例。 透過實作,讀者能夠更清楚理解圖論及BFS的應用,並體會水波紋擴散模型的重要性。
Thumbnail
2024/09/23
深入探討圖(Graph)的基本概念 及 最短路徑Shortest Path的尋找。 我們專注於廣度優先搜尋(BFS)演算法,以等權圖的最短路徑為例, 詳細說明如何利用BFS從起點擴散到終點,並且提供詳細的程式碼範例。 透過實作,讀者能夠更清楚理解圖論及BFS的應用,並體會水波紋擴散模型的重要性。
Thumbnail
看更多
你可能也想看
Thumbnail
一、基本算術運算符號 加法:+ 減法:- 乘法:* 除法:/(返回浮點數) a = 1 b = 2 print( a + b ) # 加法 輸出:3 print( a - b ) # 減法 輸出:-1 print( a * b ) # 乘法 輸出:2 print( a / b ) #
Thumbnail
一、基本算術運算符號 加法:+ 減法:- 乘法:* 除法:/(返回浮點數) a = 1 b = 2 print( a + b ) # 加法 輸出:3 print( a - b ) # 減法 輸出:-1 print( a * b ) # 乘法 輸出:2 print( a / b ) #
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
Python 提供了一系列內建函式,其中一部分涉及數學和數學操作。 以下是一些常用的內建函式和數學相關的函式: 基本數學運算: abs(x): 返回 x 的絕對值。 result = abs(-5) print(result) # 輸出: 5 max(iterable) 和 min(
Thumbnail
Python 提供了一系列內建函式,其中一部分涉及數學和數學操作。 以下是一些常用的內建函式和數學相關的函式: 基本數學運算: abs(x): 返回 x 的絕對值。 result = abs(-5) print(result) # 輸出: 5 max(iterable) 和 min(
Thumbnail
邏輯運算子 它們在許多情境下都是程式語言中重要的工具,用於進行條件判斷和控制流程 在日常中總會遇到有些需要思考判斷的問題,比如要買東西,就會考慮到CP值,東西要好且要便宜,就是and的概念,如果在一些比較複雜的狀況,例如想晚餐吃什麼,就會想火鍋或燒烤都行,這就是or的概念。
Thumbnail
邏輯運算子 它們在許多情境下都是程式語言中重要的工具,用於進行條件判斷和控制流程 在日常中總會遇到有些需要思考判斷的問題,比如要買東西,就會考慮到CP值,東西要好且要便宜,就是and的概念,如果在一些比較複雜的狀況,例如想晚餐吃什麼,就會想火鍋或燒烤都行,這就是or的概念。
Thumbnail
在Python中,數值運算非常直觀,你可以使用標準的數學運算符號進行基本的數值運算。以下是一些基本的數值運算: 進行計算時,按照「先乘除後加減」的規則,並優先計算小括號刮起來的運算式。 print('答案:' ,(1+1)*2) #​答案: 4 復合型態的運算子 指定運算子 = 若是結合算術
Thumbnail
在Python中,數值運算非常直觀,你可以使用標準的數學運算符號進行基本的數值運算。以下是一些基本的數值運算: 進行計算時,按照「先乘除後加減」的規則,並優先計算小括號刮起來的運算式。 print('答案:' ,(1+1)*2) #​答案: 4 復合型態的運算子 指定運算子 = 若是結合算術
Thumbnail
宣告變數 變數是程式中用來儲存和表示數據的標識符號​,並將變數存放在某個記憶體位子 可以用ID的方法查找變數存在哪個記憶體,此方法有利於以後查找問題用。 在大多數程式語言中,變數需要事先聲明(宣告)並賦值。 而Python是一種動態類型語言,不需要顯式宣告變數類型,而是在賦值時自動進行推斷。
Thumbnail
宣告變數 變數是程式中用來儲存和表示數據的標識符號​,並將變數存放在某個記憶體位子 可以用ID的方法查找變數存在哪個記憶體,此方法有利於以後查找問題用。 在大多數程式語言中,變數需要事先聲明(宣告)並賦值。 而Python是一種動態類型語言,不需要顯式宣告變數類型,而是在賦值時自動進行推斷。
Thumbnail
第一堂學生創新團隊的點評 我們的統計在社會科學裡面,它到底是怎麼樣產生的,我們今天要算這個統計學,要送統計,他們本身要有Raw data,這樣才有辦法進行運用,如:我們要怎麼算平均身高如下是:   「全部身高」除以「人數」等於 每個人幾公分  所以我們要設計如何用電腦計算 ,要「input」
Thumbnail
第一堂學生創新團隊的點評 我們的統計在社會科學裡面,它到底是怎麼樣產生的,我們今天要算這個統計學,要送統計,他們本身要有Raw data,這樣才有辦法進行運用,如:我們要怎麼算平均身高如下是:   「全部身高」除以「人數」等於 每個人幾公分  所以我們要設計如何用電腦計算 ,要「input」
Thumbnail
在這一課中,我們將學習 Python 的基本變量類型以及如何進行基本的數學運算。 Python 中有幾種基本的數據類型,包括整數 (int)、浮點數 (float)、字符串 (str) 和布林值 (bool)。 讓我們在一個新的文件中試試看,可以將這個文件命名為 variables_and_ma
Thumbnail
在這一課中,我們將學習 Python 的基本變量類型以及如何進行基本的數學運算。 Python 中有幾種基本的數據類型,包括整數 (int)、浮點數 (float)、字符串 (str) 和布林值 (bool)。 讓我們在一個新的文件中試試看,可以將這個文件命名為 variables_and_ma
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News