【python系統學習11】循環語句里的F4
- 2020 年 4 月 4 日
- 筆記
循環語句里的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 排版