Python的for...else和while...else語(yǔ)法,這是Python開發(fā)中最不常用,最為誤解的語(yǔ)法特性之一。
Python中的for、while循環(huán)都有一個(gè)可選的else分支(類似if語(yǔ)句和try語(yǔ)句那樣),在循環(huán)迭代正常完成之后執(zhí)行。換句話說(shuō), 如果我們不是除正常以外的其他方式退出循環(huán),那么else分支將被執(zhí)行 。也就是在循環(huán)體內(nèi)沒有break語(yǔ)句、沒有return語(yǔ)句,或者沒有異常出現(xiàn)。
1.break情況
下面我們來(lái)嘗試在循環(huán)中執(zhí)行break退出
lucky_number.py
lucky_num = 19
#首先定義一個(gè)幸運(yùn)數(shù)字,這樣條理比較清晰
#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強(qiáng)制終端循環(huán)語(yǔ)句,避免陷入死循環(huán)之中
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!")
首先我們執(zhí)行三次沒有測(cè)對(duì)的情況如下:
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!
從結(jié)果上可以看出,最后執(zhí)行了else分支語(yǔ)句(Too many retrys!),提示用戶輸入過多的次數(shù),正常情況下是執(zhí)行else語(yǔ)句的。下面我們來(lái)看
一下非正常退出情況下:
用戶猜測(cè)正確:
Input the guess num: 1
The real number is bigger...
Input the guess num: 19
Bjngo!...
從上面結(jié)果我們可以看出,當(dāng)用戶猜對(duì)數(shù)字后,break了一下,推出了while...else語(yǔ)句,else語(yǔ)句沒有正常執(zhí)行。
2.return情況
#首先定義一個(gè)幸運(yùn)數(shù)字,這樣條理比較清晰
#action = True
#限制用戶輸入,如果三次沒有猜對(duì)則退出循環(huán)
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強(qiáng)制終端循環(huán)語(yǔ)句,避免陷入死循環(huán)之中
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語(yǔ)句只能在函數(shù)和類中使用,因此我定義了一個(gè)函數(shù),看我們輸入正確的時(shí)候是否能夠終端else語(yǔ)句。
(1).調(diào)用這個(gè)函數(shù),輸入三次不正確
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
從結(jié)果中可以看出來(lái),當(dāng)我們輸入三次的時(shí)候,else語(yǔ)句正常運(yùn)行,因?yàn)槲覀冚斎氲亩疾徽?,不影?/span>else語(yǔ)句
(2).用戶猜測(cè)正確的情況:
Input the guess num: 1
The real number is bigger...
Input the guess num: 19
Bjngo!...
1
從結(jié)果可以看出,用戶第一次猜測(cè)錯(cuò)誤,第二猜對(duì)了,然后把guess_count返回給了變量numbers,沒有運(yùn)行else語(yǔ)句。
結(jié)論:如果我們想在用戶輸入正確的時(shí)候退出循環(huán),輸入次數(shù)太多的時(shí)候提示用戶,那么可以使用while...else...break語(yǔ)句,在用戶
輸入次數(shù)超過限制沒有答對(duì)的時(shí)候提醒用戶;答對(duì)了的時(shí)候退出循環(huán),不打印提醒,那么可以在用戶輸入正確的時(shí)候使用break進(jìn)行中斷。
牢記:Python中的for、while循環(huán)都有一個(gè)可選的else分支(類似if語(yǔ)句和try語(yǔ)句那樣),在循環(huán)迭代正常完成之后執(zhí)行。換句話說(shuō),如果我們
不是除正常以外的其他方式退出循環(huán),那么else分支將被執(zhí)行。也就是在循環(huán)體內(nèi)沒有break語(yǔ)句、沒有return語(yǔ)句,或者沒有異常出現(xiàn)。
來(lái)源:博客園