input()函数的工作原理

input() 函数暂停您的程序并等待用户输入一些文本。 一旦 Python 收到用户的输入,它就会将该输入分配给一个变量,以方便您使用。

例如,以下程序要求用户输入一些文本,然后将该消息显示给用户:

message = input("Tell me something, and I will repeat it back to you: ")
print(message)

input() 函数接受一个参数:我们要向用户显示的提示,以便他们知道要输入什么样的信息。 在此示例中,当 Python 运行第一行时,用户会看到提示 Tell me something, and I will repeat it back back to you: 。 程序等待用户输入他们的响应,并在用户按下 ENTER 后继续。 响应分配给变量消息,然后 print(message) 将输入显示回给用户:

Tell me something, and I will repeat it back to you: Hello everyone!
Hello everyone!

一些文本编辑器不会运行提示用户输入的程序。 您可以使用这些编辑器编写提示输入的程序,但您需要从终端运行这些程序。 请参阅第 11 页的“从终端运行 Python 程序”。

编写清晰的提示

每次使用 input() 函数时,您都应该包含一个清晰、易于理解的提示,告诉用户您正在寻找什么样的信息。 任何告诉用户输入什么的语句都应该有效。 例如:

name = input("Please enter your name: ")
print(f"\nHello, {name}!")

在提示末尾添加一个空格(在前面示例中的冒号之后)以将提示与用户的响应分开,并让用户清楚地知道在何处输入文本。 例如:

Please enter your name: Eric
Hello, Eric!

有时你会想写一个比一行长的提示。 例如,您可能想告诉用户您为什么要求某些输入。 您可以将提示分配给一个变量并将该变量传递给 input() 函数。 这允许您在多行上构建提示,然后编写一个干净的 input() 语句。

prompt = "If you share your name, we can personalize the messages you see."
prompt += "\nWhat is your first name? "

name = input(prompt)
print(f"\nHello, {name}!")

此示例显示了一种构建多行字符串的方法。 第一行将消息的第一部分分配给变量提示。 在第二行中,运算符 += 获取分配给 prompt 的字符串并将新字符串添加到末尾。

提示现在跨越两行,为清楚起见,在问号后再次加空格:

If you share your name, we can personalize the messages you see.
What is your first name? Eric

Hello, Eric!

使用int()来获取数值输入

当您使用 input() 函数时,Python 将用户输入的所有内容解释为字符串。 考虑以下解释器会话,它询问用户的年龄:

>>> age = input("How old are you? ")
How old are you? 21
>>> age
'21'

用户输入数字 21,但是当我们向 Python 询问年龄的值时,它返回“21”,即输入的数值的字符串表示形式。 我们知道 Python 将输入解释为字符串,因为数字现在用引号引起来。 如果您想做的只是打印输入,这很有效。 但是,如果您尝试将输入用作数字,则会出现错误:

>>> age = input("How old are you? ")
How old are you? 21
>>> age >= 18 (1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '>=' not supported between instances of 'str' and (2)
'int'
1 当您尝试使用输入进行数值比较时,Python 会产生错误,因为它无法将字符串与整数进行比较:
2 分配给年龄的字符串 '21' 无法与数值 18 进行比较。

我们可以使用 int() 函数解决这个问题,该函数将输入字符串转换为数值。 这允许比较成功运行:

>>> age = input("How old are you? ")
How old are you? 21
>>> age = int(age) (1)
>>> age >= 18
True
1 在这个例子中,当我们在提示符下输入 21 时,Python 将数字解释为字符串,但随后通过 int() 将值转换为数字表示。

现在 Python 可以运行条件测试:它比较 age(现在表示数值 21)和 18 以查看 age 是否大于或等于 18。此测试的计算结果为 True。 如何在实际程序中使用 int() 函数? 考虑一个确定人的身高是否足以乘坐过山车的程序:

height = input("How tall are you, in inches? ")
height = int(height)

if height >= 48:
    print("\nYou're tall enough to ride!")
else:
    print("\nYou'll be able to ride when you're a little older.")

该程序可以将 height 与 48 进行比较,因为 height = int(height) 在进行比较之前将输入值转换为数字表示形式。 如果输入的数字大于或等于 48,我们会告诉用户他们已经足够高了:

How tall are you, in inches? 71
You're tall enough to ride!

当您使用数值输入进行计算和比较时,请务必先将输入值转换为数值表示。

求模运算符

处理数字信息的有用工具是模运算符 (%),它将一个数除以另一个数并返回余数:

>>> 4 % 3
1
>>> 5 % 3
2
>>> 6 % 3
0
>>> 7 % 3
1

模运算符不会告诉您一个数字适合另一个数字多少次; 它只告诉你余数是多少。 当一个数可被另一个数整除时,余数为 0,因此模运算符始终返回 0。您可以使用此事实来确定一个数是偶数还是奇数:

number = input("Enter a number, and I'll tell you if it's even or odd: ")
number = int(number)

if number % 2 == 0:
    print(f"\nThe number {number} is even.")
else:
    print(f"\nThe number {number} is odd.")

偶数总是可以被 2 整除,所以如果一个数和 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.Rental Car

编写一个程序,询问用户他们想要什么样的租车。 打印一条关于那辆车的消息,比如“让我看看我能不能给你找一辆斯巴鲁。”

7-2.Restaurant Seating

编写一个程序,询问用户他们的晚餐组中有多少人。 如果答案超过八个,打印一条消息说他们必须等待一张桌子。 否则,报告他们的桌子准备好了。

7-3.Multiples of Ten

向用户询问一个数字,然后报告该数字是否是 10 的倍数。