我需要从stdin输入3个整数并输出它们的总和。这是我的所作所为:
(n,l,k) = raw_input().split()
print n + l + k
当然,我得到n
,l
,k
字符串连接,所以我稍微改了一下:
(n,l,k) = raw_input().split()
print int(n) + int(l) + int(k)
现在没关系。但有任何方法可以为动态“”设置数据类型,因此n
,l
,k
变为int
whitout明确重新分配以供进一步使用(我想到n = int(n)
)?
更新
如果我需要输入int
,string
,int
(元组项目属于不同类型),该怎么办?
这意味着我无法做到
(n,S,k) = [int(i) for i in raw_input().split()]
任何zip()
,lambdas,接受类型?
提前致谢, 伊利亚安德
答案 0 :(得分:3)
不是真的。你需要告诉它你想要什么。在Python中有一些更简洁的方法可以做到这一点。
(n,l,k) = [int(v) for v in raw_input().split()]
这通常适用于所有用户输入。必须对其进行验证并将其转换为程序其余部分所需的内容。
哦,你可以使用类型对象列出你想要的类型。使用变量是引用的事实,您也可以使用变量引用类型对象。
print [t(tok) for (t, tok) in zip((int, str, int), raw_input().split())]
答案 1 :(得分:2)
我认为这可以满足您的需求:
(n,l,k) = [f(i) for i,f in zip(raw_input().split(),(int,str,int))]
因此,我们将输入值和一个将输入转换为所需类型的函数列表(或更确切地说是元组)压缩在一起。
你不能做的是以某种方式告诉Python n
应该始终包含int
并让它自动转换。 Python中的变量只是绑定到值的名称 - 任何值 - 因此除了它们绑定的值之外,您不能向它们添加任何状态。
答案 2 :(得分:1)
你能把输入变量当作dict处理吗?
var_types = { 'n': int, 'S': str, 'k': int } # dict, so no given order
var_order = ('n', 'S', 'k') # a tuple with a given order of variables
input_var = dict((k, var_types[k](v)) for k, v in zip(var_order, raw_input().split()))
对于给定的字符串12 abc 34
,它返回:
{'S': 'abc', 'k': 34, 'n': 12}
这样,您可以在一个位置为所有输入变量集中定义var_types
。将为每个var_order
对话定义raw_input
。