# Python : 迴圈
###### tags: `python` `九年級`
> 流程控制結構,用來重複執行多次某些指令
## 一、 For迴圈
> For迴圈的特色為可以配合特定的變數( i, j, k )來控制迴圈的執行方式。
### 1. Range函數
+ 內建函數之一,可以返回一組整數數值。
+ 常用於For迴圈
+ 該函數回傳的資料類型為**串列**
|不同參數傳入|說明|表示範圍|
|:------|:------|:------|
|range( 10 )|表示為 `0` 至 `傳入整數-1` 的整數範圍|[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]|
|range( 1, 10)|表示為 `第一個傳入整數` 至 `第二個傳入整數-1` 的整數範圍|[1, 2, 3, 4, 5, 6, 7, 8, 9]|
|range( 1, 10, 3)|表示 `1`開始,每次間隔`+3`並且大小低於`10`的整數|[1, 4, 7]|
### 2. For迴圈基本結構
+ 以下透過範例說明迴圈結構
#### 範例1-1
```python=
for i in range(10):
print(i)
```
輸出:
>0
>1
>2
>3
>4
>5
>6
>7
>8
>9
#### 範例1-1說明
```python=
for i in range(10):
```
+ 使用`for`時需要宣告變數,一般我們習慣用`i`, `j`, `k`來命名
+ 變數後方需要設定此迴圈的範圍來依序重複執行,透過 `in` 與 `range()`來設定該變數`i`的範圍
+ `range(10)` 表示 `[0,1,2,3,4,5,6,7,8,9]`
+ 所以此迴圈會執行==10==次,每次`i`的值依序為 ==0,1,2,3,4,5,6,7,8,9==
```python=
for i in range(10):
print(i)
```
+ **冒號下方開始的==縮排==區塊,為For迴圈重複執行的區塊**
+ 只有一行`print(i)`,表示每次執行迴圈時,將`i`透過`print()`函數印出來
+ 歷次執行過程如下表
:::info
```python=
for i in range(10): #range(10)=[0,1,2,3,4,5,6,7,8,9]
print(i)
```
+ 第1次:
+ 程式到第1行, i被設定為 `0`
+ 程式來到第2行,執行 `print(i)` ,把 `0` 印出來
+ 第2次:
+ 程式到第1行, i被設定為 `1`
+ 程式來到第2行,執行 `print(i)` ,把 `1` 印出來
+ 第3次:
+ 程式到第1行, i被設定為 `2`
+ 程式來到第2行,執行 `print(i)` ,把 `2` 印出來
...
+ 第8次:
+ 程式到第1行, i被設定為 `7`
+ 程式來到第2行,執行 `print(i)` ,把 `7` 印出來
+ 第9次:
+ 程式到第1行, i被設定為 `8`
+ 程式來到第2行,執行 `print(i)` ,把 `8` 印出來
+ 第10次:
+ 程式到第1行, i被設定為 `9`
+ 程式來到第2行,執行 `print(i)` ,把 `9` 印出來
:::
___
#### 範例1-2
+ 請觀察下列範例輸出結果,研究該程式的執行順序
+ 觀察i的值在迴圈結束後,迴圈外的輸出結果為何
```python=
for i in range(3): #range()=[0,1,2]
print("迴圈內",i)
print("迴圈內",i)
print("->到迴圈外了",i)
```
>輸出結果:
>迴圈內 0
迴圈內 0
迴圈內 1
迴圈內 1
迴圈內 2
迴圈內 2
->到迴圈外了 2
___
## 二、break
+ 當我們執行到一半突然想終止迴圈時,可以透過`break`指令來中止迴圈
+ 通常是配合條件式使用
#### 範例2-1 : 直接用break
+ 觀察以下範例,直接使用break後,迴圈會在執行到break時直接中止。
```python=
for i in [0,1,2,3,4]:
break
print(i)
print(i)
```
>輸出結果:
>0
+ 迴圈在第一次 i設定為0時,執行到break便中止該迴圈,所以print(i)會印出0
#### 範例2-2 : 找出23與15的第100個倍數
+ 一般來說是配合條件分支使用,才能展現出其功能
```python=
#設定變數count來數第幾個公倍數
count=0
#設定一個較大的範圍讓迴圈能確認到第100個公倍數
for i in range(1,100001):
#如果i能被15與23整除,則是公倍數,所以count加一次
if(i%15==0 and i%23==0):
count+=1
#加到第100次停止迴圈
if(count>=100):
break
#跳出到迴圈外後,印出i,便是第100個公倍數
print(i)
```
>輸出結果:
>34500
### 三、continue
+ 直接進行下一次的迴圈
+ 配合條件式使用
#### 範例3-1 : 100000內的奇數有幾個?
+ 透過continue 來幫助我們計算
```python=
#設定變數count來數第幾個奇數
count=0
#計算1~100000的奇數
for i in range(1,100001):
#2的倍數就直接進行下次迴圈
if(i%2==0):
continue
#count數一次
count+=1
#印出count
print(count)
```