Python的for...else和while...else語法,這是Python中最不常用,最為誤解的語法特性之一。
Python中的for、while循環都有一個可選的else分支(類似if語句和try語句那樣),在循環迭代正常完成之后執行。換句話說,如果我們不是除正常以外的其他方式退出循環,那么else分支將被執行。也就是在循環體內沒有break語句、沒有return語句,或者沒有異常出現。
1.break情況
下面我們來嘗試在循環中執行break退出
lucky_number.py
lucky_num = 19
#首先定義一個幸運數字,這樣條理比較清晰
#action = True
guess_count = 0
while guess_count < 3:
#限制用戶輸入
input_num = int(input("Input the guess num: "))
#if lucky_num == input_num:
#print("Bingo!")
#action = False
#break強制終端循環語句,避免陷入死循環之中
if input_num > lucky_num:
print("The real number is smalller!")
elif input_num < lucky_num:
print("The real number is bigger...")
else:
print("Bjngo!...")
break
guess_count += 1
else:
print("Too many retrys!")
首先我們執行三次沒有測對的情況如下:
Input the guess num: 1
The real number is bigger...
Input the guess num: 2
The real number is bigger...
Input the guess num: 100
The real number is smalller!
Too many retrys!
從結果上可以看出,最后執行了else分支語句(Too many retrys!),提示用戶輸入過多的次數,正常情況下是執行else語句的。下面我們來看
一下非正常退出情況下:
用戶猜測正確:
Input the guess num: 1
The real number is bigger...
Input the guess num: 19
Bjngo!...
從上面結果我們可以看出,當用戶猜對數字后,break了一下,推出了while...else語句,else語句沒有正常執行。
2.return情況
#首先定義一個幸運數字,這樣條理比較清晰
#action = True
#限制用戶輸入,如果三次沒有猜對則退出循環
def count():
lucky_num = 19
guess_count = 0
while guess_count < 3:
input_num = int(input("Input the guess num: "))
#if lucky_num == input_num:
#print("Bingo!")
#action = False
#break強制終端循環語句,避免陷入死循環之中
if input_num > lucky_num:
print("The real number is smalller!")
elif input_num < lucky_num:
print("The real number is bigger...")
else:
print("Bjngo!...")
return guess_count
guess_count += 1
else:
print("Too many retrys!")
numbers = count()
print(numbers)
由於rerturn語句只能在函數和類中使用,因此我定義了一個函數,看我們輸入正確的時候是否能夠終端else語句。
(1).調用這個函數,輸入三次不正確
Input the guess num: 1
The real number is bigger...
Input the guess num: 1
The real number is bigger...
Input the guess num: 1
The real number is bigger...
Too many retrys!
None
從結果中可以看出來,當我們輸入三次的時候,else語句正常運行,因為我們輸入的都不正常,不影響else語句
(2).用戶猜測正確的情況:
Input the guess num: 1
The real number is bigger...
Input the guess num: 19
Bjngo!...
1
從結果可以看出,用戶第一次猜測錯誤,第二猜對了,然后把guess_count返回給了變量numbers,沒有運行else語句。
結論:如果我們想在用戶輸入正確的時候退出循環,輸入次數太多的時候提示用戶,那么可以使用while...else...break語句,在用戶
輸入次數超過限制沒有答對的時候提醒用戶;答對了的時候退出循環,不打印提醒,那么可以在用戶輸入正確的時候使用break進行中斷。
牢記:Python中的for、while循環都有一個可選的else分支(類似if語句和try語句那樣),在循環迭代正常完成之后執行。換句話說,如果我們
不是除正常以外的其他方式退出循環,那么else分支將被執行。也就是在循環體內沒有break語句、沒有return語句,或者沒有異常出現。
