在Python中从一个输入获取两个值?

42 投票
19 回答
201221 浏览
提问于 2025-04-15 12:05

这个问题有点简单,我不太想在这里问,但我找不到其他地方的答案:在Python中,有没有办法在一行里获取多个用户输入的值?

比如在C语言中,我可以这样做:scanf("%d %d", &var1, &var2)。但是我搞不清楚在Python中怎么实现这个功能。我想可能可以用var1, var2 = input("请输入两个数字:"),但这样不行,我也不抱怨,因为如果这样能用,那就没什么意义了。

有没有人知道一个优雅又简洁的方法来做到这一点呢?

19 个回答

8

Python 2.* 中,input 允许用户输入任何表达式,比如一个元组:

>>> a, b = input('Two numbers please (with a comma in between): ')
Two numbers please (with a comma in between): 23, 45
>>> print a, b
23 45

而在 Python 3.* 中,input 的功能就像 2.* 里的 raw_input,它只会返回用户输入的内容,作为一个字符串(而不是像 2.* 中的 input 那样直接计算这个输入)。所以你需要用 .split 来分割字符串,或者用 eval 来计算它等等,但这样你对整个过程的控制会更强。

11

你不能完全用C语言的方式来做这个(我觉得),但用Python的方式可以这样做(如果你的'inputs'之间有空格的话):

raw_answer = raw_input()
answers = raw_answer.split(' ') # list of 'answers'

所以你可以把你的尝试改成:

var1, var2 = raw_input("enter two numbers:").split(' ')

请注意,这种方法的灵活性比使用'第一种'解决方案要低一些(比如说,如果你在最后加了一个空格,这个方法就会出问题)。

另外要注意,使用这种方法时,var1和var2仍然是字符串,除非你把它们转换成整数。

60

在Python中进行映射的方法

printf("Enter two numbers here: ");
scanf("%d %d", &var1, &var2)

是这样的

var1, var2 = raw_input("Enter two numbers here: ").split()

注意,我们不需要特别指定 split(' '),因为 split() 默认会把任何空白字符当作分隔符。这意味着如果我们简单地调用 split(),用户可以用制表符来分隔数字,如果他愿意的话,也可以用空格。

Python是动态类型的,所以不需要指定 %d。不过,如果你运行上面的代码,var1var2 都会是字符串类型。你可以用另一行代码把它们转换成 int 类型。

var1, var2 = [int(var1), int(var2)]

或者你可以使用 列表推导式

var1, var2 = [int(x) for x in [var1, var2]]

总之,你可以用这一行代码完成整个操作:

# Python 3
var1, var2 = [int(x) for x in input("Enter two numbers here: ").split()]

# Python 2
var1, var2 = [int(x) for x in raw_input("Enter two numbers here: ").split()]

撰写回答