# 循環## 目標* 程序的三大流程* while 循環基本使用* break 和 continue* while 循環嵌套## 01. 程序的三大流程* 在程序開發中,一共有三種流程方式: * **順序** —— **從上向下**,順序執行代碼 * **分支** —— 根據條件判斷,決定執行代碼的 **分支** * **循環** —— 讓 **特定代碼 重複** 執行

## 02. `while` 循環基本使用* 循環的作用就是讓 **指定的代碼** 重複的執行* `while` 循環最常用的應用場景就是 **讓執行的代碼** 按照 **指定的次數** **重複** 執行* 需求 —— 列印 5 遍 `Hello Python`* 思考 —— 如果要求列印 100 遍怎麼辦?### 2.1 `while` 語句基本語法```python初始條件設置 —— 通常是重複執行的 計數器while 條件(判斷 計數器 是否達到 目標次數): 條件滿足時,做的事情1 條件滿足時,做的事情2 條件滿足時,做的事情3 ...(省略)... 處理條件(計數器 + 1)```**注意**:* `while` 語句以及縮進部分是一個 **完整的代碼塊**#### 第一個 while 循環**需求*** 列印 5 遍 Hello Python```while# 1. 定義重複次數計數器i = 1# 2. 使用 while 判斷條件while i <= 5: # 要重複執行的代碼 print("Hello Python") # 處理計數器 i i = i + 1print("循環結束後的 i = %d" % i)```> 注意:循環結束後,之前定義的計數器條件的數值是依舊存在的#### 死循環> 由於程式設計師的原因,**忘記** 在循環內部 **修改循環的判斷條件**,導致循環持續執行,程序無法終止!### 2.2 賦值運算符* 在 Python 中,使用 `=` 可以給變量賦值* 在算術運算時,為了簡化代碼的編寫,`Python` 還提供了一系列的 與 **算術運算符** 對應的 **賦值運算符*** 注意:**賦值運算符中間不能使用空格**| 運算符 | 描述 | 實例 || --- | --- | --- || = | 簡單的賦值運算符 | c = a + b 將 a + b 的運算結果賦值為 c || += | 加法賦值運算符 | c += a 等效於 c = c + a || -= | 減法賦值運算符 | c -= a 等效於 c = c - a || *= | 乘法賦值運算符 | c *= a 等效於 c = c * a || /= | 除法賦值運算符 | c /= a 等效於 c = c / a || //= | 取整除賦值運算符 | c //= a 等效於 c = c // a || %= | 取 **模** (餘數)賦值運算符 | c %= a 等效於 c = c % a || **= | 冪賦值運算符 | c **= a 等效於 c = c ** a |### 2.3 Python 中的計數方法常見的計數方法有兩種,可以分別稱為:* **自然計數法**(從 `1` 開始)—— 更符合人類的習慣* **程序計數法**(從 `0` 開始)—— 幾乎所有的程序語言都選擇從 0 開始計數因此,大家在編寫程序時,應該儘量養成習慣:**除非需求的特殊要求,否則 循環 的計數都從 0 開始**### 2.4 循環計算> 在程序開發中,通常會遇到 **利用循環** **重複計算** 的需求遇到這種需求,可以:1. 在 `while` 上方定義一個變量,用於 **存放最終計算結果**2. 在循環體內部,每次循環都用 **最新的計算結果**,**更新** 之前定義的變量**需求*** 計算 0 ~ 100 之間所有數字的累計求和結果```python# 計算 0 ~ 100 之間所有數字的累計求和結果# 0. 定義最終結果的變量result = 0# 1. 定義一個整數的變量記錄循環的次數i = 0# 2. 開始循環while i <= 100: print(i) # 每一次循環,都讓 result 這個變量和 i 這個計數器相加 result += i # 處理計數器 i += 1print("0~100之間的數字求和結果 = %d" % result)```#### 需求進階* 計算 0 ~ 100 之間 所有 **偶數** 的累計求和結果開發步驟1. 編寫循環 **確認** **要計算的數字**2. 添加 **結果** 變量,在循環內部 **處理計算結果**```python# 0. 最終結果result = 0# 1. 計數器i = 0# 2. 開始循環while i <= 100: # 判斷偶數 if i % 2 == 0: print(i) result += i # 處理計數器 i += 1print("0~100之間偶數求和結果 = %d" % result)```## 03. break 和 continue> `break` 和 `continue` 是專門在循環中使用的關鍵字* `break` **某一條件滿足時**,退出循環,不再執行後續重複的代碼* `continue` **某一條件滿足時**,不執行後續重複的代碼> `break` 和 `continue` 只針對 **當前所在循環** 有效

### 3.1 break* **在循環過程中**,如果 **某一個條件滿足後**,**不** 再希望 **循環繼續執行**,可以使用 `break` 退出循環```pythoni = 0while i < 10: # break 某一條件滿足時,退出循環,不再執行後續重複的代碼 # i == 3 if i == 3: break print(i) i += 1print("over")```> `break` 只針對當前所在循環有效### 3.2 continue* **在循環過程中**,如果 **某一個條件滿足後**,**不** 希望 **執行循環代碼,但是又不希望退出循環**,可以使用 `continue`* 也就是:在整個循環中,**只有某些條件**,不需要執行循環代碼,而其他條件都需要執行```pythoni = 0while i < 10: # 當 i == 7 時,不希望執行需要重複執行的代碼 if i == 7: # 在使用 continue 之前,同樣應該修改計數器 # 否則會出現死循環 i += 1 continue # 重複執行的代碼 print(i) i += 1```* 需要注意:使用 `continue` 時,**條件處理部分的代碼,需要特別注意**,不小心會出現 **死循環**> `continue` 只針對當前所在循環有效## 04. `while` 循環嵌套### 4.1 循環嵌套* `while` 嵌套就是:`while` 裡面還有 `while````pythonwhile 條件 1: 條件滿足時,做的事情1 條件滿足時,做的事情2 條件滿足時,做的事情3 ...(省略)... while 條件 2: 條件滿足時,做的事情1 條件滿足時,做的事情2 條件滿足時,做的事情3 ...(省略)... 處理條件 2 處理條件 1```### 4.2 循環嵌套演練 —— 九九乘法表#### 第 1 步:用嵌套列印小星星**需求*** 在控制臺連續輸出五行 `*`,每一行星號的數量依次遞增```***************```* 使用字符串 * 列印```python# 1. 定義一個計數器變量,從數字1開始,循環會比較方便row = 1while row <= 5: print("*" * row) row += 1```#### 第 2 步:使用循環嵌套列印小星星**知識點** 對 `print` 函數的使用做一個增強* 在默認情況下,`print` 函數輸出內容之後,會自動在內容末尾增加換行* 如果不希望末尾增加換行,可以在 `print` 函數輸出內容的後面增加 `, end=""`* 其中 `""` 中間可以指定 `print` 函數輸出內容之後,繼續希望顯示的內容* 語法格式如下:```python# 向控制臺輸出內容結束之後,不會換行print("*", end="")# 單純的換行print("")```> `end=""` 表示向控制臺輸出內容結束之後,不會換行**假設** `Python` **沒有提供** 字符串的 `*` 操作 **拼接字符串****需求*** 在控制臺連續輸出五行 `*`,每一行星號的數量依次遞增```***************```**開發步驟*** 1> 完成 5 行內容的簡單輸出* 2> 分析每行內部的 `*` 應該如何處理? * 每行顯示的星星和當前所在的行數是一致的 * 嵌套一個小的循環,專門處理每一行中 `列` 的星星顯示 ```pythonrow = 1while row <= 5: # 假設 python 沒有提供字符串 * 操作 # 在循環內部,再增加一個循環,實現每一行的 星星 列印 col = 1 while col <= row: print("*", end="") col += 1 # 每一行星號輸出完成後,再增加一個換行 print("") row += 1```#### 第 3 步: 九九乘法表**需求** 輸出 九九乘法表,格式如下:```1 * 1 = 1 1 * 2 = 2 2 * 2 = 4 1 * 3 = 3 2 * 3 = 6 3 * 3 = 9 1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16 1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25 1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36 1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49 1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64 1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81```**開發步驟*** 1. 列印 9 行小星星```*********************************************```* 2. 將每一個 `*` 替換成對應的行與列相乘```python# 定義起始行row = 1# 最大列印 9 行while row <= 9: # 定義起始列 col = 1 # 最大列印 row 列 while col <= row: # end = "",表示輸出結束後,不換行 # "\t" 可以在控制臺輸出一個制表符,協助在輸出文本時對齊 print("%d * %d = %d" % (col, row, row * col), end="\t") # 列數 + 1 col += 1 # 一行列印完成的換行 print("") # 行數 + 1 row += 1```**字符串中的轉義字符*** `\t` 在控制臺輸出一個 **制表符**,協助在輸出文本時 **垂直方向** 保持對齊* `\n` 在控制臺輸出一個 **換行符**> **制表符** 的功能是在不使用表格的情況下在 **垂直方向** 按列對齊文本| 轉義字符 | 描述 || --- | --- || \\\\ | 反斜槓符號 || \\' | 單引號 || \\" | 雙引號 || \n | 換行 || \t | 橫向制表符 || \r | 回車 |
