冗长的回答
Oversymplifyng问题,int
builtin(跟随链接了解整个故事)需要一个参数,数字文字或字符串。
您的代码
>>> a=str(input('Voer een door spatie gescheiden lijst met getallen in: ').split())
是创建一个列表的文字表述,因为你使用str
内置返回一个Python对象的文本表示:
>>> a
"['2', '3', '4', '5']"
以上是不按照int
的要求,但是文本表示的是一个数字的文本表示,所以当你将它传递给int
时,它会投诉
ValueError: invalid literal for int() with base 10: "['2', '3', '4', '5']"
如果我们忽略对str
的呼叫,该怎么办?
>>> a = input('Voer een door spatie gescheiden lijst met getallen in: ').split()
>>> a
['2', '3', '4', '5']
>>> int(a)
TypeError: int() argument must be a string or a number, not 'list'
注意,错误消息不同的是:不再是ValueError
但TypeError
。我们有一个列表,其中的项目是表示数字的字符串,但我们不允许使用列表,因为作为int
的参数。
输入列表理解,当代成语来操纵内容列表的(或通用的迭代)。
>>> [int(elt) for elt in a]
[2, 3, 4, 5]
的语法是容易的,[...]
你有开闭托架,就像使用列表字面时写入和内部你有一个由内向外的循环,循环,然后将第一主体for
规范。正文的评估结果顺序存储在一个列表中,即解释器为你输出,正如你上面所看到的,我们没有更多的字符串表示数字,但是是整数。列表解析的结果赋值给一个变量
>>> b = [int(elt) for elt in a]
,就大功告成了:
>>> print(b)
[2, 3, 4, 5]
>>>
在Python3,'input'已经产生一个字符串,所以'STR(输入(...) )'是多余的。 – 2015-02-10 13:39:24