目录

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: aeinstein Full name: Albert Einstein Location: PrincetonUsername: mcurie Full name: Marie Curie Location: 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: EricHello, 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" />

这个示例演示了一种创建多行字符串的方式。第1行将消息的前半部分存储在变量prompt中; 在第2行中,运算符+=在存储在prompt中的字符串末尾附加一个字符串。 最终的提示横跨两行,并在问号后面包含一个空格,这也是出于清晰考虑:

If you tell us who you are, we can personalize the messages you see.What is your first name? EricHello, 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? 211 >>> age >= 18Traceback (most recent call last): File "", line 1, in 2 TypeError: unorderable types: str() >= int()

你试图将输入用于数值比较时(见),Python会引发错误,因为它无法将字符串和整数进 行比较:不能将存储在age中的字符串'21'与数值18进行比较(见)。 为解决这个问题,可使用函数int(),它让Python将输入视为数值。函数int()将数字的字符 串表示转换为数值表示,如下所示:

>>> age = input("How old are you? ")How old are you? 211 >>> age = int(age)>>> age >= 18True

在这个示例中,我们在提示时输入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? 71You're tall enough to ride!

将数值输入用于计算和比较前,务必将其转换为数值表示。

7.1.3 求模运算符

处理数值信息时,求模运算符(%)是一个很有用的工具,它将两个数相除并返回余数:

>>> 4 % 31>>> 5 % 32>>> 6 % 30>>> 7 % 31 

求模运算符不会指出一个数是另一个数的多少倍,而只指出余数是多少。 如果一个数可被另一个数整除,余数就为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: 42The 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 = 1while 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,循环将停止,整个程序也将到此结束:

12345 

你每天使用的程序很可能就包含while循环。例如,游戏使用while循环,确保在玩家想玩时 不断运行,并在玩家想退出时停止运行。如果程序在用户没有让它停止时停止运行,或者在用户 要退出时还继续运行,那就太没有意思了;有鉴于此,while循环很有用。


Python:核心知识点整理大全12-笔记-CSDN博客

往期快速传送门(在文章最后):