收集输入

已完成

到目前为止,你已经了解了 Python 编程语言的各种构造。 你还编写了几个程序。 但是,程序要操作数据,而该数据来自某个位置。 在本单元中,你将进一步了解如何从命令行和用户输入收集输入。

命令行输入

使用 python3 启动程序时,请为程序指定要启动的文件的名称。 还可为它提供一组参数:程序在运行时有权访问的数据。 如下所示:

python3 backup.py 2023-01-01

在以上代码中,字符串“2023-01-01”可以用作程序 backup.py 从该日期开始备份的指令。 使用命令行参数的好处是具有灵活性。 程序的行为可能有所不同,具体取决于其外部输入。

命令行参数

在编码时是如何捕获这些命令的? 通过使用 sys 模块,可以检索命令行参数,并在程序中使用它们。 请看以下代码:

import sys

print(sys.argv)
print(sys.argv[0]) # program name
print(sys.argv[1]) # first arg

sys.argv 是一个数组,或者说是一个包含许多项的数据结构。 第一个位置在数组中表示为 0,包含程序名称。 第二个位置 1 包含第一个参数。 假设程序 backup.py 包含示例代码,并且你按如下所示运行该程序:

python3 backup.py 2023-01-01

然后程序生成以下结果:

['backup.py', '2023-01-01'] 
backup.py
2023-01-01

用户输入

向程序传递数据的另一种方式是让用户输入数据。 你可以编写代码,让程序告知用户输入信息。 你将输入的数据保存在程序中,然后处理这些数据。

要捕获来自用户的信息,请使用 input() 函数。 下面是一个示例:

print("Welcome to the greeter program")
name = input("Enter your name: ")
print("Greetings " + name)

假设程序 input.py 包含示例代码,并且你按如下所示运行该程序:

python3 input.py

运行程序会邀请你输入你的姓名,例如:

Welcome to the greeter program
Enter your name: 

输入值并按 Enter 后,会返回问候语:

Welcome to the greeter program
Enter your name: Picard
Greetings Picard

使用数字

函数 input() 将结果存储为字符串,因此,以下代码可能不会执行你想要它执行的操作:

print("calculator program")
first_number = input("first number: ")
second_number = input("second number: ")
print(first_number + second_number)

运行此程序会邀请你输入第一个数字,比如说 3

calculator program
first number: 3

按 Enter 后,可以输入第二个数字,比如说 4

calculator program
first number: 3
second number: 4

按 Enter 可得到以下结果:

calculator program
first number: 3
second number: 4
34

你可能想要此程序用 7 而不是 34 来回答你。 是哪里出错了呢?

原因是 first_numbersecond_number 是字符串。 为了使计算正常运行,需要使用 int() 函数将这些字符串更改为数字。 通过修改程序的最后一行来使用 int(),可以解决此问题:

print(int(first_number) + int(second_number))

使用相同的值重新运行该程序,现在返回的响应是 7

calculator program
first number: 3
second number: 4
7