---
# System prepended metadata

title: 選擇結構
tags: [Python]

---

---
tags: Python
---

# 選擇結構

## 條件式

條件式指所有可以回傳真假值的式子，
像是 `a < b` `a == b` 等等都是條件式，
並且條件式也可以使用`and` `or`來合併，
因此條件式中常常會有關係運算子與邏輯運算子的蹤影。

---
## if-else-statement

`if` 可以篩選符合特定條件的變數做運算，若不符合則會直接跳過`if`中的程式碼。
寫法:
```python=
if 條件式:
    #code here
```

假設我要判斷一個輸入是否小於10，可以寫成以下程式碼:
```python=
num = int(input("輸入一個數字: "))
if num <= 10:
    print(num, "小於等於10")
```

當我們想要把大於10的也輸出出來，可能會先想到下列寫法:
```python=
num = int(input("輸入一個數字: "))
if num <= 10:
    print(num, "小於等於10")
if num > 10:
    print(num, "大於10")
```

看起來有許多重複，造成程式碼的條件有點冗長，是否有方法可以解決呢？
其實Python提供了 `else` 敘述，可以讓你包含所有不符合該條件式的情況(所以`else`必須寫在`if`後面)，
使用`else`可以改寫成:
```python=
num = int(input("輸入一個數字: "))
if num <= 10:
    print(num, "小於等於10")
else:
    print(num, "大於10")
```

當我們想要把等於10的情況也分隔出來，一開始可能會使用:
```python=
num = int(input("輸入一個數字: "))
if num < 10:
    print(num, "小於10")
else:
    if num == 10:
        print(num, "等於10")
    else:
        print(num, "大於10")
```
這種寫法稱為巢狀選擇結構。

但Python還提供了一個更方便的寫法 -- `elif` 敘述，
`elif`其實是`else if`的縮寫，就跟巢狀結構中使用 `else` 再寫 `if` 是一樣的功能。
改寫後的程式碼會如下:
```python=
num = int(input("輸入一個數字: "))
if num < 10:
    print(num, "小於10")
elif num == 10:
    print(num, "等於10")
else:
    print(num, "大於10")
```
可以看到在這個例子中使用 `elif` 的程式碼又變得更加簡潔，

巢狀結構與 `elif` 皆有適用的情形，看使用者的運用可以讓他更加容易閱讀。

---
## and or not的使用

我們可以在條件式中加入`and`或是`or`來合併多個條件式，
詳細`and` `or`的邏輯在[運算子](https://hackmd.io/@alanlin/operator)章節有講解過。
