# 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` `資料分析`