­

【python系統學習11】循環語句里的F4

循環語句里的F4

深入了解下四個新語句,分別是:continuebreakpasselse以及他們搭配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
# 有continuefor循環的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 排版