python 字符串输入到整数的转换

python string input to integer conversion

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

关于从哪里开始的任何指示?这是我试过的:

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']"

您正在尝试转换列表的字符串表示形式,只需将内容拆分为列表并使用 map 转换为整数:

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

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

使用 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,映射 returns 一个映射对象,因此这是一种有效的分配方式。
[int(x) for x in inp] 也可以,但除非您需要一个列表,否则创建一个列表毫无意义。

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

您可以使用列表理解

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

或使用map

b = list(map(int, a))

您需要使用以下方式将列表的每个元素转换为 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')

冗长的回答

过度简化问题,int builtin(跟随link了解整个故事)需要一个参数,数字文字或字符串。

您的代码

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

正在创建列表的文本表示,因为您使用 str 内置函数 returns python object:[=28= 的文本表示]

>>> 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 的 contents ).

>>> [int(elt) for elt in a]
[2, 3, 4, 5]

语法很简单,[...] 你有左括号和右括号,就像你在使用列表文字时写的那样,里面有一个 inside-out 循环,首先是 body 循环,然后是 for 规范。 body 的计算结果顺序存储在一个列表中,解释器为您输出,正如您在上面看到的,我们没有更多的字符串表示数字而是整数。将列表理解的结果分配给变量

>>> b = [int(elt) for elt in a]

大功告成:

>>> print(b)
[2, 3, 4, 5]
>>>