python 中的 for-else 和 while-else 語句

ARM的程式設計師敲著詩歌的夢發表於2019-01-06

python 中的 for-else 和 while-else 語句

絕大部分程式語言中都有條件判斷語句,比如 if-else。這裡的 else 一般與 if 成對使用。不過在 Python 中,else 除了能與 if 配合外,還能和 for、while 配對使用。

我們來看一個例子:
假設有一個列表用來儲存學生資訊,列表的元素是字典,字典中的鍵有姓名、年齡等。讓使用者輸入一個名字,然後在列表中查詢,如果有這個名字就告訴使用者“找到了”,反之告訴使用者“沒有找到”。

一般情況下,我們可能會這樣寫:

info = [{"name":"Leslie", "age":30},
        {"name":"Karl", "age":20},
        {"name":"Tom", "age":25}]

to_find_name = input("please input a name:")

found_flag = False

for person in info:
    if person["name"] == to_find_name:
        found_flag = True
        
if found_flag:
    print("Found it")
else:
    print("Not found")

程式執行結果如下:

please input a name:Tom
Found it

please input a name:Wang
Not found

細心的你肯定發現了:程式碼在第7行定義了一個標誌變數,其預設值是False;在對列表的遍歷中,如果找到了,就把這個變數賦值為True;最後根據這個變數的值,列印出查詢結果。

如果使用了 for-else 語句,程式碼可以這樣寫:

info = [{"name":"Leslie", "age":30},
        {"name":"Karl", "age":20},
        {"name":"Tom", "age":25}]

to_find_name = input("please input a name:")

for person in info:
    if person["name"] == to_find_name:
        print("Found it")
        break;
else:
    print("Not found")

執行結果和前面是一樣的。

這裡的邏輯是:如果執行了 break,那麼就不執行 else 語句;如果沒有執行 break,那麼就執行 else 語句。

這樣寫的優點是:節省筆墨,不用再設定一個標誌變數。

有的朋友會問,如果 for 的迴圈體中沒有 break 語句,else 語句還會執行嗎?答案是:會!

while-else 的用法同理。

相關文章