---
# System prepended metadata

title: 3/19 Python與資料分析#3 - 流程控制
tags: [python, 資料分析]

---

# 3/19 Python與資料分析#3 - 流程控制

## 目的

1. 迭代，某件事要跑很多次
2. 某些條件下才要跑某些敘述

## 條件敘述(Condition)的要件

1. 條件敘述必須可以被判定True/False

比較運算：== != > < >= <= in not in
邏輯運算：and or not

2. 用縮排表示結構（同一層縮排空隔數一致即可，常用tab，IDE也會根據需要自動縮排）

## Condition

if :conditional executions
if/else :alternative executions
if/elif.../else :chained condition

有else可以讓所有條件都被考慮到
也可以巢狀多層使用

### if if if vs if elif else
如果條件完全互斥，兩者意思一樣
若條件有交集，結果可能不一樣
（elif else會依照順序判斷，判斷過就不會再做了，不同順序跑出來的結果可能不一樣）


## 迭代Iteration

Star/Stop/Step

### for - 把Step當成可以某個可以迭代的對象/結構，若進行到該對象的結尾就停止

```
for i in ITERABLE:#Star/Stop/Step
    #Statement
```

ITERABLE可以是：
* 直接給定一個list/tutple
* str（一個一個字往下）(int float bool都不能)
以上都只要寫 for i in list或字串或其名稱
* in range(起, 終但不包含, 間隔) 
* dictionary
a是個dic
a.keys()
a.values()
a.items() 以上就會是有key/value/all的結構
for i in a.keys()
for i in a.values()
for i j in a.items() 需要兩個變數，若print會用tuple呈現

#### iter() next()

a = iter("abcd")
print(next(a)) 打一次就可以輸出一個字

#### range:
type(range()) = range
print(range()) = range()
list(range()) 可用list形式輸出所有資料（在迴圈裡面不用寫這個）



### while - 若contidion是True就繼續運行，自行創造間隔跟起始終點

```
i=0  #Start
while 某個condition: #Stop的時機(false的時候)
    #Statement
    i = i+1 #Step 也可以寫成i+=1
```

#### while vs for

給定特定可迭代對象：推薦用for
迭代對象不確定且重複性任務出現隨機或不確定性：可用while

可以視覺化程式碼的網站
http://www.pythontutor.com/visualize.html#mode=edit



## 迭代的時機

印出、取得想要的資料或合併(combination)、加總或計數、朝狀結構整理...

combination: 先製造空的list，再append要的東西進去
簡單的計數加總可以使用sum()、len()

巢狀整理舉例（取得dic的資料，使用dic的迭代）
```
batman_trilogy = {
    "titles": ["Batman Begins", "The Dark Knight", "The Dark Knight Rises"],
    "release_dates": ["June 15, 2005", "July 18, 2008", "July 20, 2012"],
    "director": ["Christopher Nolan", "Christopher Nolan", "Christopher Nolan"]
}

for v in batman_trilogy.values():　# 剝去最外層
    for i in v: # 往內剝
        print(i)

# 輸出：
Batman Begins
The Dark Knight
The Dark Knight Rises
June 15, 2005
July 18, 2008
July 20, 2012
Christopher Nolan
Christopher Nolan
Christopher Nolan
```

### 迭代特殊情況語法

break 提早結束迴圈
continue 略過後面的敘述，繼續迴圈

###### tags: `python` `資料分析`