---
# System prepended metadata

title: f.Python - 流程控制(Process Control)
tags: [Python]

---

# f.Python - 流程控制(Process Control)

###### tags: `Python`

## 1.簡潔的 Python 語法

* <font color="#0080FF">**Python 的 switch-case 語法**</font>

```python=+
def rank_S():
    return('Perfect!!')
def rank_A():
    return('Wonderful!!')
def rank_B():
    return('Great!!')
def rank_C():
    return('Nice!!')
def rank_D():
    return('Not Bad!!')

com = {'D':rank_D,'C':rank_C,'B':rank_B,'A':rank_A,'S':rank_S}
rank = 'A'
print(com[rank]())
```
<font color="#0080FF">**OR**</font>
```python=+
com = {'D':rank_D(),'C':rank_C(),'B':rank_B(),'A':rank_A(),'S':rank_S()}
rank = 'A'
print(com[rank])
```

> ```Wonderful!!```
## 
* <font color="#0080FF">**<!!>For 迴圈與 Tuple 解包多重設定變數**</font>

```python=+
ls = [(1,2),(3,7),(9,5)]

result = 0
for num1,num2 in ls:
    #一次設定兩個變數
    result = result + (num1 * num2)
    
print(result)
```

> ```68```

## 2.常用的 Method 與函式

* <font color="#0080FF">**enumerate() 將list、tuple元素取出並加上索引**</font>

```python=+
x = ['a','b','c']
list(enumerate(x))
```

> ```[(0, 'a'), (1, 'b'), (2, 'c')]```
##
* <font color="#0080FF">**enumerate() 與迴圈**</font>

```python=+
ls = ['ZEOxO','Andy','Bob']

for i,name in enumerate(ls):
    print("No." + str(i) + " -> " + name)
```

> ```No.0 -> ZEOxO```</br>
> ```No.1 -> Andy```</br>
> ```No.2 -> Bob```
##
* <font color="#0080FF">**zip()**</font>

> <font color="#EA0000">**zip()函式能將「兩個可走訪」的物件結合起來**</font>

```python=+
x = [1,2,3,4]
y = ('a','b','c')

z = zip(y,x) #只能結合3個對等的元素
list(z) #必須使用list查看
```

## 3.生成式和產生器(Generator)

* <font color="#0080FF">**List 生成式**</font>

> <font color="#EA0000">**建立一個新的 List**</font>

```python=+
x = [1,2,3,4]

x_squared = [item * item for item in x if item > 2]
x_squared
```
> ```[9, 16]```
##
* <font color="#0080FF">**Dict 生成式**</font>

```python=+
x = [1,2,3,4]

x_squared_dict = {item : item*item for item in x}
x_squared_dict
```

> ```{1: 1, 2: 4, 3: 9, 4: 16}```
##
* <font color="#0080FF">**產生器(Generator)**</font>

> <font color="#EA0000">**回傳一個產生器物件，可用for迴圈來走訪**</font>

```python=+
x = [1,2,3,4]

x_squared = (item * item for item in x)
x_squared
```

> ```<generator object <genexpr> at 0x7fc7cba96f50>```

## 4.布林值與運算式的真假運算

* <font color="#0080FF">**將 Python 物件作為布林值**</font>

```python=+
print('數字:',bool(0),bool(0.0),bool(0+0j))

print('字串:',bool("")) #除空字串，其餘字串皆為「True」
print('串列:',bool([])) #除空串列，其餘串列皆為「True」
print('元組:',bool(())) #除空元組，其餘元組皆為「True」
print('字典:',bool({})) #除空字典，其餘字典皆為「True」

print('None:',bool(None)) #None永遠為「False」
```

> ```數字: False False False```</br>
> ```字串: False```</br>
> ```串列: False```</br>
> ```元組: False```</br>
> ```字典: False```</br>
> ```None: False```
##
* <font color="#0080FF">**<!>將 Python 物件作邏輯運算**</font>

```python=+
[2] and [3,4] #找到「False」則停止並回傳，若無則傳回最後一個值
[] and 5
[2] or [3,4] #找到「True」則停止並回傳，若無則傳回最後一個值
[] or 5
```

> ```[3, 4]```</br>
> ```[]```</br>
> ```[2]```</br>
> ```5```
## 
* <font color="#0080FF">**Python 物件的 is - is not 判斷**</font>

```python=+
x = [0]
y = [x,1]
print(x is y[0]) #比較參照值(id)

x = [0] #x的id被更改了
print(x is y[0]) #比較參照值(id)
print(x == y[0]) #兩者的值仍然相同
```

> ```True```</br>
> ```False```</br>
> ```True```

##
* <font color="#0080FF">**Short-circuit Evaluation 短路求值**</font>

```python=+
x = 0
x <= 0 and print('x <= 0') #代替if-else判斷式
```

> ```x <= 0```



## 5.補充內容

* <font color="#0080FF">**用索引刪除 List 元素的隱藏 Bug**</font>

```python=+
x = [0,1,2,3,4,5,6,7]
for i,n in enumerate(x):
    if(i % 2 == 1):
        del(x[i]) #刪除奇數位置
        
#因陣列元素被刪除，導致元素往前遞補，結果不如預期
print(x)
```

> ```[0, 2, 3, 5, 6]```
##
* <font color="#0080FF">**(續)用索引刪除 List 元素的隱藏 Bug**</font>

```python=+
#改為從 List 後面開始刪除
x = [ele for ele in range(0,8)]
print(x)
for i in range(len(x)-1,-1,-1):
    if(i % 2 == 1):
        del(x[i]) #刪除奇數位置
        
print(x)
```

> ```[0, 2, 4, 6]```

## 時間戳記

> [name=ZEOxO][time=Thu, Aug 27, 2020 14:20 PM][color=#907bf7]