# Python : if elif else
###### tags: `python` `九年級`
+ 一般而言,電腦執行程式碼時為循序結構,但有些時候程式設計師需要依照情境來設計==分支結構==的執行順序
### 條件分支結構圖
![](https://i.imgur.com/TofV4g2.jpg)
### 範例一:if基礎結構
>假設今天我們要設一個程式來判斷你分數是否及格:
>
>>1.如果分數大於等於60,我們印出`你及格了`
>>2.分數低於60,我們印出`你不及格`
>>3.分數等於60,印出`你剛好及格`
>>
:::info
```python=
score=60
if (score>60):
print("你及格了")
elif(score<60):
print("你不及格")
else :
print("你剛好及格")
```
:::
>輸出:
>你剛好及格
```python=
if (score>60):
print("你及格了")
```
+ `if`後面括號`()`內需放`布林值`來判定是否繼續執行下行==縮排==的陳述式。
+ 因為`score`不滿足條件`score>60`,所以沒有執行`print("你及格了")`
```python=
elif(score<60):
print("你不及格")
```
+ `elif`為接續前面`if`判斷失敗後,繼續進行條件判斷
+ `elif`後面括號`()`內需放`布林值`來判定是否繼續執行下行==縮排==的陳述式。
+ 因為`score`不滿足條件`score<60`,所以沒有執行`print("你不及格")`
```python=
else:
print("你剛好及格")
```
+ else 為接續前面elif或者if判斷失敗後,直接執行else中的陳述式
### 範例二: if elif else間的組合
```cpp=
a=9
b=15
c=11
#a=9 , b=15 ,c=11
if (a==9):
print("a==9是對的") #輸出結果時,此行有被執行
elif(b==15):
print("b==15是對的")
#----------------------
if (c==1):
print("c==1是對的")
else:
print("c不等於1") #輸出結果時,此行有被執行
#------------------------
if (a==10):
print("a==10 為真")
#----------------------
if (b==20):
print("b==20 為真")
#--------------------------
if (c==11):
print("c==11 為真") #輸出結果時,此行有被執行
```
>輸出結果:
> a\==9是對的
> c不等於1
> c\==11 為真
### 練習1: BMI判斷
+ 練習設計一個BMI判斷函式
+ 輸入為BMI(身高,體重),身高單位為公分,體重單位為公斤
```python=
def BMI(h ,w ):
#建立一個單位為公尺的身高變數newh,為公分要除100
newh=h/100
#BMI計算: (體重/身高平方)
bmi = w / (newh*newh)
print("你的BMI是: ",bmi)
'''
if(...):
大於23,印出過重...
elif(...):
小於等於23,大於等於18,印出適中...
else:
小於18,印出太輕...
'''
print("---------------------")#印出一行'-'來做不同次呼叫本函數的區隔
#呼叫BMI函式
BMI(170,100)
BMI(200,10)
BMI(170,60)
```
### 解答1
```python=
def BMI(h ,w ):
#建立一個單位為公尺的身高變數newh,為公分要除100
newh=h/100
#BMI計算: (體重/身高平方)
bmi = w / (newh*newh)
print("你的BMI是: ",bmi)
if(bmi>23):
print("你的bmi太高")
elif(bmi>=18 and bmi<=23):
print("你的bmi適中")
else:
print("你的bmi太輕")
print("---------------------")#印出一行'-'來做不同次呼叫本函數的區隔
#呼叫BMI函式
BMI(170,100)
BMI(200,10)
BMI(170,60)
```
### 練習2: 判斷是否為三角形
+ 設計函式istriangle(a,b,c)
+ 判斷給予的三邊a,b,c是否能形成三角形,
:::info
**提示**
+ 透過三邊長三角形
+ 概念:兩邊加起來要大於第三邊
+ 海龍公式(Heron's formula):
+ 用三角形三邊邊長來算出面積
+ 假設三角形三邊邊長為 `a`, `b`, `c`,令 `s` = $\frac{(a+b+c)}{2}$
則 三角形面積 = $\sqrt{s(s-a)(s-b)(s-c)}$
:::
```python=
def istriangle(a,b,c):
#a+b>c,a+c>b,b+c>a 來判別
if (...):
#都滿足便是三角形,所以印出"是三角形"
#透過海龍公式印出三角形面積
...
else:
...
#其他狀況,印出不能形成三角形
istriangle(1,2,3)
istriangle(3,2,3)
istriangle(4,5,7)
```
### 解答2
```python=
def istriangle(a,b,c):
s=(a+b+c)/2
S1= (s*(s-a)*(s-b)*(s-c)) ** (1/2)
#a+b>c,a+c>b,b+c>a 來判別
if (a+b>c and a+c>b and b+c>a):
print("是三角形")
print("三角形面積是: ",S1)
else:
print("不是三角形")
#其他狀況,印出不能形成三角形
print("--------------------")
istriangle(1,2,3)
istriangle(3,2,3)
istriangle(4,5,3)
```
### 練習題3 : 加分判別
>設計一個加分函數,平均90以上各科加5分
>設計一個加分函數,平均60以上各科加8分
>設計一個加分函數,不到60各科加12分
```python=
def bonusPoint(chi,eng,math):
new_chi=0
new_eng=0
new_math=0
if()
...
elif()
...
...
else
...
return new_chi ,new_eng ,new_math
x,y,z=bonusPoint(90,50,33)
print("新分數",x,y,z)
print("--------------------")
x,y,z=bonusPoint(90,80,73)
print("新分數",x,y,z)
print("--------------------")
x,y,z=bonusPoint(60,50,13)
print("新分數",x,y,z)
print("--------------------")
```