Python循環(huán)流程語句 while

說起循環(huán),發(fā)一張圖,不知道能不能勾起大家小時(shí)候的回憶。

循環(huán)多支筆寫作業(yè)

循環(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)。

流程圖如下


循環(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)位置移到前一列

掃碼關(guān)注公眾號(hào)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,595評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,560評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,814評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,224評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評(píng)論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,444評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,988評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,804評(píng)論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,998評(píng)論 1 370
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評(píng)論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,237評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評(píng)論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,706評(píng)論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,993評(píng)論 2 374