---
# System prepended metadata

title: 5-3 巢狀結構
tags: [chapter 5, Python]

---

###### tags: `chapter 5` `Python`
# 5-3 巢狀結構 #

假設今天給定一個問題：成績排名在第一名的同學，如果他的總平均超過90分，那頒發20000元獎學金，否則只有15000元。

這個問題需要比對每一個同學的成績，可以拆成兩個地方來看，分別是`這位同學是不是第一名`以及`他的總平均有沒有超過90分`。

你會怎麼實作呢？？

```python=3.7
score, rank = 91, 1
if score >= 90 and rank == 1 :
    print("獲得20000元!")
else :
    print("獲得15000元!")
```

這樣子寫對嗎?

如果實際設計測資去跑這段程式碼，你會發現，除了第一名以外的所有同學都可以拿到15000元哦~ ~~(yeah!!)~~。

為甚麼會這樣是因為在同時判斷分數大於90分以及排名等於1的時候會無法過濾掉根本就沒有領獎資格的學生(第2名之後的)，因此我們要用到接下來要介紹的==巢狀結構==。

`巢狀結構`指的是`if`裡面再包入一個`if`，~~其實不是一個多重要的名稱~~，但可以幫助我們解決更多的問題，有了巢狀結構的概念，我們可以這樣解決上述的問題。

```python=3.7
if rank == 1 :
    if score >= 90 :
        print("獲得20000元!")
    else :
        print("獲得15000元!")
else:
    print("沒有獎學金可以拿QAQ!")
```
轉換為流程圖的話是這個樣子：

![](https://i.imgur.com/jnGnkHU.png)


`巢狀結構`的寫法讓我們在第一個`if`就過濾掉了第1名以外的所有學生，因此不用怕其他學生有辦法拿到獎學金。