1. 程式人生 > >【python系統學習11】迴圈語句裡的F4

【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
# 有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 排版