for 循環用于集合,其中的每一個元素都會執行同一段代碼塊; 而 while 循環會不斷地運行同一段代碼塊, 直到不滿足指定的條件為止。
1 示例
我們使用 while 循環語句,設計一個小游戲。讓玩家輸入一個數字,程序將告訴他,這個數是奇數,還是偶數:
# 輸入提示
prompt = '輸入一個數字,我將告訴你,它是奇數,還是偶數哦O(∩_∩)O~'
prompt += '\n輸入“不玩了”,將退出本程序: '
exit = '不玩了' # 退出指令
content = '' #輸入內容
while content != exit:
content = input(prompt)
if content.isdigit():
number = int(content)
if (number % 2 == 0):
print('該數是偶數')
else:
print('該數是奇數')
elif content != exit:
print('輸入的必須是數字哦')
運行結果:
我們在這段程序中,定義了一個退出指令, 只要玩家輸入的不是這個指令, 程序就會一直運行。
2 活動狀態標識
真實的游戲場景,可能有很多情況都會導致游戲結束。這時我們可以定義一個活動狀態標識,用于判斷整個程序是否處于活動狀態。
我們來改寫之前的示例:
prompt = '輸入一個數字,我將告訴你,它是奇數,還是偶數哦O(∩_∩)O~'
prompt += '\n輸入“不玩了”,將退出本程序: '
exit = '不玩了' # 退出指令
content = '' # 輸入內容
active = True # 活動狀態標識
while active:
content = input(prompt)
if content.isdigit():
number = int(content)
if (number % 2 == 0):
print('該數是偶數')
else:
print('該數是奇數')
elif content == exit:
active = False
else:
print('輸入的必須是數字哦')
改寫后,程序邏輯變得更清晰咯O(∩_∩)O~
在復雜的程序中, 可能存在很多事件都會導致程序停止。這時,設計一個活動狀態標識就很有用: 其中的任何一個事件發生時,把活動狀態標識設置為 False, 主程序循環結束。
3 break 關鍵字
使用 break 關鍵字,可以立即退出while 循環。
...
while active:
content = input(prompt)
if content.isdigit():
...
elif content == exit:
break
else:
...
4 continue 關鍵字
使用 continue 關鍵字,可以直接返回到循環的開頭, 然后根據 while 條件測試結果來決定是否繼續執行下一次循環。
while active:
content = input(prompt)
if content.isdigit():
number = int(content)
if (number % 2 == 0):
print('該數是偶數')
else:
continue
elif content == exit:
break
else:
print('輸入的必須是數字哦')
這個改寫后的示例,將只會打印偶數;如果碰到奇數,則直接跳到下一個循環。
5 無限循環
每個 while 循環都必須有一條停止運行的條件,否則就會無限循環執行下去。如果程序不小心陷入無限循環, 那么就必須按 Ctrl + C , 或關閉顯示程序輸出的終端窗口,來強行停止程序。
6 處理列表
可以使用 while 循環,在遍歷列表的同時對其進行修改。而這在 for 循環中,就不可以一邊遍歷一邊修改。
6.1 遷移列表元素
to_go_countries = ['英國', '法國', '美國'] # 想去的國家
visited_countries = [] # 已去的國家
while to_go_countries:
country = to_go_countries.pop()
print('準備去【' + country+'】')
print('【1】做攻略')
print('【2】出發')
print('【3】回來咯')
visited_countries.append(country)
print('to_go_countries:'+str(to_go_countries))
print('這些國家去過啦:' + str(visited_countries))
運行結果:
代碼中,使用 pop() 方法彈出棧頂元素(即列表末尾的最后一個元素),并返回這個元素。
可以看到,【 想去的國家列表】在退出 while 循環之后,已經被彈空啦O(∩_∩)O~
6.2 刪除列表元素
假設,目前有這些菜可點,但今天突然不想吃 “炸豆腐”,我們就可以這些寫:
foods = ['拌海蜇', '熗冬筍', '炸豆腐', '炸面筋', '麻辣野雞', '炒肉片']
while '炸豆腐' in foods:
foods.remove('炸豆腐')
print('foods=' + str(foods))
運行結果:
foods=['拌海蜇', '熗冬筍', '炸面筋', '麻辣野雞', '炒肉片']