文 | 天罡君
while和for都可以使程序重複執行某一段代碼(又稱作循環體),區别是for循環用于針對集合中的每一個元素都一個代碼塊,而while循環在表達式為True的情況下會不斷地執行,直到指定條件不滿足為止。
今天我們一起來學習下while關鍵字的使用。
1.while循環簡介while在英語中的解釋是:當......時候。
在python中的語法是:
while 表達式: 循環體
意味着,當表達式為True的時候,程序會一直執行循環體代碼,直至表達式為False。
1.1使用while循環
最簡單的while循環當屬數數了。例如,下面的while循環從1數到5:
num = 1 while num <= 5: print(num) num = 1
首先定義了變量num并給其初始值1。接下來的while循環被設置成這樣:隻要num小于或等于5,就接着運行循環體代碼。
循環體中的代碼打印變量num的值,再使用代碼num =1(代碼num=num 1的簡寫)将其值加1。
隻要滿足條件num<=5,python就接着運行這個循環。由于1小于5,因此Python打印1,并将num加1,使其為2;由于2小于5,因此Python打印2,并将num加1,使其為3,以此類推。一旦num大于5,循環将停止,整個程序也将結束運行。
運行結果:
1 2 3 4 5
有人可能看到這會有點懵:已經有for循環了,為啥又搞出個while循環?
注:表情包中不是python代碼
可以簡單的這樣理解:for循環主要用于那些我們知道循環次數的循環,如,遍曆整個列表,我們知道循環次數就是列表中元素的個數。而while循環主要用于那些我們不知道具體循環多少次的循環,人們常說人生就像一個程序,寫成代碼的話,我們人生中發生的所有事情都在while 活着:循環的循環體中,我們是不知道一個人到底能活多長時間的,隻能用while。
當然,有些循環用for和while都可以實現。
其實,你每天使用的程序很可能就包含着while循環。例如,遊戲程序就在一個大的while循環中,在玩家退出時停止運行。用while循環能讓程序在用戶沒有讓它停止之前一直運行,這點是for循環做不到的。
1.2讓用戶選擇何時退出
可使用while循環讓程序在用戶願意時不斷地運行,當用戶想退出時就可以随時退出:
prompt = "\n輸入一些内容,系統将原樣返回給你:" prompt = "\n鍵入 'quit' 結束此程序運行。" message = '' while message != 'quit': message = input(prompt) print(message)
我們定義了一條信息提示,告訴用戶他有兩個選擇:要麼輸入一條消息,要麼輸入'quit'退出程序。
接下來我們創建了變量message來接收用戶輸入的内容。Python執行while語句時,需要将message的值與'quit'進行比較。如果用戶輸入的不是'quit',程序将打印出用戶輸入,否則将終止程序運行。
我們向控制台輸入的任何信息(除'quit')都能得到一模一樣的返回信息。
當我們鍵入'quit'時,可以終止程序運行:
輸入'quit'以後确實終止了程序,但它将'quit'也打印了出來。這其實無關痛癢,然而精益求精的我們是不能忍受的,怎麼能讓它在輸入'quit'時直接退出,輸入其他信息時原樣返回呢?
prompt = "\n輸入一些内容,系統将原樣返回給你:" prompt = "\n鍵入 'quit' 結束此程序運行。" message = '' while message != 'quit': message = input(prompt) if message != 'quit': print(message)
我們隻要讓程序在打印信息前做個簡單的檢查,僅在消息不是'quit'時才打印它:
可以清楚地看到,這回輸入'quit'之後程序沒有返回'quit'給我們(可不是天罡君截圖的時候故意沒截下面噢)。
1.3更優雅的退出方式
前一個示例中,我們采用判斷message!='quit'是否為True的方式來決定程序是否繼續循環執行。可有時影響程序是否繼續執行的條件不止一個,如用戶輸入'quit'或'退出'中的任意一個都可以終止程序運行。
聰明的小夥伴會說那還不簡單,我把判斷條件換成:
message != 'quit' or message != '退出'
這樣做到底可不可以呢?答案是可以的,但不是最好的或者說是不優雅的,我們寫程序的偶爾可以追求下代碼的品質嘛。
更優雅的方式是使用标志。可能有小夥伴對這個名詞感觸不深,我們直接上新鮮滾燙的代碼來感受一下。
prompt = "\n輸入一些内容,系統将原樣返回給你:" 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,不然程序無法進入循環,就更别提執行循環體代碼了。
然後使用兩條if語句來檢查變量message的值。如果用戶輸入的是'quit',我們就把變量active設置成False,如果用戶輸入的是'退出',我們也把變量active設置成False。
至于為什麼不把兩個if判斷條件寫在一起?
其一,這樣就和把message != 'quit' or message != '退出'直接寫在while後面沒啥區别了;
其二,是想讓小夥伴們認識到,在真實的項目中,隻要有一個條件不滿足,就可以直接把active置為False,程序會直接停止運行,因為不同的條件下邏輯可能會不一樣,代碼塊自然也會不同,所以無法把兩個if判斷條件寫在一起。
如果用戶輸入的既不是'quit'又不是'退出',則程序會将用戶輸入信息原樣輸出。
1.4使用break退出循環
如果你要立即退出while循環,不在運行循環體中餘下的代碼,也不管while後面跟的表達式是真是假,可以使用break語句。
例如,我們寫個點菜程序,讓用戶輸入TA想吃的菜。在這個程序中,我們可以在用戶輸入'quit'後使用break語句立即退出while循環:
prompt = "\n請輸入您想吃的菜名:" prompt = "\n鍵入'quit'以退出程序。" while True: food = input(prompt) if food == 'quit': break else: print("我想吃", food)
我們将True作為while的循環判斷條件,因此這程序理論上會不斷運行下去(在沒有break語句的情況下)。
這個程序不斷讓用戶輸入想吃的菜名,直到用戶輸入'quit',程序執行break語句,退出循環。
需要注意,break語句的作用就是跳出循環(一層循環),這在for循環體中也是适用的哦。
1.5在循環體中使用continue
continue的意思是繼續。
Python中使用continue語句跳過當前循環體中的剩餘語句,然後繼續進行下一輪循環。
注意:continue和break的區别在于,前者跳出當前(本次)循環,而後者跳出整個循環。二者既可用于while也可用于for。
舉個栗子,我們來打印從1~10中的奇數。
current_number = 0 while current_number < 10: current_number = 1 if current_number % 2 == 0: continue print(current_number)
小夥伴們肯定有别的打印奇數的方法,這裡主要是想用循環和continue來實現。
先定義變量current_number并賦初值0,由于它小于10,Python進入while循環。
進入循環後,變量current_number在原數字上加1。
接下來,if語句檢查current_number與2的求模運算結果(之前文章說過,結果為0說明是偶數,不為0說明是奇數)。
如果結果為0(偶數),就執行continue語句,Python會忽略餘下的代碼,并返回到循環的開頭。如果結果不為0(奇數),就執行循環體中剩餘的代碼,Python将會把這個數字打印出來。
1.6無限循環
初學者經常會把循環語句寫成無限循環。
比如1~5數數:
x = 1 while x <= 5: print(x) x = 1
程序的循環終止條件是x<=5,在循環體中每次x =1,循環體執行5次以後必然不滿足循環條件,程序肯定是會正常終止的。
但我們初學者特别容易遺漏掉代碼行x =1,導緻程序進入死循環,沒完沒了的運行。
# 這個循環将不會終止 x = 1 while x <= 5: print(x)
上面代碼x初始值是1,但根本不會變,所以while後面的循環條件永遠成立,導緻程序會一直打印1。
友情提示:如果你不小心寫了個無限循環程序(沒人可以保證自己不會犯錯),可以按Ctrl C,也可關閉顯示程序輸出的終端來終止程序。
2.結語這段時間忙着報道,沒什麼時間更新,請大家見諒啦。
上面隻是介紹了while的基本用法,沒有涉及到對列表或字典的處理,要是大家喜歡看的話,可以點擊關注或私信給我留言,我們下期再見bye。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!