这是一个简单的问题,我不想在这里问它,但我似乎无法在其他任何地方找到答案:是否有可能在一行Python中从用户那里获得多个值?
例如,在CI中可以做这样的事情:scanf("%d %d", &var1, &var2)
.但是,我无法弄清楚Python的等价物是什么.我认为它只是类似的东西var1, var2 = input("Enter two numbers here: ")
,但这不起作用,我不抱怨,因为如果它确实没有多大意义.
有没有人知道一个优雅和简洁的好方法?
kiz*_*zx2 54
Python的映射方式
printf("Enter two numbers here: ");
scanf("%d %d", &var1, &var2)
Run Code Online (Sandbox Code Playgroud)
将会
var1, var2 = raw_input("Enter two numbers here: ").split()
Run Code Online (Sandbox Code Playgroud)
请注意,我们不必显式指定,split(' ')
因为split()
默认情况下使用任何空格字符作为分隔符.这意味着如果我们只是简单地调用split()
那么用户可以使用制表符分隔数字,如果他真的想要,还有空格.
Python具有动态类型,因此无需指定%d
.但是,如果你运行上面那个var1
,那var2
将是两个字符串.您可以将它们转换为int
使用其他行
var1, var2 = [int(var1), int(var2)]
Run Code Online (Sandbox Code Playgroud)
或者你可以使用列表理解
var1, var2 = [int(x) for x in [var1, var2]]
Run Code Online (Sandbox Code Playgroud)
总结一下,你可以用这个单行完成整个过程:
# 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()]
Run Code Online (Sandbox Code Playgroud)
Chr*_*heD 10
你不能真的以C方式(我认为)这样做,但这样做的pythonic方法是(如果你的'输入'在它们之间有空格):
raw_answer = raw_input()
answers = raw_answer.split(' ') # list of 'answers'
Run Code Online (Sandbox Code Playgroud)
所以你可以重写你的尝试:
var1, var2 = raw_input("enter two numbers:").split(' ')
Run Code Online (Sandbox Code Playgroud)
请注意,这比使用"第一个"解决方案稍微灵活一些(例如,如果在末尾添加一个空格,这将会破坏).
还要注意,当不转换为int时,var1和var2仍然是使用此方法的字符串.
在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
Run Code Online (Sandbox Code Playgroud)
在Python 3.*
,input
就像是2.*
的raw_input
,回来你这仅仅是用户输入内容的字符串(而不是eval
荷兰国际集团作为2.*
用来在做的input
),所以你必须.split
,和/或eval
,&C,但你也更加的控制整件事.
如果你需要取两个整数说a,b在python中你可以使用map函数.
假设输入是,
1 5 3 1 2 3 4 5
其中1表示测试用例,5表示值的数量,3表示任务值,在给定5个值的下一行中,我们可以在PYTH 2.x版本中使用此方法进行此类输入.
testCases=int(raw_input())
number, taskValue = map(int, raw_input().split())
array = map(int, raw_input().split())
Run Code Online (Sandbox Code Playgroud)
您可以将map()中的'int'替换为所需的另一种数据类型.