while
和
for
都可以使程序重復執(zhí)行某一段代碼(又稱作循環(huán)體),區(qū)別是
for
循環(huán)用于針對集合中的每一個元素都一個代碼塊,而
while
循環(huán)在表達式為
True
的情況下會不斷地執(zhí)行,直到指定條件不滿足為止。
今天我們一起來學習下
while
關鍵字的使用。
1.while循環(huán)簡介
while在英語中的解釋是:當…時候。
在Python中的語法是:
while
表達式
:
循環(huán)體
意味著,當 表達式為True 的時候,程序會一直執(zhí)行循環(huán)體代碼, 直至表達式為False 。
1.1使用while循環(huán)
最
簡單的while循環(huán)當屬
數(shù)數(shù)
了。例如,下面的
while
循環(huán)從1數(shù)到5:
num
=
1
while
num
<=
5
:
print
(
num
)
num
+=
1
首先定義了變量
num
并給其初始值1。接下來的
while
循環(huán)被設置成這樣:只要
num
小于或等于5,就接著運行循環(huán)體代碼。
循環(huán)體中的代碼打印變量
num
的值,再使用代碼
num+=1
(代碼num=num+1的簡寫)將其值加1。
只要滿足條件
num<=5
,python就接著運行這個循環(huán)。由于1小于5,因此Python打印1,并將
num
加1,使其為2;由于2小于5,因此Python打印2,并將
num
加1,使其為3,以此類推。一旦
num
大于5,循環(huán)將停止,整個程序也將結束運行。
運行結果:
1
2
3
4
5
有人可能看到這會有點懵:已經(jīng)有
for
循環(huán)了,為啥又搞出個
while
循環(huán)?
可以簡單的這樣理解:
for
循環(huán)主要用于那些我們知道循環(huán)次數(shù)的循環(huán),如,遍歷整個列表,我們知道循環(huán)次數(shù)就是列表中元素的個數(shù)。而
while
循環(huán)主要用于那些我們不知道具體循環(huán)多少次的循環(huán),人們常說人生就像一個程序,寫成代碼的話,我們?nèi)松邪l(fā)生的所有事情都在
while 活著:
循環(huán)的循環(huán)體中,我們是不知道一個人到底能活多長時間的,只能用
while
。
當然,有些循環(huán)用
for
和
while
都可以實現(xiàn)。
其實,你每天使用的程序很可能就包含著
while
循環(huán)。例如,游戲程序就在一個大的
while
循環(huán)中,在玩家退出時停止運行。用
while
循環(huán)能讓程序在用戶沒有讓它停止之前一直運行,這點是
for
循環(huán)做不到的。
1.2讓用戶選擇何時退出
可使用
while
循環(huán)讓程序在用戶愿意時不斷地運行,當用戶想退出時就可以隨時退出:
prompt
=
"\n輸入一些內(nèi)容,系統(tǒng)將原樣返回給你:"
prompt
+=
"\n鍵入 'quit' 結束此程序運行。"
message
=
''
while
message
!=
'quit'
:
message
=
input
(
prompt
)
print
(
message
)
我們定義了一條信息提示,告訴用戶他有兩個選擇:要么輸入一條消息,要么輸入’quit’退出程序。
接下來我們創(chuàng)建了變量
message
來接收用戶輸入的內(nèi)容。Python執(zhí)行
while
語句時,需要將
message
的值與’quit’進行比較。如果用戶輸入的不是’quit’,程序將打印出用戶輸入,否則將終止程序運行。
[外鏈圖片轉存失敗(img-GPEwzuTm-1568168463339)(https://liuwynn.github.io/images/20190829/圖1-2.png)]
我們向控制臺輸入的任何信息(除’quit’)都能得到一模一樣的返回信息。
當我們鍵入’quit’時,可以終止程序運行:
輸入’quit’以后確實終止了程序,但它將’quit’也打印了出來。這其實無關痛癢,然而精益求精的我們是不能忍受的,怎么能讓它在輸入’quit’時直接退出,輸入其他信息時原樣返回呢?
prompt
=
"\n輸入一些內(nèi)容,系統(tǒng)將原樣返回給你:"
prompt
+=
"\n鍵入 'quit' 結束此程序運行。"
message
=
''
while
message
!=
'quit'
:
message
=
input
(
prompt
)
if
message
!=
'quit'
:
print
(
message
)
我們只要讓程序在打印信息前做個簡單的檢查,僅在消息不是’quit’時才打印它:
可以清楚地看到,這回輸入’quit’之后程序沒有返回’quit’給我們(可不是天罡君截圖的時候故意沒截下面噢)。
1.3更優(yōu)雅的退出方式
前一個示例中,我們采用判斷
message!='quit'
是否為True的方式來決定程序是否繼續(xù)循環(huán)執(zhí)行。可有時影響程序是否繼續(xù)執(zhí)行的條件不止一個,如用戶輸入’quit’或’退出’中的任意一個都可以終止程序運行。
聰明的小伙伴會說那還不簡單,我把判斷條件換成:
message
!=
'quit'
or
message
!=
'退出'
這樣做到底可不可以呢?答案是可以的,但不是最好的或者說是不優(yōu)雅的,我們寫程序的偶爾可以追求下代碼的品質(zhì)嘛。
[外鏈圖片轉存失敗(img-0jLPo772-1568168463345)(https://liuwynn.github.io/images/20190829/mingxue.jpg)]
更優(yōu)雅的方式是 使用標志 。可能有小伙伴對這個名詞感觸不深,我們直接上新鮮滾燙的代碼來感受一下。
prompt
=
"\n輸入一些內(nèi)容,系統(tǒng)將原樣返回給你:"
prompt
+=
"\n鍵入 'quit' 結束此程序運行。"
active
=
True
while
active
:
message
=
input
(
prompt
)
if
message
==
'quit'
:
active
=
False
elif
message
==
'退出'
:
active
=
False
else
:
print
(
message
)
我們把
active
作為標志位,并且初始值給它True,這里肯定得是True,不然程序無法進入循環(huán),就更別提執(zhí)行循環(huán)體代碼了。
然后使用兩條
if
語句來檢查變量
message
的值。如果用戶輸入的是’quit’,我們就把變量
active
設置成
False
,如果用戶輸入的是’退出’,我們也把變量
active
設置成
False
。
至于為什么不把兩個
if
判斷條件寫在一起?
其一,這樣就和把
message != 'quit' or message != '退出'
直接寫在
while
后面沒啥區(qū)別了;
其二,是想讓小伙伴們認識到,在真實的項目中,只要有一個條件不滿足,就可以直接把
active
置為
False
,程序會直接停止運行,因為不同的條件下邏輯可能會不一樣,代碼塊自然也會不同,所以無法把兩個
if
判斷條件寫在一起。
如果用戶輸入的既不是’quit’又不是’退出’,則程序會將用戶輸入信息原樣輸出。
1.4使用break退出循環(huán)
如果你要立即退出
while
循環(huán),不在運行循環(huán)體中余下的代碼,也不管
while
后面跟的表達式是真是假,可以使用
break
語句。
例如,我們寫個點菜程序,讓用戶輸入TA想吃的菜。在這個程序中,我們可以在用戶輸入’quit’后使用break語句立即退出
while
循環(huán):
prompt
=
"\n請輸入您想吃的菜名:"
prompt
+=
"\n鍵入'quit'以退出程序。"
while
True
:
food
=
input
(
prompt
)
if
food
==
'quit'
:
break
else
:
print
(
"我想吃"
,
food
)
我們將
True
作為
while
的循環(huán)判斷條件,因此這程序理論上會不斷運行下去(在沒有
break
語句的情況下)。
這個程序不斷讓用戶輸入想吃的菜名,直到用戶輸入’quit’,程序執(zhí)行
break
語句,退出循環(huán)。
需要注意,
break
語句的作用就是跳出循環(huán)(一層循環(huán)),這在
for
循環(huán)體中也是適用的哦。
1.5在循環(huán)體中使用continue
continue的意思是繼續(xù)。
Python中使用
continue
語句跳過當前循環(huán)體中的剩余語句,然后
繼續(xù)
進行下一輪循環(huán)。
注意:
continue
和
break
的區(qū)別在于,前者跳出當前(本次)循環(huán),而后者跳出整個循環(huán)。二者既可用于
while
也可用于
for
。
舉個栗子,我們來打印從1~10中的奇數(shù)。
current_number
=
0
while
current_number
<
10
:
current_number
+=
1
if
current_number
%
2
==
0
:
continue
print
(
current_number
)
小伙伴們肯定有別的打印奇數(shù)的方法,這里主要是想用循環(huán)和
continue
來實現(xiàn)。
先定義變量
current_number
并賦初值0,由于它小于10,Python進入
while
循環(huán)。
進入循環(huán)后,變量
current_number
在原數(shù)字上加1。
接下來,
if
語句檢查
current_number
與2的求模運算結果(之前文章說過,結果為0說明是偶數(shù),不為0說明是奇數(shù))。
如果結果為0(偶數(shù)),就執(zhí)行
continue
語句,
Python會忽略余下的代碼,并返回到循環(huán)的開頭
。如果結果不為0(奇數(shù)),就執(zhí)行循環(huán)體中剩余的代碼,Python將會把這個數(shù)字打印出來。
1.6無限循環(huán)
初學者經(jīng)常會把循環(huán)語句寫成無限循環(huán)。
比如1~5數(shù)數(shù):
x
=
1
while
x
<=
5
:
print
(
x
)
x
+=
1
程序的循環(huán)終止條件是
x<=5
,在循環(huán)體中每次
x+=1
,循環(huán)體執(zhí)行5次以后必然不滿足循環(huán)條件,程序肯定是會正常終止的。
但我們初學者特別容易遺漏掉代碼行
x+=1
,導致程序進入死循環(huán),沒完沒了的運行。
# 這個循環(huán)將不會終止
x
=
1
while
x
<=
5
:
print
(
x
)
上面代碼
x
初始值是1,但根本不會變,所以
while
后面的循環(huán)條件永遠成立,導致程序會一直打印1。
**友情提示:**如果你不小心寫了個無限循環(huán)程序(沒人可以保證自己不會犯錯),可以按
Ctrl+C
,也可關閉顯示程序輸出的終端來終止程序。
2.結語
這段時間忙著報道,沒什么時間更新,請大家見諒啦。
上面只是介紹了
while
的基本用法,沒有涉及到對列表或字典的處理,要是大家喜歡看的話,可以掃碼關注或私信給我留言,我們下期再見bye。
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

