目錄
6.4.3 在字典中存儲字典
6.5 小結
第7章
用戶輸入和while循環
7.1 函數 input()的工作原理
7.1.1 編寫清晰的程序
7.1.2 使用 int()來獲取數值輸入
7.1.3 求模運算符
7.1.4 在 Python 2.7 中獲取輸入
7.2 while 循環簡介
7.2.1 使用 while 循環
往期快速傳送門👆(在文章最后):
6.4.3 在字典中存儲字典
可在字典中嵌套字典,但這樣做時,代碼可能很快復雜起來。例如,如果有多個網站用戶, 每個都有獨特的用戶名,可在字典中將用戶名作為鍵,然后將每位用戶的信息存儲在一個字典中, 并將該字典作為與用戶名相關聯的值。在下面的程序中,對于每位用戶,我們都存儲了其三項信 息:名、姓和居住地;為訪問這些信息,我們遍歷所有的用戶名,并訪問與每個用戶名相關聯的 信息字典:
many_users.py
users = {'aeinstein': {'first': 'albert','last': 'einstein','location': 'princeton',},'mcurie': {'first': 'marie','last': 'curie','location': 'paris',},}
1 for username, user_info in users.items():
2 print("\nUsername: " + username)
3 full_name = user_info['first'] + " " + user_info['last']
location = user_info['location']
4 print("\tFull name: " + full_name.title())print("\tLocation: " + location.title())
我們首先定義了一個名為users的字典,其中包含兩個鍵:用戶名'aeinstein'和'mcurie'; 與每個鍵相關聯的值都是一個字典,其中包含用戶的名、姓和居住地。在1處,我們遍歷字典 users,讓Python依次將每個鍵存儲在變量username中,并依次將與當前鍵相關聯的字典存儲在變 量user_info中。在主循環內部的2處,我們將用戶名打印出來。
在3處,我們開始訪問內部的字典。變量user_info包含用戶信息字典,而該字典包含三個鍵: 'first'、'last'和'location';對于每位用戶,我們都使用這些鍵來生成整潔的姓名和居住地, 然后打印有關用戶的簡要信息(見4):
Username: aeinsteinFull name: Albert EinsteinLocation: Princeton
Username: mcurieFull name: Marie CurieLocation: Paris
請注意,表示每位用戶的字典的結構都相同,雖然Python并沒有這樣的要求,但這使得嵌 套的字典處理起來更容易。倘若表示每位用戶的字典都包含不同的鍵,for循環內部的代碼將 更復雜。
6.5 小結
在本章中,你學習了:如何定義字典,以及如何使用存儲在字典中的信息;如何訪問和修改 字典中的元素,以及如何遍歷字典中的所有信息;如何遍歷字典中所有的鍵?值對、所有的鍵和 所有的值;如何在列表中嵌套字典、在字典中嵌套列表以及在字典中嵌套字典。
在下一章中,你將學習while循環以及如何從用戶那里獲取輸入。這是激動人心的一章,讓 你知道如何將程序變成交互性的——能夠對用戶輸入作出響應。
第7章
用戶輸入和while循環
7.1 函數 input()的工作原理
函數input()讓程序暫停運行,等待用戶輸入一些文本。獲取用戶輸入后,Python將其存儲在 一個變量中,以方便你使用。 例如,下面的程序讓用戶輸入一些文本,再將這些文本呈現給用戶:
parrot.py
message = input("Tell me something, and I will repeat it back to you: ")
print(message)
函數input()接受一個參數:即要向用戶顯示的提示或說明,讓用戶知道該如何做。在這個 示例中,Python運行第1行代碼時,用戶將看到提示Tell me something, and I will repeat it back to you:。程序等待用戶輸入,并在用戶按回車鍵后繼續運行。輸入存儲在變量message中,接下 來的print(message)將輸入呈現給用戶:
Tell me something, and I will repeat it back to you: Hello everyone!
Hello everyone!
注意 Sublime Text不能運行提示用戶輸入的程序。你可以使用Sublime Text來編寫提示用戶輸入 的程序,但必須從終端運行它們。詳情請參閱1.4節。
7.1.1 編寫清晰的程序
每當你使用函數input()時,都應指定清晰而易于明白的提示,準確地指出你希望用戶提供 什么樣的信息——指出用戶該輸入任何信息的提示都行,如下所示:
greeter.py
name = input("Please enter your name: ")
print("Hello, " + name + "!")
通過在提示末尾(這里是冒號后面)包含一個空格,可將提示與用戶輸入分開,讓用戶清楚 地知道其輸入始于何處,如下所示:
Please enter your name: Eric
Hello, Eric!
有時候,提示可能超過一行,例如,你可能需要指出獲取特定輸入的原因。在這種情況下, 可將提示存儲在一個變量中,再將該變量傳遞給函數input()。這樣,即便提示超過一行,input() 語句也非常清晰。
greeter.py
prompt = "If you tell us who you are, we can personalize the messages you see."
prompt += "\nWhat is your first name? "
name = input(prompt)
print("\nHello, " + name + "!")
這個示例演示了一種創建多行字符串的方式。第1行將消息的前半部分存儲在變量prompt中; 在第2行中,運算符+=在存儲在prompt中的字符串末尾附加一個字符串。 最終的提示橫跨兩行,并在問號后面包含一個空格,這也是出于清晰考慮:
If you tell us who you are, we can personalize the messages you see.
What is your first name? Eric
Hello, Eric!
7.1.2 使用 int()來獲取數值輸入
使用函數input()時,Python將用戶輸入解讀為字符串。請看下面讓用戶輸入其年齡的解釋器 會話:
>>> age = input("How old are you? ")
How old are you? 21
>>> age
'21'
用戶輸入的是數字21,但我們請求Python提供變量age的值時,它返回的是'21'——用戶輸入 的數值的字符串表示。我們怎么知道Python將輸入解讀成了字符串呢?因為這個數字用引號括起 了。如果我們只想打印輸入,這一點問題都沒有;但如果你試圖將輸入作為數字使用,就會引發 錯誤:
>>> age = input("How old are you? ")
How old are you? 21
1 >>> age >= 18
Traceback (most recent call last):File "<stdin>", line 1, in <module>
2 TypeError: unorderable types: str() >= int()
你試圖將輸入用于數值比較時(見?),Python會引發錯誤,因為它無法將字符串和整數進 行比較:不能將存儲在age中的字符串'21'與數值18進行比較(見?)。 為解決這個問題,可使用函數int(),它讓Python將輸入視為數值。函數int()將數字的字符 串表示轉換為數值表示,如下所示:
>>> age = input("How old are you? ")
How old are you? 21
1 >>> age = int(age)
>>> age >= 18
True
在這個示例中,我們在提示時輸入21后,Python將這個數字解讀為字符串,但隨后int()將這 個字符串轉換成了數值表示(見?)。這樣Python就能運行條件測試了:將變量age(它現在包含 數值21)同18進行比較,看它是否大于或等于18。測試結果為True。 如何在實際程序中使用函數int()呢?請看下面的程序,它判斷一個人是否滿足坐過山車的 身高要求: rollercoaster.py
height = input("How tall are you, in inches? ")
height = int(height)
if height >= 36:print("\nYou're tall enough to ride!")
else: print("\nYou'll be able to ride when you're a little older.")
在這個程序中,為何可以將height同36進行比較呢?因為在比較前,height = int(height) 將輸入轉換成了數值表示。如果輸入的數字大于或等于36,我們就告訴用戶他滿足身高條件:
How tall are you, in inches? 71
You're tall enough to ride!
將數值輸入用于計算和比較前,務必將其轉換為數值表示。
7.1.3 求模運算符
處理數值信息時,求模運算符(%)是一個很有用的工具,它將兩個數相除并返回余數:
>>> 4 % 3
1
>>> 5 % 3
2
>>> 6 % 3
0
>>> 7 % 3
1
求模運算符不會指出一個數是另一個數的多少倍,而只指出余數是多少。 如果一個數可被另一個數整除,余數就為0,因此求模運算符將返回0。你可利用這一點來判 斷一個數是奇數還是偶數:
even_or_odd.py
number = input("Enter a number, and I'll tell you if it's even or odd: ")
number = int(number)
if number % 2 == 0:print("\nThe number " + str(number) + " is even.")
else:print("\nThe number " + str(number) + " is odd.")
偶數都能被2整除,因此對一個數(number)和2執行求模運算的結果為零,即number % 2 == 0,那么這個數就是偶數;否則就是奇數。
Enter a number, and I'll tell you if it's even or odd: 42
The number 42 is even.
7.1.4 在 Python 2.7 中獲取輸入
如果你使用的是Python 2.7,應使用函數raw_input()來提示用戶輸入。這個函數與Python 3 中的input()一樣,也將輸入解讀為字符串。 Python 2.7也包含函數input(),但它將用戶輸入解讀為Python代碼,并嘗試運行它們。因此, 最好的結果是出現錯誤,指出Python不明白輸入的代碼;而最糟的結果是,將運行你原本無意運 行的代碼。如果你使用的是Python 2.7,請使用raw_input()而不是input()來獲取輸入。
7.2 while 循環簡介
for循環用于針對集合中的每個元素都一個代碼塊,而while循環不斷地運行,直到指定的條 件不滿足為止。
7.2.1 使用 while 循環
你可以使用while循環來數數,例如,下面的while循環從1數到5:
counting.py
current_number = 1
while current_number <= 5:print(current_number)current_number += 1
在第1行,我們將current_number設置為1,從而指定從1開始數。接下來的while循環被設置 成這樣:只要current_number小于或等于5,就接著運行這個循環。循環中的代碼打印 current_number的值,再使用代碼current_number += 1(代碼current_number = current_number + 1的簡寫)將其值加1。 只要滿足條件current_number <= 5,Python就接著運行這個循環。由于1小于5,因此Python 打印1,并將current_number加1,使其為2;由于2小于5,因此Python打印2,并將current_number 加1,使其為3,以此類推。一旦current_number大于5,循環將停止,整個程序也將到此結束:
1
2
3
4
5
你每天使用的程序很可能就包含while循環。例如,游戲使用while循環,確保在玩家想玩時 不斷運行,并在玩家想退出時停止運行。如果程序在用戶沒有讓它停止時停止運行,或者在用戶 要退出時還繼續運行,那就太沒有意思了;有鑒于此,while循環很有用。
Python:核心知識點整理大全12-筆記-CSDN博客