我需要创建一个脚本来要求用户输入一个包含由空格分隔的圆号的字符串。然后我需要将字符串转换为整数。
有关从哪里开始的指示?这就是我尝试过的:
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']"
答案 0 :(得分:3)
您正在尝试转换列表的字符串表示形式,只需将内容拆分为列表并使用map转换为整数:
inp = input('Voer een door spatie gescheiden lijst met getallen in:').split())
a,b = map(int,inp)
这假定用户总是输入两个以空格分隔的数字。
更安全使用while循环和try / except:
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
,map会返回一个地图对象,因此这是一种有效的分配方式
[int(x) for x in inp]
也可以使用,但除非您需要列表,否则无法创建一个列表。
答案 1 :(得分:1)
过度简化问题,int
builtin(按照链接了解整个故事)需要一个参数,无论是数字文字还是字符串。
您的代码
>>> a=str(input('Voer een door spatie gescheiden lijst met getallen in: ').split())
正在创建列表的文本表示,因为您使用返回python对象的文本表示的str
内置函数:
>>> 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
的参数。
输入 list comprehension ,这是操纵列表(或通用 iterable )的内容的当代习语。
>>> [int(elt) for elt in a]
[2, 3, 4, 5]
语法很简单,[...]
你有开始和结束括号,正如你在使用列表文字时所写的那样,在里面你有一个由内到外的循环,首先是循环体,然后是for
规范。身体评估的结果按顺序存储在一个列表中,解释器为您输出,如上所示,我们没有更多的字符串表示数字而是整数。将列表推导的结果分配给变量
>>> b = [int(elt) for elt in a]
你完成了:
>>> print(b)
[2, 3, 4, 5]
>>>
答案 2 :(得分:0)
在split
list
str
之后,您需要将每个项目转换为int
。
您可以使用列表理解
b = [int(i) for i in a]
或使用map
b = list(map(int, a))
答案 3 :(得分:0)
您需要使用以下方式将列表中的每个元素转换为int,
a = [int(each) for each in a]
这将为您提供可在程序中使用的整数列表。如果它是无效的整数,那么您可以使用try-except
,
b = []
for each in a:
try:
b.append(int(each))
except ValueError:
print('Invalid number')