十一、Python第十一课——用户输入和另一种循环(While)
(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419
?
?
學(xué)了這么久的Python,大家肯定會好奇,不是說機(jī)器學(xué)習(xí)嗎?不是人機(jī)交互嗎?不是人工智能嗎?怎么我學(xué)了Python都十節(jié)課了,還沒有寫出能和電腦交互的程序?不要著急,第十一節(jié)課后,我們學(xué)習(xí)Python的內(nèi)容就逐漸變難。當(dāng)然,從這節(jié)課開始,我們將會寫一些要求用戶輸入的一些程序,簡稱交互式程序。
目錄
一、輸入函數(shù)input()和數(shù)據(jù)類型轉(zhuǎn)換函數(shù)int()
1、input()函數(shù)的些許知識?
2、int()函數(shù)的些許知識
?二、while循環(huán)
1、while循環(huán)講解及舉例
2、在while循環(huán)中使用標(biāo)志
3、break和continue
4、用while循環(huán)處理列表和字典
A、在列表之間移動元素
B、刪除包含特定值的所有列表元素
C、使用while循環(huán)填充字典
一、輸入函數(shù)input()和數(shù)據(jù)類型轉(zhuǎn)換函數(shù)int()
| 函數(shù) | 用途 |
| input() | 獲取用戶輸入的字符串 |
| int() | 將用戶輸入的數(shù)值轉(zhuǎn)換為整型 |
1、input()函數(shù)的些許知識?
我們接下來編寫第一個交互式程序:(我輸入的是“I love Python!”(忽略綠色)電腦回復(fù)給我的也是這樣的一句話。)
# 定義一個變量,存儲用戶輸入的字符串 # input()函數(shù)括號內(nèi)的話將會被打印顯示,并期待用戶的輸入。 message=input("Tell me something, and I will repeat it back to you: ") print(message)對上面的代碼進(jìn)行一個解釋:函數(shù)input()接受一個參數(shù):即要向用戶顯示的提示或說明,讓用戶知道該如何做。在這個例子中,Python運(yùn)行第一行代碼時,用戶看到提示(讓輸入一句話),程序等待用戶輸入,并在用戶按回車鍵后繼續(xù)運(yùn)行。輸入的字符串存儲在變量message中,最后被print()函數(shù)輸出。
我們學(xué)習(xí)input()函數(shù)之后,就會接觸到越來越多的需要用戶輸入的程序,因此輸出一個用戶提示信息是有必要的。例如:
name = input("Please enter your name: ") print("Hello, " + name + "!" )如果提示超過一行,可以將提示存儲在一個變量中,再將該變量傳遞給函數(shù)input()。如此一來,即便提示超過一行,input()語句也非常清楚。例如:
prompt = 'If you tell us who you are,we can personalize the messgaes you see.' prompt += '\nWhat is your first name? ' name = input(prompt) print('\nHello,' + name + '!')上面這個例子演示了一種創(chuàng)建多行字符串的方式,第1行將信息的前半部分存儲在變量prompt中,在第2行中,運(yùn)算符+=將“What is your first name ? ”追加到prompt中?
2、int()函數(shù)的些許知識
這里我們使用一個例子來引出int()函數(shù):
age = input("How old are you? ") # 提示用戶輸入用戶的年齡 age += 2 # 將用戶輸入的年齡增加2 print(age) # 輸出現(xiàn)在的age?
為什么會報錯呢?就寫了三行代碼就報錯了?21 + 2 = 23,直接輸出23不就好了嗎?這就是我文章開頭說到的input()函數(shù)會將用戶輸入的內(nèi)容以字符串的形式保存起來,字符串+2=?,所以編譯器會報錯。那為了解決這個問題,我們可以用int()函數(shù)來進(jìn)行對用戶年齡的獲取。改正代碼如下所示:
age = input("How old are you? ") # 提示用戶輸入用戶的年齡 age = int(age) # 將用戶輸入的年齡字符串轉(zhuǎn)換為整形 age = age + 2 print(age) #輸出現(xiàn)在的age除此以外,我們還有其他眾多的轉(zhuǎn)換函數(shù),例如float(),我后期也會介紹。在第一節(jié)的最后,以求模運(yùn)算符結(jié)束。“%”就是求模運(yùn)算符,它將兩個數(shù)相除并返回余數(shù)。所以當(dāng)一個數(shù)可被另一個數(shù)整除時,余數(shù)就為0了,所以我們可以利用%來判斷一個數(shù)是奇數(shù)還是偶數(shù),下面的代碼我們就使用了int()函數(shù)將用戶輸入的數(shù)值字符串轉(zhuǎn)換為整形,在輸出時,我們又使用str()將int型轉(zhuǎn)換為字符串類型,用于輸出:
number = input("Enter a number, and I will tell you if it is even or odd: ") # 提示用戶輸入一個數(shù)字,并獲取用戶的輸入 number = int(number) # 將用戶的輸入轉(zhuǎn)換為數(shù)字,整形 if number % 2 == 0: # 判斷數(shù)字是否為偶數(shù),是的話就輸出下面一條語句print("\nThe number " + str(number) + " is even.") else: # 數(shù)字為奇數(shù)print("\nThe number " + str(number) + " is odd.")
二、while循環(huán)
1、while循環(huán)講解及舉例
一看到循環(huán),就想起了之前學(xué)過的for循環(huán),那while循環(huán)和for循環(huán)有什么區(qū)別呢?for循環(huán)習(xí)慣用于遍歷集合中的每個元素,而while循環(huán)不斷地運(yùn)行,直到不滿足指定的條件為止。先舉個例子:
number = 1 # 給number初始值 while number <= 5: # 循環(huán)語句:number不大于5別想從循環(huán)出來 print(number)number += 1上述代碼預(yù)先設(shè)置了循環(huán)的結(jié)束條件,那么我們是否可以先讓程序運(yùn)行起來,通過檢查用戶的輸入來決定程序是否要繼續(xù)?答案是肯定的,要不然我們開始游戲后,如何退出游戲呢?
prompt ="\nTell me something, and I will reapt it back to you: " prompt += "\nEnter 'quit' to end the program. " # 以上代碼就是多行提示輸出的又一例子 message = "" # 將message設(shè)置為空的字符串,讓編譯器首次檢驗的時候有可供檢查的東西 while message != 'quit':message = input(prompt)print(message)上述2個示例代碼在使用while循環(huán)時,都使用了條件判斷,第一個是number不大于5就一直循環(huán),第二個是只要用戶不輸入“quit”,程序就一直運(yùn)行。那之前學(xué)的if條件語句中的檢驗多個條件的方法在這里還是否適用呢?我們改寫一下第二個示例代碼,讓用戶在輸入quit和exit中的任何一個時才退出程序:
prompt ="\nTell me something, and I will reapt it back to you: " prompt += "\nEnter 'quit' or 'exit' to end the program. " # 以上代碼就是多行提示輸出的又一例子 message = "" # 將message設(shè)置為空的字符串,讓編譯器首次檢驗的時候有可供檢查的東西 while (message != 'quit' and message != 'exit'):# 加不加括號都一樣message = input(prompt)print(message)細(xì)心的同學(xué)可能就發(fā)現(xiàn)了,誰退出游戲時,點了退出還會顯示“退出游戲”四個字。我們可以使用if條件語句,如果輸入的是“quit”或者“exit”就打印了。
2、在while循環(huán)中使用標(biāo)志
?
上述讓程序是否繼續(xù)的條件有兩個,那么有多個時,我們將會如何組織代碼,使其更加簡約易讀呢?那就是使用標(biāo)志。在要求很多條件同時滿足才能繼續(xù)運(yùn)行的程序中,我們可以定義一個變量,用于判斷整個程序是否還處于活動狀態(tài)。這個變量被稱為標(biāo)志,也就是這個程序的信號燈:可以讓程序在標(biāo)志為True時繼續(xù)運(yùn)行,并在任何事件導(dǎo)致標(biāo)志的值為False時讓程序停止運(yùn)行。如此一來,在while語句中就只需要檢查一個條件,把全部測試放在其他地方,進(jìn)而達(dá)到代碼美觀、易讀、功能還完整的目的。我們還以輸入“quit”結(jié)束的那個程序為例:
prompt ="\nTell me something, and I will reapt it back to you: " prompt += "\nEnter 'quit' or 'exit' to end the program. " # 以上代碼就是多行提示輸出的又一例子active = True while active: # 表示當(dāng)active為True時,就循環(huán)message = input(prompt) # 讓用戶輸入字符串if message == 'quit': # 如果用戶輸入quitactive = False # 改變標(biāo)志的狀態(tài)else: # 否則還是輸出messageprint(message)假設(shè),我們把“如果用戶輸入的是exit,也退出程序”轉(zhuǎn)變?yōu)榇a加進(jìn)去,只需要在if語句下增添elif語句即可。由此可見,這段程序的可擴(kuò)展性還是比較強(qiáng)的。
3、break和continue
Python里的break和continue與C語言里的break和continue是一樣的:
break:要立即退出while循環(huán),不再運(yùn)行循環(huán)中余下的代碼,也不管條件測試的結(jié)果如何,可使用break語句。
continue:返回到循環(huán)開頭,并根據(jù)條件測試結(jié)果決定是否繼續(xù)執(zhí)行循環(huán),可使用continue語句。舉例如下:
prompt = "\nPlease enter the name of a city you have visited: " prompt += "\n(Enter 'quit' when you are finished.)"while True:city = input(prompt)if city == 'quit':breakelse:print("I would love to go to " + city.title() + "!")?
注:在任何Python循環(huán)中都可使用break語句。例如可以使用break語句來退出遍歷列表或字典的for循環(huán)。
current_number = 0 while current_number < 10:current_number += 1if current_number % 2 ==0:continueprint(current_number)建議:每寫一個循環(huán)語句都要格外注意,避免死循環(huán)、避免縮進(jìn)問題。如果不小心掉進(jìn)了死循環(huán),那么可以使用“Ctrl+C”或關(guān)掉終端窗口來結(jié)束死循環(huán)的程序。
4、用while循環(huán)處理列表和字典
?我們之前學(xué)過使用for循環(huán)對列表、字典進(jìn)行增刪改查,現(xiàn)學(xué)的while同樣也可以完成上述操作。for循環(huán)是一種遍歷列表的有效方式,但在for循環(huán)中不應(yīng)修改列表,否則將導(dǎo)致Python難以跟蹤其中的元素。要在遍歷列表的同時對其進(jìn)行修改,可使用while循環(huán)。通過將while循環(huán)同列表和字典結(jié)合起來使用,可收集、存儲并組織大量輸入,供以后查看和顯示。
A、在列表之間移動元素
問題情景:A列表包含新注冊但還未驗證的網(wǎng)站用戶,驗證這些用戶后,將他們移到另一個已驗證用戶列表中:
# 首先創(chuàng)建一個待驗證用戶列表以及一個用于存儲已驗證用戶的空列表 unconfirmed_users = ['alice','brian','candace'] confirmed_users = [] # 使用while循環(huán)驗證每個未驗證的用戶,直到?jīng)]有為止 # 驗證一個用戶之后立馬將其追加到已驗證用戶的列表里 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)?
?細(xì)心觀察,三個人的名字在兩個列表間實現(xiàn)了移動,他們之間的相對位置也發(fā)生了變化,這是因為使用了pop()方法(從第一個列表的末尾開始刪除用戶,append()方法增加用戶時又將剛剛彈出的用戶增加到列表的第一個位置)
B、刪除包含特定值的所有列表元素
?在前面的課程中,我們學(xué)習(xí)了remove()方法來刪除列表中的特定值,這種方法只適合待刪除元素在列表中只出現(xiàn)一次的情況。如果待刪除元素在列表中出現(xiàn)多次,那么就得借助while循環(huán)語句。例如:
要刪除列表中所有的“cat”
pets = ['dog','cat','dog','goldfish','cat','rabbit','cat'] print(pets) while 'cat' in pets:pets.remove('cat') print(pets)?有人就說用一個for循環(huán)代替while循環(huán)也能實現(xiàn)。實現(xiàn)是絕對沒問題的,但是具體過程還是有很大區(qū)別的:while循環(huán)是只要發(fā)現(xiàn)列表里還有“cat”(發(fā)現(xiàn)的過程似乎是遍歷一次列表),就繼續(xù)循環(huán),執(zhí)行remove(),也就是說針對上面代碼舉的例子,while循環(huán)代碼至少遍歷列表三次(因為有三個cat);而for循環(huán)是按照列表中的元素一個一個找過去,是“cat”就刪掉,不是就繼續(xù)循環(huán),直到列表末尾。(for循環(huán)只遍歷了一次列表)(以上是我個人看法,歡迎指正)
C、使用while循環(huán)填充字典
for循環(huán)可以對字典進(jìn)行“增”,while循環(huán)也不甘示弱。例如下面一段調(diào)查信息的程序:
responses = {}# 設(shè)置一個標(biāo)志,指出調(diào)查是否繼續(xù) polling_active = Truewhile polling_active:#提示輸入被調(diào)查者的名字和回答name = input("\nWhat is your name? ")response = input("which moutain would you like to climb someday? ")# 將答卷存儲在字典中responses[name] = response# 看看是否還有人要參加調(diào)查repeat = input("Would you like to let another person respond?(yes/ no) ")if repeat == 'no':polling_active = False # 調(diào)查結(jié)果,顯示結(jié)果 print("\n--- Poll Results ---") for name,response in responses.items():print(name + " would like to climb " + response + ".")如果忘記了字典的增刪改查,就復(fù)習(xí)一下,尤其是items(),容易被遺忘。
?
總結(jié)
以上是生活随笔為你收集整理的十一、Python第十一课——用户输入和另一种循环(While)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机毕业设计答辩慌?软工本科 Java
- 下一篇: 什么是住房开发贷款 产品概念和借款人条