在Python中从一个输入获取两个值?
这个问题有点简单,我不太想在这里问,但我找不到其他地方的答案:在Python中,有没有办法在一行里获取多个用户输入的值?
比如在C语言中,我可以这样做:scanf("%d %d", &var1, &var2)
。但是我搞不清楚在Python中怎么实现这个功能。我想可能可以用var1, var2 = input("请输入两个数字:")
,但这样不行,我也不抱怨,因为如果这样能用,那就没什么意义了。
有没有人知道一个优雅又简洁的方法来做到这一点呢?
19 个回答
在 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
来计算它等等,但这样你对整个过程的控制会更强。
你不能完全用C语言的方式来做这个(我觉得),但用Python的方式可以这样做(如果你的'inputs'之间有空格的话):
raw_answer = raw_input()
answers = raw_answer.split(' ') # list of 'answers'
所以你可以把你的尝试改成:
var1, var2 = raw_input("enter two numbers:").split(' ')
请注意,这种方法的灵活性比使用'第一种'解决方案要低一些(比如说,如果你在最后加了一个空格,这个方法就会出问题)。
另外要注意,使用这种方法时,var1和var2仍然是字符串,除非你把它们转换成整数。
在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
。不过,如果你运行上面的代码,var1
和 var2
都会是字符串类型。你可以用另一行代码把它们转换成 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()]