當前位置:
首頁 > 最新 > Python第18課-while循環

Python第18課-while循環

18.1 while 循環簡介

for循環用於針對集合中的每個元素的一個代碼塊,而while循環不斷的運行,直到指定的條件不滿足為止。

18.1.1 使用 while 循環

你可以使用while循環來數數,例如,下面的while循環從1數到5:

# -*- coding:utf-8 -*-

number = 1

while number

print(number)

number += 1

在第一行,我么將number設置為1,從而指定從1開始數。接下來的while循環被設置成這樣:只要number的值小於等於5,就接著運行這個循環。循環中的代碼列印number的值,再使用number += 1將其值加1。

只要滿足條件number

你每天使用的程序很可能就包含while循環。例如,遊戲使用while循環,確保在玩家想玩時不斷運行,並在玩家想退出時停止運行。

18.1.2 讓用戶選擇核實退出

可使用while循環讓程序在用戶願意時不斷的運行,也可讓用戶主動退出程序,如下面的示例,程序中定義了一個退出值,只要用戶輸入的不是這個值,程序就接著運行,否則就直接退出:

parrot.py

# -*- coding:utf-8 -*-

prompt = "
輸入"Q"退出程序。"

prompt += "
請輸入你要檢索的內容: "

message = ""

while message != "Q":

message = input(prompt)

if message != "Q":

print(message)

首次遇到這個循環時,message是一個空字元串,因此Python進入這個循環。執行到代碼行 message = input(prompt) 時,Python顯示提示消息,並等待用戶輸入。不管用戶輸入是什麼,都將存儲到變數message中並列印出來;接下來,Python重新檢查while語句中的條件。只要用戶輸入的不是"Q",Python就會再次顯示提示消息並等待用戶輸入。等到用戶終於輸入"Q"後,Python停止執行while循環,而整個程序也到底結束:

輸入"Q"退出程序。

請輸入你要檢索的內容: Python

Python

輸入"Q"退出程序。

請輸入你要檢索的內容: Python Program

Python Program

輸入"Q"退出程序。

請輸入你要檢索的內容: Q

在循環中,還使用了if語句,這個為了當用戶輸入"Q"時,直接退出程序,而不再列印這個輸入。

18.1.3 使用 break 退出循環

要立即退出while循環,不再運行餘下的代碼,也不管條件測試的結果如何,可使用break語句。break語句用於控制程序流程,可使用它來控制哪些代碼行將執行,哪些代碼行不執行,從而讓程序按你的要求執行你要執行的代碼。

例如,來看一個讓用戶指出他到過哪些地方的程序。在這個程序中,我們可以在用戶輸入"quit"後使用break語句立即退出循環:

cities.py

# -*- coding:utf-8 -*-

prompt = "
輸入"quit"退出程序。"

prompt += "
請輸入你曾到訪過的城市: "

while True:

city = input(prompt)

if city == "quit":

break

else:

print("我曾經到訪過" + city + ".")

以while True 開頭的循環,將不斷運行下去,直到暈倒break語句。這個程序中的循環不斷輸入用戶到訪過的城市,直到他輸入』quit"為止。用戶輸入"quit"後,將執行break語句,導致Python退出循環:

輸入"quit"退出程序。

請輸入你曾到訪過的城市: BeiJing

我曾經到訪過BeiJing.

輸入"quit"退出程序。

請輸入你曾到訪過的城市: ShangHai

我曾經到訪過ShangHai.

輸入"quit"退出程序。

請輸入你曾到訪過的城市: quit

18.1.4 在循環中使用continue

要返回到循環開頭,並根據條件測試結果決定是否繼續執行循環,可使用continue語句,它不像break語句那樣不再執行餘下的代碼並退出整個循環。例如,來看一個從1數到10,但只列印其中奇數的循環:

counting.py

# -*- coding:utf-8 -*-

number = 0

while number < 10:

number += 1

if number % 2 == 0:

continue

print(number)

我們首先將number設置為0,由於它小於10,Python進入while循環。進入循環後,我們以步長1的方式往上數,因此number的值為1。接下來,if語句檢查number與2的求模運算結果。如果結果為0,就執行continue語句,讓Python忽略餘下的代碼,並返回到循環的開頭。如果當前的數字不能被2整除,就執行循環中餘下的代碼,Python將這個數字列印出來:

18.1.5 避免無限循環

每個while循環都必須有停止運行的途徑,這樣才不會沒完沒了的執行下去。例如,下面的循環從1數到5:

x = 1

while x

print(x)

x += 1

但如果你像下面這樣不小心遺漏了代碼行 x += 1,這個循環將永遠執行下去:

x = 1

while x

print(x)

在這裡,x的初始值為1,但根本不會變,因此條件測試 x < = 5 始終未True,導致while循環永遠列印1。

如果不小心陷入了無限循環,可按Ctrl + C 結束循環,或關閉顯示程序輸出的終端窗口。

18.2 使用while循環來處理列表和字典

for循環是一種遍歷列表的有效方式,但在for循環中不應修改列表,否則將導致Python難以跟蹤其中的元素。要在遍歷列表的同時對其進行修改,可使用while循環。通過將while循環同列表和字典結合起來使用,可收集、存儲並組織大量輸入,供以後查看和顯示。

18.2.1 在列表之間移動元素

假設有一個列表,其中包含新註冊但還未驗證的網站用戶;驗證這些用戶後,如何將它們移到另一個已驗證用戶列表中呢?一種方法是使用一個while循環,在驗證用戶的同時將其從未驗證用戶列表提取出來,再將其加入到另一個已驗證用戶列表中。代碼類似於這樣:

# -*- coding:utf-8 -*-

# 創建一個待驗證用戶列表

unconfirmed_users = ["alice", "brian", "candace"]

# 創建一個用於存儲已驗證用戶的空列表

confirmed_users = []

# 驗證每個用戶,直到沒有未驗證用戶為止

while unconfirmed_users:

# 將每個經過驗證的用戶都移到已驗證用戶的列表中

current_user = unconfirmed_users.pop()

print("當前已驗證用戶:" + current_user.title())

confirmed_users.append(current_user)

# 顯示所有已驗證的用戶

print("
以下是已驗證的用戶:")

for confirmed_user in confirmed_users:

print(confirmed_user.title())

我們首先創建了一個未驗證用戶列表,其中包含3個用戶,還創建了一個空列表,用於存儲已驗證的用戶。while循環將不斷運行,直到列表unconfirmed_users 變成空的。在這個循環中,函數pop()以每次一個的方式從列表unconfirmed_users末尾刪除未驗證的用戶,並將其存儲在變數current_user中。

為模擬用戶驗證過程,我們列印一條驗證消息並將用戶加入到已驗證用戶的列表中。未驗證用戶列表越來越短,而已驗證用戶列表越來越長。未驗證用戶列表為空後循環結束,再列印已驗證用戶列表:

當前已驗證用戶:Candace

當前已驗證用戶:Brian

當前已驗證用戶:Alice

以下是已驗證的用戶:

Candace

Brian

Alice

18.2.2 刪除包含特定值的所有列表元素

假設有一個寵物列表,其中包含多個值為"cat"的元素。要刪除所有這些元素,可不斷運行一個while循環,直到列表中不再包含值"cat",如下所示:

# -*- coding:utf-8 -*-

pets = ["dog","cat","dog","goldfish","rabbit","cat","cat"]

print(pets)

while "cat" in pets:

pets.remove("cat")

print(pets)

首先創建了一個列表,其中包含多個值為"cat"的元素。列印這個列表後,Python進入while循環。進入這個循環後,Python刪除第一個"cat"並返回到while代碼行,不斷刪除"cat",直到這個值不包含在列表中,然後退出循環並列印列表:

["dog", "cat", "dog", "goldfish", "rabbit", "cat", "cat"]

["dog", "dog", "goldfish", "rabbit"]

18.2.3 使用用戶輸入來填充字典

可使用while循環提示用戶輸入任意數量的信息。下面來創建一個調查程序,其中的循環每次執行時都提示輸入被調查者的名字和回答。我們將收集的數據存儲在一個字典中,以便將回答同被調查者關聯起來。以下代碼調查用戶喜歡什麼編程語言:

# -*- coding:utf-8 -*-

responses = {}

# 設置一個標誌,指出調查是否繼續,即循環結束是否條件

polling_active = True

while polling_active:

# 提示輸入被調查者的名字和回答

name = input("
請輸入你的名字: ")

response = input("請輸入你的回答: ")

# 將被調查者名字和回答 存儲在字典中

responses[name] = response

# 詢問是否還有人要參與調查

repeat = input("還有人要參與調查嗎?(yes/no)")

if repeat == "no":

polling_active = False

# 調查結束,顯示調查結果

print("
以下是調查結果:")

for name,response in responses.items():

print(name + " 喜歡 " + response + ".")

我們首先定義了一個空字典,並設置了一個標誌,用於指出調查是否繼續。只要這個標誌polling_active為True,就一直運行while循環中的代碼。

在這個循環中,提示用戶輸入其用戶名及其喜歡的編程語言。將這些信息存儲在字典responses中,然後詢問用戶調查是否繼續。如果用戶輸入yes,程序將再次進入while循環,如果用戶輸入的是no,標誌polling_active將被設置為False,而while循環將就此結束。最後一個代碼塊,顯示調查結果。

運行這個程序,並輸入一些名字和回答,輸出類似於下面這樣:

請輸入你的名字: Tom

請輸入你的回答: Python

還有人要參與調查嗎?(yes/no)yes

請輸入你的名字: David

請輸入你的回答: Java

還有人要參與調查嗎?(yes/no)no

以下是調查結果:

Tom 喜歡 Python.

David 喜歡 Java.

18.3 實例練習 - 動手試一試

18.3.1 實例1 - 熟食店

創建一個名為sandwich_orders的列表,在其中包含各種三明治的名字;再創建一個名為finished_sandwiches的空列表。遍歷列表sandwich_orders,對於其中的每種三明治,都列印一條消息,如"我已經做好了榴槤三明治",並將其移到列表finished_sanwiches。所有三明治都製作好後,列印一條消息將這些三明治列出來。

18.3.2 實例2 - 五香煙熏牛肉賣完了

使用上述已經創建的列表sandwich_orders,並確保"pastrami"在其中至少出現3次。在程序開頭附近添加這樣的代碼:列印一條消息,指出熟食店的五香煙熏牛肉賣完了;再使用一個while循環將列表sandwich_orders中的"pastrami"都刪除。確認最終的列表finished_sandwiches中不包含"pastrami"。

18.3.2 夢想的度假勝地

編寫一個程序,調查用戶最想去的度假勝地是哪裡。使用類似於"你最想去哪裡度假?"的提示,並編寫一個列印調查結果的代碼塊。

小額贊助

鼓勵我繼續寫出高質量的內容

如果你覺得有所收穫,不妨小額贊助一下

歡迎加入

Python公開課


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

python是什麼語言?現在學Python好找工作嗎?
Python學習入門第二課:第一個Python程序

TAG:Python |