在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()]