選擇結構
tags: python
Relational Operators 比較運算子
有六種比較運算子,他們運算的結果都會是True或是False。 < : 是否小於 > : 是否大於 <=: 是否小於等於 >=: 是否大於等於 ==: 是否等於 !=: 是否不等於
例如 (3 < 2)是錯的,那麼這個運算就會得到 False的結果;(7 > 2)是對的,就會得到True。
The if Statement
if(condition):
do_somethingif(condition):
do_something
elif(condition2):
do_somethingif(condition):
do_something
elif(condition2):
do_something
else:
do_something_elseif小括號內寫條件,若條件成立,則做冒號後面的事情。「同一個縮排」內可以做任何事情,甚至繼續寫if進行別的判斷也可以! elif代表 else if,用elif的話,前者不成立,才會往下判斷,判斷到成立的,就不會繼續判斷了。 可以試試看連續使用if跟使用if, elif的差別。
倍數判斷
寫一個程式,判斷輸入的整數是否為2的倍數。
st=>start: Start
e=>end: 是2的倍數
cond=>condition: iNum%2 == 0?
iNum=>inputoutput: 輸入一個整數iNum
e2=>end: 不是2的倍數
st->iNum->cond
cond(yes)->e
cond(no)->e2iNum = int(input())
if(iNum%2==0):
print("%d是2的倍數" % iNum)
else:
print("%d不是2的倍數" % iNum)試試看,改編這個程式變成輸入兩個值,n, iNum。判斷iNum是否為n的倍數。
成績判斷
寫一個程式,判斷輸入的成績:
- 60分以上,通過。
- 40分以上,但不足60分,可以補考。
- 未滿40分,不能補考,要重修。
in=>inputoutput: 輸入一個成績 score
cond1=>condition: score >= 60
cond2=>condition: score >= 40
ok=>end: 通過
補=>end: 可以補考
修=>end: 重修
in->cond1
cond1(yes)->ok
cond1(no)->cond2
cond2(yes)->補
cond2(no)->修註:不是只有一種寫法哦!嘗試不同的流程圖,並做出不同的程式!
BMI計算
in=>inputoutput: 輸入身高height、體重weight
cal=>operation: BMI=體重/身高平方
cond1=>condition: BMI低於18.5
cond2=>condition: BMI介於18.5至24
too_light=>end: 過輕
normal=>end: 正常
overweight=>end: 過重
in->cal->cond1
cond1(yes)->too_light
cond1(no)->cond2
cond2(yes)->normal
cond2(no)->overweightheight = 183
weight_now = 54
BMI = weight_now / (height/100) / (height/100)
print("%.2f" % (BMI))
# 18.5<=BMI<24
weight_low = 18.5*(height/100)*(height/100)
weight_high = 24*(height/100)*(height/100)
print("以身高%.2f公分而言,體重介於 %.2f 到 %.2f 之間是正常體重" % (height, weight_low, weight_high))
if(weight_now < weight_high and weight_now > weight_low):
print("您的體重正常唷<3")
# else if
elif(weight_now < weight_low):
print("你的體重過輕!快吃胖胖")
else(weight_now > weight_high):
print("你的體重很不錯,繼續吃!")試試看將身高、體重用input()讓使用者自行輸入!
Logic Operators 邏輯運算子
在很多程式語言中,如果我們想要進行連續比較,例如 (1 < 2 < 3),要將其拆開成 (1 < 2) 且 (2 < 3)。原因是,比較運算子也是一種二元運算,一次只能對兩個元進行運算,所以會先算(1 < 2)得到 true,但(true < 3) 沒辦法進行運算。 如果我們將其拆開就變成 (1 < 2)得到true, (2 < 3) 得到true,兩者同時都是true 所以結果為true。 沒錯,邏輯值可以與邏輯值進行運算,常見的運算是「or 或」 跟 「and 且」。 「或」只要一個對,就是對;「且」要兩者都對,才算對。
註:在Python中,可以直接連續寫哦!例如:1 < 2 < 3是true
| OR | T | F |
|---|---|---|
| T | T | T |
| F | T | F |
| AND | T | F |
|---|---|---|
| T | T | F |
| F | F | F |
判斷是否為2且3的倍數
iNum = 60
if (iNum%2 == 0 and iNum%3 == 0):
print("%d是2的倍數,也是3的倍數。")
elif (iNum%2 == 0):
print("%d是2的倍數但不是3的倍數。")
elif (iNum%3 == 0):
print("%d是3的倍數但不是2的倍數。")
else:
print("%d不是2的倍數也不是3的倍數。")- 試試看將
iNum改成其他數字,如63、62、61,想想他們的差異。 - 如果把條件調換順序會發生什麼事?為什麼?
巢狀結構Nesetd Structure
if裡面完整地包含另一個if,我們就稱它作巢狀結構。
Bad Practice
巢狀結構如果太多層會變得難以閱讀,像這個例子: 心理測驗