# Python if
資訊之芽 Python 語法班 2023/03/12
鄧人豪
---
## 課程大綱 Outline
----
1. 課程回顧
2. 比較運算子
3. 邏輯運算子
4. if 基本語法
5. 補充
---
## 課程回顧 Recap
----
### 輸出
```python=
print("Hello World")
```
----
### 變數
```python=
aInteger = 100
aFloat = 123.456
aString = "Hello World"
aBool = True
print(type(aInteger)) # <class 'int'>
print(type(aFloat)) # <class 'float'>
print(type(aString)) # <class 'str'>
print(type(aBool)) # <class 'bool'>
```
----
### 輸入
```python=
number = int(input("請輸入一個數字"))
print(number)
```
----
### 運算子
```python=
x = 9
y = 3
print(x + y) # 12
print(x - y) # 6
print(x * y) # 27
print(x / y) # 3.0
```
---
## 比較運算子 Comparison Operators
----
### 比較運算子
- `<`, `>`: 小於, 大於
- `<=`, `>=`: 小於等於, 大於等於
- `==`, `!=`: 等於, 不等於
----
### 範例
```python=
print(2 < 1) # False
print(2 > 1) # True
print(2 <= 1) # False
print(2 >= 1) # True
print(2 == 1) # False
print(2 != 1) # True
print(1 == 1) # True
print(1 <= 1) # True
print(1 >= 1) # True
```
----
### 注意!!!
#### `=` 與 `==` 不一樣喔
- `=` 用來 **指定** 變數的值
- `==` 用來 **比較** 是否相等
----
### `=` 與 `==` 不一樣
```python=
x = 2
y = 3
print(x == y) # False
print(x = y) # 3
print(x) # 3
print(y) # 3
```
----
### 那這樣呢?
```python=
x = 2
y = 3
bool1 = x == y
bool2 = x = y
print(bool1) # False
print(bool2) # 3
print(x) # 3
print(y) # 3
```
----
### 比較規則 Comparison Rule
----
- 相同的型態才能比較 (`==`與`!=`例外)
- 數字排序:依照大小
- 字串排序:從左到右一位一位進行比較
----
### 舉個例子
```python=
print(20 == "20") # False
print(20 >= "20") # TypeError
```
```python=
print("abc" > "abd") # False
print("22" > "111") # True
```
----
### Questions?
---
## 邏輯運算子 Logical Operators
----
### 邏輯運算子
- True: 真, False: 假
- A `and` B: A 且 B
- A, B 都為 True,「A and B」才為 True
- A, B 只要有一個為 False,「A and B」就為 False
- A `or` B: A 或 B
- A, B 只要其中一個為 True,「A or B」就為 True
- A, B 都為 False,則「A or B」才為 False
- `not` A: 非 A
- True 變 False、False 變 True
----
### 真值表 Truth Table
| A | B | A and B | A or B | not A |
| ----- | ----- | ------- | ------ | ----- |
| True | True | True | True | False |
| True | False | False | True | False |
| False | True | False | True | True |
| False | False | False | False | True |
----
### 範例
```python=
print(2 > 1 and 3 > 2) # True
print(1 > 2 and 3 > 2) # False
print(1 > 2 or 3 > 2) # True
print(1 > 2 or 2 > 3) # False
```
----
### 進階範例
```python=
print(not True and False or True or False) # True
print(not((True and False) or (True or False))) # False
```
[Operator Precedence:](https://docs.python.org/3/reference/expressions.html#operator-precedence) not > and > or
----
### Questions?
---
## if-else 基本語法
----
### 情境
- 如果年紀小於等於 8 歲,則遊樂園入場費打 1 折
- 如果年紀小於等於 12 歲,則只需要一半的入場費
- 如果年紀大於等於 65 歲,則入場費打 8 折
- 如果都不符合則是全票
----
```python=
fee = 1000
age = int(input("請輸入你的年紀"))
if age <= 8: # 如果年紀小於等於 8 歲
fee = fee * 0.1 # 遊樂園入場費打 1 折
print(fee)
```
注意:冒號與縮排(後面說明)
----
### 這樣正確嗎?
```python=
fee = 1000
age = int(input("請輸入你的年紀"))
if age <= 8: # 如果年紀小於等於 8 歲
fee = fee * 0.1 # 遊樂園入場費打 1 折
if age <= 12: # 如果年紀小於等於 12 歲
fee = fee * 0.5 #只需要一半的入場費
print(fee)
```
----
### 解決辦法:使用 if-elif-else
```python=
fee = 1000
age = int(input("請輸入你的年紀"))
if age <= 8: # 如果年紀小於等於 8 歲
fee = fee * 0.1 # 遊樂園入場費打 1 折
elif age <= 12: # 如果年紀小於等於 12 歲
fee = fee * 0.5 # 只需要一半的入場費
elif age >= 65: # 如果年紀大於等於 65 歲
fee = fee * 0.8 # 入場費打 8 折
else: # 如果都不符合則是全票
print("乖乖買全票吧~")
print(fee)
```
----
### 條件句重點整理
1. 一定會是 if 開頭,其他 (elif, else) 都是非必要的
2. 上一個條件不符合時,如果要繼續判斷下一個條件,則用 elif
3. 如果前面全部的條件都不符合的時候,用 else
4. 一個條件句中的數量:
- if: 必定只有一個在開頭
- elif: 可以有 0 個或很多個,而且在 if 的後面、else 的前面
- else: 可有可無,但最多只會有一個,而且一定是在條件句的最後
----
### 再來一個範例
```python=
score = int(input("請輸入你的成績"))
if score >= 90:
print("你獲得了 A+")
elif score >= 85:
print("你獲得了 A")
elif score >= 80:
print("你獲得了 A-")
elif score >= 60:
print("你至少及格了~")
else:
print("你被當了(´・ω・`)")
```
----
### 覺得混亂就畫流程圖看看吧~
![](https://i.imgur.com/iBQpxrK.jpg)
Note:
https://drive.google.com/drive/folders/1eW1YUmnGgn1_kCZW23e04Pk2isBYubM5
----
### Questions?
---
## 縮排 Indentation
- 縮排就是程式前面的幾個空白
- 通常用 1 個 Tab 或 4 個 Space
- Python 以冒號「:」與縮排來表示程式區塊
- 同個區塊內的空白數都要相同
----
### 錯誤範例
```python=
if 10 > 5:
print("原來 10 大於 5 啊") # IndentationError 缺少縮排
print("End")
```
```python=
if 10 > 5:
print("原來 10 大於 5 啊")
print("End") # IndentationError 縮排的空白數不同
```
```python=
if 10 > 5 # SyntaxError 缺少冒號
print("原來 10 大於 5 啊")
print("End")
```
----
### 正確範例
```python=
if 10 > 5:
print("原來 10 大於 5 啊")
print("End")
```
----
### 區塊範圍
同樣的縮排空白數代表在同個區塊中
範例1:
```python=
if 5 > 10:
print("原來 5 大於 10 啊")
print("End")
```
VS
```python=
if 5 > 10:
print("原來 5 大於 10 啊")
print("End")
```
----
範例2:
```python=
age = int(input("請輸入你的年紀"))
if age >= 18:
print("你成年了")
if age >= 65:
print("你也老了...")
else:
print("你還沒成年")
```
VS
```python=
age = int(input("請輸入你的年紀"))
if age >= 18:
print("你成年了")
if age >= 65:
print("你也老了...")
else:
print("你還沒老")
```
----
### 注意!區塊內不可以是空的喔
錯誤範例
```python=
if 10 > 5:
# 註解也不算程式碼喔
```
- 解決辦法:用 pass
- pass 不會做任何事,但可以讓空的區塊不會出現 error
```python=
if 10 > 5:
# 註解也不算程式碼喔
pass
```
----
### 快樂的練習時間 ( ̄▽ ̄)~*
[neoj 3010 野豬騎士來囉](https://neoj.sprout.tw/problem/3010/)
----
### 巢狀 Nested if
```python=
a, b, c = 1, 2, 3
if c > b:
if c > a:
print("c is the biggest number")
```
```python=
a, b, c, d = 1, 2, 3, 4
if d > c:
if d > b:
if d > a:
print("d is the biggest number")
```
----
### 但拜託別這樣做 (。﹏。*)
![](https://i.imgur.com/avDXmv8.png)
----
### 請善用邏輯運算子
```python=
a, b, c, d = 1, 2, 3, 4
if d > c and d > b and d > a:
print("d is the biggest number")
```
----
### 但如果條件很多怎麼辦?
```python=
a = 13
if a == 2 or a == 3 or a == 5 or a == 7 or a == 11 or a == 13 or a == 17 or a == 19 or a == 23 or a == 29:
print("a 是 30 以內的質數")
else:
print("a 不是 30 以內的質數")
```
----
### 請用 `\` 換行
`\` 後必須直接換行,不可以有任何空白
```python=
a = 13
if a == 2 or a == 3 or a == 5 or \
a == 7 or a == 11 or a == 13 or \
a == 17 or a == 19 or a == 23 or \
a == 29:
print("a 是 30 以內的質數")
else:
print("a 不是 30 以內的質數")
```
----
### Questions?
----
### 又是快樂的練習時間 (๑•̀ㅂ•́)و✧
[neoj 3011 三元排序](https://neoj.sprout.tw/problem/3011/)
---
## 補充
----
### 稍長的程式碼
```python=
condition = False
a = 0
if condition:
a = 1
else:
a = -1
print(a)
```
----
### 三元運算子 Ternary Operator
```python=
condition = False
a = 1 if condition else -1
print(a)
```
----
### 真值測試 Truth Value Testing
----
### False
```python=
# Constants defined to be false
print(bool(False), bool(None))
# Zero of any numeric type
print(bool(0), bool(0.0))
# Empty sequences and collections
print(bool(''), bool(""), bool(()), bool([]), bool({}))
```
### 其他的都是 True
```python=
print(bool(True), bool(3), bool('abc'))
```
[Truth Value Testing](https://docs.python.org/3/library/stdtypes.html#truth-value-testing)
----
範例
```python=
a, b = 0, 3
if a:
print(a) # 不會 print 0,因為 bool(0) 等於 False
if b:
print(b) # 會 print 3,因為 bool(3) 等於 True
```
----
### Questions?
----
### 寫作業囉 ✧(≖ ◡ ≖✿)
[neoj 3401 超級貓貓星際漫遊-1](https://neoj.sprout.tw/problem/3401/)
[neoj 3402 超級貓貓星際漫遊-2](https://neoj.sprout.tw/problem/3402/)
---
# Thanks!
{"metaMigratedAt":"2023-06-17T22:12:13.709Z","metaMigratedFrom":"YAML","title":"Python if - 資訊之芽 2023 python 語法班","breaks":true,"contributors":"[{\"id\":\"4f7954d3-8899-4aaf-a4b8-756ab47563e1\",\"add\":9934,\"del\":2422}]"}