---
# System prepended metadata

title: 迴圈(Loop)
tags: [迴圈, for, Python, while]

---

{%hackmd  @dzif24x25/IBXIWNXgTju0h2AKtSaLkA %}

###### tags: `Python` `迴圈` `for` `while`

# 迴圈(Loop)

### 如果今天想要列出1~10間的整數？

```python=
print(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
```

輸出結果：

```
1 2 3 4 5 6 7 8 9 10
```

### 如果今天想列出1~1000間的整數呢？

```python=
print(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ...以下省略...)
```

:::warning
這樣效率也太低了吧！
有沒有效率更高的方法呢？
:::

---

## 迴圈介紹
> 迴圈(loop)是電腦科學運算領域的用語，也是一種常見的控制流程。迴圈是一段在程式中只出現一次，但可能會連續執行多次的程式碼。迴圈中的程式碼會執行特定的次數，或者是執行到特定條件成立時結束迴圈，或者是針對某一集合中的所有項目都執行一次。
>
> Source: 維基百科 – 迴圈

有了迴圈，我們可以讓一段程式區塊依照特定的條件重複執行

---

## `while`迴圈

### 程式碼：
```python
while 條件敘述:
    程式區塊
```

:::info
註：若有程式區塊有多行，每一行程式的空格必須相同
```python
while 條件敘述:
****程式區塊
****程式區塊
****程式區塊
```
若有程式區塊只有單行，可以這樣寫：
```python
while 條件敘述: 程式區塊
```
:::

### 流程圖：

![](https://i.imgur.com/RQqXWFm.png =40%x)

### 範例 - 輸出 1~5：

程式碼：

```python=
i = 1
while i <= 5:
    print(i, end=' ')
    i += 1
```

輸出結果：

```
1 2 3 4 5
```

說明：

<video src="https://imgur.com/SrBc19u.mp4" autoplay muted=true controls loop=true width=100%></video>\

---

## range()函式

`range()`可產生指定範圍內的整數數字序列

### 程式碼：
```python
range(stop)
或
range(start, stop[, step])
```

> `start`：計數從start開始，預設是0
> `stop`：計數到stop結束(不含stop)
> `step`：每一數字的公差

### 範例1：
```python=
print(type(range(5)))
print(range(5))
print(list(range(5))) #list()可將輸入的容器轉換為list
```

輸出結果：
```
<class 'range'>
range(0, 5)
[0, 1, 2, 3, 4]
```

### 範例2：
```python=
print(type(range(5, 0, -1)))
print(range(5, 0, -1))
print(list(range(5, 0, -1))) #list()可將輸入的容器轉換為list
```

輸出結果：
```
<class 'range'>
range(5, 0, -1)
[5, 4, 3, 2, 1]
```

---

## `for` 迴圈

### 程式碼：
```python=
for 變數 in 可迭代物件(iterable object):
    程式區塊
```

> ### 迭代（iteration）：
>
> 重複回饋(feedback)過程的活動
>
> ### 可迭代物件(iterable object)：
> 
>可以從物件裡迭代取值的物件，例如：`list`、`tuple`、`dict`、`set`、`str`...等


:::info
註：若有程式區塊有多行，每一行程式的空格必須相同
```python
for 變數 in 可迭代物件:
****程式區塊
****程式區塊
****程式區塊
```
若有程式區塊只有單行，可以這樣寫：
```python
for 變數 in 可迭代物件: 程式區塊
```
:::


### 流程圖：

![](https://i.imgur.com/q3KudRn.png =40%x)


### 範例 - 輸出list中的元素：

```python=
birds = ['白頭翁', '麻雀', '綠繡眼', '黑冠麻鷺', '紅尾伯勞']
for bird in birds:
    print(bird)
```

輸出結果：
```
白頭翁
麻雀
綠繡眼
黑冠麻鷺
紅尾伯勞
```



### 範例 - 輸出 1~10：

```python=
for i in range(1, 11):
    print(i, end=' ')
```

輸出結果：
```
1 2 3 4 5 6 7 8 9 10 
```



### 範例 - n*m的乘法表：
```python=
n = 7
m = 5
for i in range(1, n+1):
    for j in range(1, m+1):
        print(f'{i}*{j}={i*j}', end='\t')
    print()
```

輸出結果：
```
1*1=1   1*2=2   1*3=3   1*4=4   1*5=5
2*1=2   2*2=4   2*3=6   2*4=8   2*5=10
3*1=3   3*2=6   3*3=9   3*4=12  3*5=15
4*1=4   4*2=8   4*3=12  4*4=16  4*5=20
5*1=5   5*2=10  5*3=15  5*4=20  5*5=25
6*1=6   6*2=12  6*3=18  6*4=24  6*5=30
7*1=7   7*2=14  7*3=21  7*4=28  7*5=35
```

## `break`

在迴圈中，例如：for迴圈、while迴圈，如果想要結束迴圈，可以使用break來結束

### 程式碼：
```python
while True:
    ...
    break
    ...
```

```python
for i in range(1, 11):
    ...
    break
    ...
```

### 範例 - 當遇到`'bye!'`就結束程式：
```python=
while True:
    n = input()
    if n == 'bye!':
        print('Goodbye!')
        break
    print('Hello, ', n)
```
輸出結果：
![](https://i.imgur.com/RbU8xPe.gif =100%x)

## `continue`

在迴圈中，例如：for迴圈、while迴圈，如果想要跳過迴圈的一回合，可以使用continue來跳過一回合。

### 程式碼：
```python
while True:
    ...
    continue
    ...
```

```python
for i in range(1, 11):
    ...
    continue
    ...
```

### 範例 - 當偵測到3的倍數時就跳過：

```python=
for i in range(0, 25):
    if i % 3 == 0:
        continue
    print(i, end=' ')
```

輸出結果：
```
1 2 4 5 7 8 10 11 13 14 16 17 19 20 22 23
```

:::info
點此前往簡報版： https://hackmd.io/@dzif24x25/rJd7YXOy3
:::