【python系統學習11】迴圈語句裡的F4
迴圈語句裡的F4
深入瞭解下四個新語句,分別是:continue
、break
、pass
、else
以及他們搭配for、while迴圈等語句時,所產生的化學反應。
else
由於continue、break都會和else有一定的規則,所以先來說else。
在python中,else不但可以和if配合使用,它還能跟for迴圈和while迴圈配合使用。
虛擬碼
else用在迴圈程式碼的後邊,如果迴圈可以正常結束、即沒有遇到break語句。
那麼else裡的程式碼塊也會在迴圈結束後被正常執行。
for...in...:
...
else:
...
while...(條件):
...
else:
...
示例程式碼
for迴圈執行完畢後,else程式碼就會執行。【前提是for迴圈中不存在break
語句】
for i in range(3):
print('i的值為:',i)
else:
print('else中,i的值為:',i)
# 列印結果如下:
# i的值為: 0
# i的值為: 1
# i的值為: 2
# else中,i的值為: 2
while迴圈執行完畢後,else程式碼再執行:【前提是while迴圈中不存在break
語句】
elseVal = 1
while elseVal < 3:
print('elseVal的值:',elseVal)
elseVal += 1
else:
print('else中,elseVal的值:',elseVal)
# 列印結果如下:
# elseVal的值: 1
# elseVal的值: 2
# else中,elseVal的值: 3
continue
用來跳過本輪迴圈、繼續執行下次迴圈。
虛擬碼
continue語句搭配for迴圈
for...in...:
...
if ...:
continue # 如果滿足了條件,則跳過本次迴圈進入下一輪迴圈
...
continue語句搭配while迴圈
while...(條件):
...
if ...:
continue # 如果滿足了條件,則跳過本次迴圈進入下一輪迴圈
...
示例程式碼
continue語句搭配for迴圈
continue跳過本次迴圈,for迴圈跳過後繼續執行下一輪迴圈。
for i in range(5):
if(i == 3):
continue
else:
print('continue跳過迴圈', i)
else:
print('有continue的for迴圈的else')
# 列印結果如下:
# continue跳過迴圈 0
# continue跳過迴圈 1
# continue跳過迴圈 2
# continue跳過迴圈 4
# 有continue的for迴圈的else
可以看列印結果得知,在滿足i==3的條件之後,直接跳出了當次的迴圈沒有列印3這個數字。而是進入到下一輪迴圈,打印出4後,迴圈才正式完畢。
然後執行了for後邊的else語句,說明只是跳出了本輪迴圈。
continue語句搭配while迴圈
同for,continue語句在while中的使用作用一樣是跳出本輪的迴圈、繼續下一輪的迴圈。
不再贅述,直接上程式碼:
continueVal = 1
while continueVal <= 5:
if continueVal == 3:
print('if條件中,迴圈跳過')
continueVal += 1
continue
print('continueVal的值:',continueVal)
continueVal += 1
else:
print('迴圈結束')
# 列印結果:
# continueVal的值: 1
# continueVal的值: 2
# if條件中,迴圈跳過
# continueVal的值: 4
# continueVal的值: 5
# 迴圈結束
因為變數"continueVal==3"時if條件成立,執行了continue
。跳過了if語句後邊程式碼的執行,也就沒列印"continueVal的值: 3"那句話。
但是還列印了後邊的“continueVal的值: 4”程式碼,說明遇到continue後跳回迴圈開頭,繼續執行了剩下的迴圈了。
並且列印了while語句所對應的else語句中“迴圈結束”這句話。
break
作用
用來打斷迴圈、結束迴圈
虛擬碼
break語句搭配for迴圈
for...in...:
...
if ...:
break # 如果滿足了某一個條件,就提前結束迴圈
else:
... # 如果break執行後,這裡的程式碼不會被執行
break語句搭配while迴圈
while...(條件):
...
if ...:
break # 如果滿足了某一個條件,就提前結束迴圈
else:
... # 如果break執行後,這裡的程式碼不會被執行
示例
break語句搭配for迴圈的示例:
break跳出迴圈,for迴圈不管是否完成將直接結束。甚至for後邊的else都不會再執行。
for i in range(5):
if(i == 3):
break
else:
print('break跳過迴圈', i)
else:
print('有break的for迴圈的else')
# 列印結果如下:
# break跳過迴圈 0
# break跳過迴圈 1
# break跳過迴圈 2
可以看列印結果得知,在滿足i==3的條件之後,直接跳出了迴圈。
for迴圈後邊的else都沒執行。所以只打印了0、1、2。
break語句搭配while迴圈的示例:
同for,break語句在while中的使用作用一樣是跳出迴圈。
而break語句常和while True
搭配使用,可以打破無限迴圈:
breakVal = 1
while True:
if breakVal == 5:
print('if條件成立,迴圈被打破。')
break
else:
print('breakVal的值:',breakVal)
breakVal += 1
else:
print('迴圈結束')
# 列印結果:
# breakVal的值: 1
# breakVal的值: 2
# breakVal的值: 3
# breakVal的值: 4
# if條件成立,迴圈被打破。
條件==5時,直接結束迴圈,並且不再列印while語句所對應的else語句了。
案例-while True搭配使用
案例2,根據使用者的輸入來決定是否結束迴圈:
resultVal = input('你要結束迴圈嗎?yes/no:')
while True:
if resultVal == 'Y' or resultVal == 'yes' or resultVal == 'y': # 程式碼中,只要輸入'Y'、'yes'、'y'都可以結束死迴圈
print('if條件成立,迴圈被打破。至此結束無限迴圈。')
break
else:
resultVal = input('你要結束迴圈嗎?yes/no:')
else:
print('迴圈結束')
這個案例將會在日後很頻繁的被使用。
我的人機互動流程列印如下:
你要結束迴圈嗎?yes/no: n 你要結束迴圈嗎?yes/no: 1 你要結束迴圈嗎?yes/no: 哈哈 你要結束迴圈嗎?yes/no: -1 你要結束迴圈嗎?yes/no: y if條件成立,迴圈被打破。至此結束無限迴圈。
只有我輸入了'Y'、'yes'或'y'三者中的一個,才可以結束死迴圈。否則輸入其他的,都會繼續迴圈並走到else條件中讓你重新輸入資訊。
案例-密碼輸入與校驗功能
案例3,輸入密碼並校驗準確性功能:
while True:
passwordVal = input('請輸入正確的密碼:');
if passwordVal == '123456':
break
else:
print('密碼輸入錯誤,請重新輸入。')
print('密碼輸入正確。通過啦!')
我的人機互動流程列印如下:
請輸入正確的密碼:236 密碼輸入錯誤,請重新輸入。 請輸入正確的密碼:235 密碼輸入錯誤,請重新輸入。 請輸入正確的密碼:123456 密碼輸入正確。通過啦!
pass
顧名思義,即使他的英文意思,跳過
。
示例程式碼
有pass的程式碼:
for i in range(5):
if i == 3:
pass
print('pass後的內容')
print('當前是:', i)
else:
print('for迴圈的else')
# 列印結果:
# 當前是: 0
# 當前是: 1
# 當前是: 2
# pass後的內容
# 當前是: 3
# 當前是: 4
# for迴圈的else
沒pass的程式碼:
for i in range(5):
if i == 3:
print('pass後的內容')
print('當前是:', i)
else:
print('for迴圈的else')
# 列印結果:
# 當前是: 0
# 當前是: 1
# 當前是: 2
# pass後的內容
# 當前是: 3
# 當前是: 4
# for迴圈的else
可以發現有pass和沒pass沒啥區別。列印結果都是一樣的。
這樣觀察不出來pass的作用啊!
pass用途
接下來再看一段程式碼來了解下pass的用途:
for i in range(5):
if i == 3:
print('當前是:', i)
else:
print('for迴圈的else')
本意是if條件成立的時候、即i為3的時候,啥也不做。
但是不開心的是,列印結果報錯了:
# print('當前是:', i)
# ^
# IndentationError: expected an indented block
雖然指向了print這一行,說“預期print應該有一個縮排塊”。
但實際情況是,希望if語句後邊的程式碼塊中應該有程式碼,不能為空。
那我們真的不想在i等於3的時候,if程式碼塊裡寫多餘的print之類的任何程式碼時咋辦呢?
這時候pass
就派上用場了!
for i in range(5):
if i == 3:
pass # 直接用pass跳過這裡就行了。
print('當前是:', i)
else:
print('for迴圈的else')
綜上,這就是pass的用途。
思考題
1、猜數小遊戲
先定一個變數值,然後讓使用者輸入,猜你的值是多少。 如果猜大了,就告知大了重新填寫。 反之如果猜小了,就告知小了重新填寫。 如果猜對了就結束遊戲。
# 示例答案見原始碼同名的python檔案中~僅供參考。
2、猜數小遊戲 - 升級版
在遊戲1的基礎上,設定使用者可猜詞的次數。猜錯一次提示他少一次。
在有限的次數中如果都沒猜對,最後遊戲失敗。如果次數內猜對了,就遊戲成功。
3、猜數小遊戲 - 高階版
在2的基礎上,加入遊戲的屬性,可以記錄多個使用者的猜測總次數,然後pk、做排行榜。
4、猜數小遊戲 - 超級版
再可以3的基礎上,記錄使用者的猜測所用時間,同樣次數、同樣猜對的情況下,用時間進行pk來做排行榜(需要用到python的time
模組)。
本文使用 mdnice 排版