2015-02-10 58 views
1

我需要创建一个脚本来要求用户输入一个包含由空格分隔的圆形数字的字符串。然后我需要将字符串转换为整数。python字符串输入到整数转换

任何指针从哪里开始?这是我已经试过:

a=str(input('Voer een door spatie gescheiden lijst met getallen in:').split()) 
b=int(a) 
print(b) 

,但我不断收到:

ValueError: invalid literal for int() with base 10: "['50', '60']" 
+1

在Python3,'input'已经产生一个字符串,所以'STR(输入(...) )'是多余的。 – 2015-02-10 13:39:24

回答

3

您试图蒙上了列表的字符串表示,只是内容分割成一个列表,并使用地图投射到整数:

inp = input('Voer een door spatie gescheiden lijst met getallen in:').split()) 
a,b = map(int,inp) 

这假定用户总是输入由空格分隔的两个数字。

更安全的使用while循环和一个try /除外:

while True: 
    try: 
     inp = input('Voer een door spatie gescheiden lijst met getallen in:').split() 
     a, b = map(int, inp) 
     break 
    except ValueError: 
     print("Invalid input") 
print(a,b) 

如果输入整数未知量:

while True: 
     try: 
      inp = input('Voer een door spatie gescheiden lijst met getallen in:').split() 
      nums = map(int, inp) 
      break 
     except ValueError: 
      print("Invalid input") 
    for num in nums: 
     print(num) 

使用python3,地图返回地图对象,因此它是一种有效的分配方式。
[int(x) for x in inp]也可以工作,但除非你需要一个清单,否则没有意义创建一个清单。

+0

@BhargavRao,有两个数字输入,OP需要解压两个并分配给变量然后打印。 – 2015-02-10 13:24:29

+1

@BhargavRao,我假设OP使用python3,所以实际上'map(int,inp)'已经足够了 – 2015-02-10 13:27:36

+0

感谢它使用while循环! – Bart1K 2015-02-10 13:37:44

0

之后split您有liststr,所以您需要将每个单独的项目转换为int

你可以使用一个列表理解

b = [int(i) for i in a] 

或者使用map

b = list(map(int, a)) 
0

您需要按照以下方式向列表中的每个元素转换成整型,

a = [int(each) for each in a]

这会给你一份清单整数,你可以在你的程序中使用。在情况下,如果它是一个无效的整数,那么你可以使用try-except

b = [] 
for each in a: 
    try: 
     b.append(int(each)) 
    except ValueError: 
     print('Invalid number') 
1

冗长的回答

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' 

注意,错误消息不同的是:不再是ValueErrorTypeError。我们有一个列表,其中的项目是表示数字的字符串,但我们不允许使用列表,因为作为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] 
>>> 
+0

值得长拖晚答...悲伤...... :( – 2015-02-10 14:22:37