【问题标题】:Why do I get "ValueError: invalid literal for int() with base 10:" from user input?为什么我从用户输入中得到“ValueError:int() 以 10 为底的无效文字:”?
【发布时间】:2019-08-16 16:22:37
【问题描述】:
n = int(input())
markesheet = [[ int(input()).split()] for _ in range(n)]
print (markesheet)

用户必须输入n = 2,然后对于markesheet,用户必须输入2个数字22 33。

所需的输出是[22,33]。

我收到错误:

ValueError: int() 以 10 为底的无效文字:

【问题讨论】:

  • 用户输入n = 2还是只输入2?

标签: python list


【解决方案1】:

让我们考虑一下这里发生的事情的顺序:

  • input() 获取用户输入的字符串
  • int() 尝试获取该字符串类型对象并将其转换为 int 类型对象。 (给出 ValueError 是因为 '22 33' 作为整数没有意义,它是两个单独的数字)
  • .split() 没有意义,也没有为 int 类型定义

相反,您可能想要这个:

  • 从input()获取字符串
  • split() 将该字符串转换为较小字符串的列表
  • 将每个字符串转成int

其代码如下所示:

markesheet = [ int(_) for _ in input().split() ]

【讨论】:

    【解决方案2】:

    问题是当用户输入22 23时,函数input()会尝试将整个字符串22 23解释为一个整数。但显然,22 23 不是一个有效的整数,所以你会得到那个错误。

    因此,需要修改markesheet的构造方式:

    n = int(input())
    markesheet = [int(s) for s in input().split()[:n]]
    print(markesheet)
    

    【讨论】:

      猜你喜欢
      • 2021-01-09
      • 2017-11-17
      • 2018-03-26
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多