Python 用戶輸入和while循環的操作
函數input()的工作原理
函數input()讓程序暫停運行,等待用戶輸入一些文本。獲取用戶輸入後,Python將其存儲在一個變量中,以方便使用。
prompt="if you tell us who you are , we can personlize the message you see." prompt+="\nWhat is your first name?" name=input(prompt) print("\nHello, "+name+"!") if you tell us who you are , we can personlize the message you see. What is your first name?Eric Hello, Eric!
這個示例演示瞭一種創建多行字符串的方式。第1行將消息的前半部分存儲在變量prompt中;在第2行中,運算符+=在存儲在prompt中的字符串末尾附加一個字符串。
While循環簡介
for循環用於針對集合中的每一個元素都一個代碼塊,而while循環不斷的運行,直到指定的條件不滿足為止。
使用while循環
current_number=1 while current_number<=5: print(current_number) current_number+=1 1 2 3 4 5
在第一行,我們將current_number設置為1,從而指定從1開始數。接下來的while循環被設置成這樣:隻要current_number小雨或等於5,就接著運行這個循環。循環中代碼打印current_number的值,在使用current_number+=1(current_number=current_number+1)將其值加1。
隻要滿足條件current_number<=5,python就接著運行這個程序。
讓用戶選擇何時退出
可用while循環讓程序在用戶願意時不斷地運行。
prompt="\nTell me something,and I will repeat it back to you:" prompt+="\nEnter 'quit' to end the program." message="" while message !='quit': message=input(prompt) if message !='quit': print(message) Tell me something,and I will repeat it back to you: Enter 'quit' to end the program.hi hi Tell me something,and I will repeat it back to you: Enter 'quit' to end the program.quit
我們定義瞭一條提示消息,告訴用戶他有兩個選擇:要麼輸入一條消息,要麼輸入退出值。接下來,我們創建瞭一個變量——message,用於存儲用戶輸入的值。我們將變量message的初始值設置為空字符串“”,讓Python首次執行while代碼行時有可供檢查的東西。Python首次執行while語句時,需要將message的值與quit進行比較,但此時用戶還沒有輸入。如果沒有可供比較的東西,Python將無法運行程序。為解決這個問題,我們必須給變量message指定一個初始值。雖然這個初始值隻是一個空字符串,但符合要求,讓Python能夠執行循環while所需的東西。隻要循環不是‘quit’,這個循環就會不斷運行。
使用標志
在前一個示例中,我們讓程序在滿足指定條件時就執行特定的任務。但在更復雜的程序中,很多不同的事件都會導致程序停止運行;在這種情況下,該怎麼辦呢?
在要求很多條件都滿足才繼續運行的程序中,可定義一個變量,用於判斷整個程序是否處於活動狀態。這個變量被稱為標志,充當瞭程序的交通信號燈。你可讓程序在標志為true時繼續運行,並在任何事件導致標志的值為False時讓程序停止運行。這樣,在while語句中,就隻需檢查一個條件——標志的當前值是否為true,並將所有測試都放在其它地方,從而讓程序變得更簡潔。
prompt="\nTell me something,and I will repeat it back to you:" prompt+="\nEnter 'quit' to end the program." active=True while active: message=input(prompt) if message=='quit': active=False else: print(message) Tell me something,and I will repeat it back to you: Enter 'quit' to end the program.yes yes Tell me something,and I will repeat it back to you: Enter 'quit' to end the program.quit
我們將變量設置為true,讓程序處於活躍狀態。這樣簡化瞭while語句,因為不需要在其中做任何比較——相關的邏輯由程序的其他部分處理。隻要變量active為true,循環就繼續這樣運行。
在while循環中,我們在用戶輸入後使用一條if語句來檢查變量message的值。如果用戶輸入的是‘quit’,我們就將變量active設置為False,這將導致while循環不再繼續下去。如果用戶輸入的不是‘quit’,我們就輸入作為一條消息打印出來。
使用break退出循環
要立即退出循環,不再運行循環中餘下的代碼,也不管測試條件如何,可是用break語句。
prompt="\nTell me something,and I will repeat it back to you:" prompt+="\nEnter 'quit' to end the program." while True: message=input(prompt) if message=='quit': break else: print(message)
在循環中使用continue
要返回到循環開頭,並根據測試條件測試結果決定是否繼續執行循環,可使用continue語句,它不像break語句那樣不在執行餘下的代碼並退出整個循環。
current_number=0 while current_number<10: current_number+=1 if current_number %2==0: continue print(current_number) 1 3 5 7 9
我們首先將current_number設置成瞭0,由於它小於10,Python進入while循環。進入循環後,以步長為1的方式往上數,因此current_number為1。接下來,if語句檢查current_number與2的求模運算結果。結果為0,就執行continue語句,讓Python忽略餘下的代碼,並返回循環的開頭。如果當前的數字不能被2整除,就執行循環中餘下的代碼,Python將這個數字打印出來。
在列表之間移動元素
假設有一個列表,其中包含新註冊但還未驗證的網站用戶;驗證這些用戶後,如何將他們移動到另一個已驗證的用戶列表中呢?一種辦法是使用一個while循環,在驗證用戶的同時將其從未驗證用戶列表中提取出來,再將其加入到另一個已驗證用戶列表中。代碼可能類似於下面這樣:
# 首先,創建一個待驗證用戶列表 #和一個用於存儲已驗證用戶的空列表 unconfirmed_users=['alice','brian','candace'] confirmed_users=[] #驗證每個用戶,知道沒有未驗證用戶為止 #將每個經過驗證的列表都移到已驗證用戶列表中 while unconfirmed_users: current_user=unconfirmed_users.pop() print("Verifying user: "+current_user.title()) confirmed_users.append(current_user) #顯示所有已驗證的用戶 print("\nThe following users have been confirmed:") for confirmed_user in confirmed_users: print(confirmed_user.title()) Verifying user: Candace Verifying user: Brian Verifying user: Alice The following users have been confirmed: Candace Brian Alice
我們首先創建瞭一個未驗證用戶列表,其中包含Alice、Brain、和Candace,還創建瞭一個空列表,用於存儲以驗證的用戶。While循環不斷的運行,直到列表unconfirmed_users變成空的。在這個循環中,函數pop()以每次一個的方式從列表unconfirmed_user末尾刪除未驗證的用戶。由於Candace位於列表unconfirmed_users末尾,因此名字將首先被刪除、存儲到變量current_user中並加入到列表confirmed_users中。
為模擬用戶驗證過程,我們打印一條驗證消息並將用戶加入到已驗證用戶列表中。未驗證用戶列表越來越短,已驗證用戶列表越來越長。未驗證列表為空後結束循環,再打印已驗證列表。
刪除包含特定值的所有列表元素
前面我們使用remove()來刪除列表中的特定元素,這之所以可行,是因為要刪除的值在列表中隻出現瞭一次。如果要刪除列表中所有包含特定值的元素,該怎麼辦呢?
假設你有一個寵物列表,其中包含多個值為‘cat’的元素。要刪除所有這些元素,可不斷運行一個while循環,直到列表中不再包含值‘cat’.
pets=['dog','cat','dog','goldfish','cat','rabbit','cat'] print(pets) while 'cat' in pets: pets.remove('cat') print(pets) ['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat'] ['dog', 'dog', 'goldfish', 'rabbit']
使用用戶輸入來填充字典
可使用while循環提示用戶輸入任意數量的信息。
responses={} #設置一個標志,指出調查是否繼續 polling_active=True while polling_active: #提示輸入被調查者的名字和回答 name=input("\nWhat is your name?") response=input("which mountain would you like to climb someday?") #將答案存儲在字典中 responses[name]=response #看看是否還有人要參與調查 repeat=input("Would you like to let another person respond?(yes/no)") if repeat=='no': polling_active=False #調查結束,顯示結果 print("\n---Poll Results---") for name,response in responses.items(): print(name+" would like to climb "+response+".") What is your name?hi which mountain would you like to climb someday?ko Would you like to let another person respond?(yes/no)yes What is your name?ji which mountain would you like to climb someday?kp Would you like to let another person respond?(yes/no)no ---Poll Results--- hi would like to climb ko. ji would like to climb kp.
這個程序首先定義瞭一個空字典,並設置瞭一個標志,用於指出調查是否繼續。隻要polling_active為True,Python就運行while循環中的代碼。
在這個循環中,提示用戶輸入其用戶名及其爬那座山。將這些信息存儲在字典response中,然後詢問用戶調查是否繼續。如果用戶輸入yes,程序將再次進入while循環;如果用戶輸入no,標志polling_active將被設置為False,而while循環就此結束。
補充:python學習筆記——循環退出的幾種方式
在這裡主要討論的是while循環,for循環通過迭代對象退出。
由於while循環通常不知道循環的次數,所以對於while循環,它的幾種應用場景導致退出條件設置的不同。
一、讓用戶選擇何時退出:定義退出變量
可使用while循環讓程序在用戶在願意的時不斷運行,在其中定義一個退出值,隻要用戶輸入的不是這個,程序就接著運行。
我們小時候玩遊戲的經常會遇到,當人物死亡的時候,界面會跳出 重新開始遊戲or結束遊戲,結束遊戲就相當於我們設置的退出值。
形式如下:
active = True while active: message = input() if message =="quit": active = False else: print(message)
1、active是我們開始就定義的一個while觸發器
2、message定義用戶輸入字符
3、quit是退出條件,若用戶輸入quit,則active轉換屬性,下次循環退出。
二、用break退出:當明確遇到某些條件即退出時使用
當程序執行到break,不管後面直接退出循環(而不是if-else模塊)。
break主要用於控制if-else語句,可使用ta來控制哪些代碼將執行,哪些代碼不執行。
prompt = "請輸入你曾去過的城市名字(當你不想玩的時候輸入'quit'退出程序)" while True: if city == 'quit': break else: print("i'd love to go to"+'city.title()')
三、在循環中使用continue:當循環中需要跳過一些值時使用
當程序執行到continue,直接跳出本次循環,進入下一次循環。
例:從1到10,如果是奇數則輸出,偶數則跳過
chuzhi = 0 while chuzhi !=10: chuzhi += 1 if chuzhi%2 ==0: continue else: print(chuzhi)
在遇到continue的時候後面的else不看直接進入下一次while。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。