說起循環(huán),發(fā)一張圖,不知道能不能勾起大家小時(shí)候的回憶。
循環(huán)就是讓指定的代碼重復(fù)地執(zhí)行。
python 中的 while 語句用于循環(huán)執(zhí)行程序,即在某條件下,循環(huán)執(zhí)行某段程序,以處理需要重復(fù)處理的相同任務(wù)。
當(dāng)要求你在頁面上打印5遍“Hello Python”,你可以寫5行 print代碼,但是如果要求打印100行,1000行呢,這時(shí)就要使用 while 語句了。
一、while 語句基本語法
while 判斷條件(condition):
執(zhí)行語句(statements)……
執(zhí)行語句可以是單個(gè)語句或語句塊。
判斷條件可以是任何表達(dá)式,任何非零、或非空(null)的值均為true。
while 語句執(zhí)行的具體流程為:首先判斷條件表達(dá)式的值,其值為真(True)時(shí),則執(zhí)行代碼塊中的語句,當(dāng)執(zhí)行完畢后,再回過頭來重新判斷條件表達(dá)式的值是否為真,若仍為真,則繼續(xù)重新執(zhí)行代碼塊...如此循環(huán),直到條件表達(dá)式的值為假(False),才終止循環(huán)。
流程圖如下
實(shí)例:打印 5 遍 Hello Python
# 1. 定義重復(fù)次數(shù)計(jì)數(shù)器
i = 1
# 2. 使用 while 判斷條件
while i <= 5:
# 要重復(fù)執(zhí)行的代碼
print("Hello Python")
# 處理計(jì)數(shù)器 i
i = i + 1
這里特別強(qiáng)調(diào)一點(diǎn),絕對(duì)不能忘記在循環(huán)內(nèi)部增加修改循環(huán)的判斷條件,否則就會(huì)出現(xiàn)的死循環(huán)現(xiàn)象。
再說明一個(gè)計(jì)數(shù)的習(xí)慣問題。人類的習(xí)慣都是從1開始計(jì)數(shù),但幾乎所有的程序中都習(xí)慣從0開始計(jì)數(shù)。
因此大家盡量養(yǎng)成習(xí)慣吧:除非是需求的特殊要求,否則循環(huán)的計(jì)數(shù)都從 0 開始。
二、賦值運(yùn)算符
在 Python 中,使用 =
符號(hào)可以給變量賦值。
在算術(shù)運(yùn)算時(shí),為了簡化代碼的編寫,Python 還提供了一系列的與算術(shù)運(yùn)算符對(duì)應(yīng)的賦值運(yùn)算符。
運(yùn)算符 | 描述 | 實(shí)例 |
---|---|---|
= | 簡單的賦值運(yùn)算符 | c = a + b 將 a + b 的運(yùn)算結(jié)果賦值為 c |
+= | 加法賦值運(yùn)算符 | c += a 等效于 c = c + a |
-= | 減法賦值運(yùn)算符 | c -= a 等效于 c = c - a |
*= | 乘法賦值運(yùn)算符 | c *= a 等效于 c = c * a |
/= | 除法賦值運(yùn)算符 | c /= a 等效于 c = c / a |
//= | 取整除賦值運(yùn)算符 | c //= a 等效于 c = c // a |
%= | 取模(余數(shù))賦值運(yùn)算符 | c %= a 等效于 c = c % a |
**= | 冪賦值運(yùn)算符 | c **= a 等效于 c = c ** a |
注意:賦值運(yùn)算符中間不能使用空格。
下面來2個(gè)實(shí)例鞏固下知識(shí)。
計(jì)算 0 ~ 100 之間所有數(shù)字的累計(jì)求和結(jié)果
# 定義最終結(jié)果的變量
result = 0
# 定義一個(gè)整數(shù)的變量記錄循環(huán)的次數(shù)
i = 0
# 開始循環(huán)
while i <= 100:
# 每一次循環(huán),都讓 result 這個(gè)變量和 i 這個(gè)計(jì)數(shù)器相加
result += i
# 處理計(jì)數(shù)器
i += 1
print("0~100之間的數(shù)字求和結(jié)果 = %d" % result)
計(jì)算 0 ~ 100 之間 所有 偶數(shù) 的累計(jì)求和結(jié)果
# 定義一個(gè)記錄最終結(jié)果的變量
result = 0
i = 0
while i <= 100:
# 判斷變量 i 中的數(shù)值,是否是一個(gè)偶數(shù)
# 偶數(shù) i % 2 == 0
# 奇數(shù) i % 2 != 0
if i % 2 == 0:
# 當(dāng) i 這個(gè)變量是偶數(shù)時(shí),才進(jìn)行累加操作!
result += i
i += 1
print("0~100之間的偶數(shù)累加結(jié)果 = %d" % result)
三、循環(huán)中使用 else 語句
在 python 中,while … else 在循環(huán)條件為 false 時(shí)執(zhí)行 else 語句塊:
實(shí)例:
count = 0
while count < 5:
print("%d is less than 5" % count)
count = count + 1
else:
print("%d is not less than 5" % count)
以上實(shí)例輸出結(jié)果為:
0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
四、循環(huán)的終止 break 和 continue
break 和 continue 是專門在循環(huán)中終止循環(huán)操作所使用的關(guān)鍵字。
break:某一條件滿足時(shí),退出整個(gè)循環(huán),不再執(zhí)行所有后續(xù)重復(fù)的代碼。
實(shí)例
i = 0
while i < 10:
# break 某一條件滿足時(shí),退出循環(huán),不再執(zhí)行后續(xù)重復(fù)的代碼
# i == 3
if i == 3:
break
print(i)
i += 1
print("over")
continue:某一條件滿足時(shí),跳出本次循環(huán),不執(zhí)行本次循環(huán)后續(xù)的代碼,但不會(huì)終止整個(gè)循環(huán)。
實(shí)例
i = 0
while i < 10:
# 當(dāng) i == 7 時(shí),不希望執(zhí)行需要重復(fù)執(zhí)行的代碼
if i == 7:
# 在使用 continue 之前,同樣應(yīng)該修改計(jì)數(shù)器
# 否則會(huì)出現(xiàn)死循環(huán)
i += 1
continue
# 重復(fù)執(zhí)行的代碼
print(i)
i += 1
break 和 continue 只針對(duì)當(dāng)前所在小循環(huán)有效,即如果出現(xiàn)循環(huán)嵌套,只能跳出 break 或 continue 所處的那個(gè)循環(huán)。
五、循環(huán)嵌套
循環(huán)嵌套就是 while 語句里面還有 while。
while 條件 1:
條件滿足時(shí),做的事情1
條件滿足時(shí),做的事情2
條件滿足時(shí),做的事情3
...(省略)...
while 條件 2:
條件滿足時(shí),做的事情1
條件滿足時(shí),做的事情2
條件滿足時(shí),做的事情3
...(省略)...
處理?xiàng)l件 2
處理?xiàng)l件 1
實(shí)例:輸出五行 *,每一行星號(hào)的數(shù)量依次遞增。
原來的方法:
row = 1
while row <= 5:
print("*" * row)
row += 1
循環(huán)嵌套的方法:
# 每行顯示的星星和當(dāng)前所在的行數(shù)是一致的
# 嵌套一個(gè)小的循環(huán),專門處理每一行中列的星星顯示。
row = 1
while row <= 5:
# 在循環(huán)內(nèi)部,再增加一個(gè)循環(huán),實(shí)現(xiàn)每一行的 星星 打印
col = 1
while col <= row:
print("*", end="")
col += 1
# 每一行星號(hào)輸出完成后,再增加一個(gè)換行
print("")
row += 1
print的知識(shí)點(diǎn)
在默認(rèn)情況下,print 函數(shù)輸出內(nèi)容之后,會(huì)自動(dòng)在內(nèi)容末尾增加換行。
如果不希望末尾增加換行,可以設(shè)置 print 函數(shù)的第2個(gè)參數(shù) end 為空。
語法格式如下:
# 向控制臺(tái)輸出內(nèi)容結(jié)束之后,不會(huì)換行
print("*", end="")
# 單純的換行
print("")
實(shí)例:打印九九乘法表
# 定義起始行
row = 1
# 最大打印 9 行
while row <= 9:
# 定義起始列
col = 1
# 最大打印 row 列
while col <= row:
# end = "",表示輸出結(jié)束后,不換行
# "\t" 可以在控制臺(tái)輸出一個(gè)制表符,協(xié)助在輸出文本時(shí)對(duì)齊
print("%d * %d = %d" % (col, row, row * col), end="\t")
# 列數(shù) + 1
col += 1
# 一行打印完成的換行
print("")
# 行數(shù) + 1
row += 1
補(bǔ)充知識(shí):轉(zhuǎn)義符
ASCII 編碼為每個(gè)字符都分配了唯一的編號(hào),稱為編碼值。
在 Python 中,一個(gè) ASCII 字符除了可以用它的實(shí)體(也就是真正的字符)表示,還可以用它的編碼值表示。這種使用編碼值來間接地表示字符的方式稱為轉(zhuǎn)義字符(Escape Character)。
轉(zhuǎn)義字符以\0或者\(yùn)x開頭,以\0開頭表示后跟八進(jìn)制形式的編碼值,以\x開頭表示后跟十六進(jìn)制形式的編碼值,Python 中的轉(zhuǎn)義字符只能使用八進(jìn)制或者十六進(jìn)制。具體格式如下:
\0dd
\xhh
# dd 表示八進(jìn)制數(shù)字,hh 表示十六進(jìn)制數(shù)字。
直接接使用 ASCII 碼記憶不方便,也不容易理解,所以,針對(duì)常用的控制字符,又定義了簡寫方式,完整的列表如下。
轉(zhuǎn)義字符 | 描述 |
---|---|
\\ | 反斜杠符號(hào) |
\' | 單引號(hào) |
\" | 雙引號(hào) |
\n | 換行符,將光標(biāo)位置移到下一行開頭 |
\t | 水平制表符,也即 Tab 鍵,一般相當(dāng)于四個(gè)空格 |
\r | 回車符,將光標(biāo)位置移到本行開頭 |
\b | 退格(Backspace),將光標(biāo)位置移到前一列 |