【问题标题】:How to take two inputs in one line separated by space in python如何在python中用空格分隔一行中的两个输入
【发布时间】:2021-07-27 09:40:16
【问题描述】:

所以我在hacker earth练习,我必须在一行中输入两个输入,用空格隔开。 下面的代码是我使用的:

 x, y = [x for x in input("Enter two value: ").split()]

它应该接受看起来像“2 5”的输入

它正在返回一个错误:

执行失败
ValueError : 没有足够的值来解包(预期 2,得到 1)

堆栈跟踪:
回溯(最近一次通话最后一次):
文件“/tmp/165461120/user_code.py”,第 13 行,在
x, y = [x for x in input("输入两个值:").split()]
ValueError: 没有足够的值来解包(预期 2,得到 1)

我想我理解的是,它将两个值作为单个字符串提供。如果是这样,我如何将它们分开并将它们转换为整数?

【问题讨论】:

  • 这是有效的。你确定你没有在 5 之后输入额外的空格(比如 '2 5' ?)。除此之外,无需理解此代码:.split() 的返回已经是一个列表 - 只要您输入正确数量的元素,这些值将被分配给变量,如:x, y = input("...").split()
  • 如果你在输入行的 2 和 5 之间键入了一个制表符,你会得到那个确切的错误。再试一次并输入空格:)

标签: python-3.x input valueerror


【解决方案1】:

对于您的情况,只剩下类型转换,因此拆分后的数字变为int。所以,你只需要添加

x, y = [int(x) for x in input("Enter two value: ").split()]

或者,如果要在单行中输入 2 个输入,您也可以使用 map

x, y = map(int, input().split())

【讨论】:

  • 当我进行类型转换时,它显示“invalid literal for int() with base 10”
  • @KarthikBhandary,你能分享你尝试输入数字的代码吗?
【解决方案2】:

接受两个输入

x, y = input("Enter two value: ").split()

这应该可以解决问题。要转换为 int,您可以在 x 和 y 上分别进行。

或者更好的方法是使用地图功能

x, y = map(int, input().split())

【讨论】:

  • 我也尝试过,但它不起作用。它显示了预期的错误 2 但得到了 1
  • 你有split的特殊字符吗,既然你提到了hacker earth,你可以检查那里提供的输入格式。否则,您可以将值作为单个输入获取并打印出来,这样您就可以了解格式,然后可以根据需要对其进行拆分。
  • @karthikeyan 拆分的特殊字符是什么意思?以及如何检查输入格式??
  • 我猜你一定没有两个输入,你可以通过输入 print(input("Enter two value: ")) 来验证它:这个代码不能提交
【解决方案3】:

在 [20] 中:a,b = raw_input().split() 12 12.2

在 [21] 中:a = int(a) 出[21]:12

在 [22] 中:b = float(b) 出局[22]:12.2 你不能在单行中做到这一点(或者至少在没有一些超级骗子额外的 hackz0r 技能或分号的情况下不能这样做),但是 python 不是为单行而设计的。

【讨论】:

    【解决方案4】:

    发生这种情况是因为 Hacker Earth 在几乎所有情况下都会逐行提供其输入。 在几乎所有情况下,输入都采用以下形式。

    1
    2 3 4
    5
    6 7 8
    

    这会因问题而异,并且需要针对每个问题进行个性化设置。 您收到错误没有足够的值来解包,因为 Hacker Earth 只提供一个输入,而您期望 2。如果它超过 2,那么错误将是太多的值打开包装。

    这很可能是因为您尝试输入测试用例的数量,这是大多数黑客地球问题中的第一个输入和单个数字输入。

    【讨论】:

      【解决方案5】:

      Process-01:使用列表理解

      whole_line = input() # 1 2 3 4 5
      strings = whole_line.split(' ') # ['1', '2', '3', '4', '5']
      # remove extra space within numbers if any from list
      numbers = [int(num) for num in strings if len(num)>0]  # [1, 2, 3, 4, 5]
      print(numbers) # [1, 2, 3, 4, 5]
      

      现在你可以像下面这样在一行中写下整个逻辑

      numbers = [ int(num) for num in input().split(' ') if len(num)>0 ]
      print(numbers) 
      

      Process-02:使用过滤器和映射功能

      whole_line = input() # 1 2 3 4 5
      strings = whole_line.split(' ') # ['1', '2', '3', '4', '5']
      # remove extra space within numbers  if any from list
      strings = list(filter(lambda x :len(x)>0 ,strings))
      numbers = list(map(int,strings)) # convert each string to int
      print(numbers) # [1, 2, 3, 4, 5]
      

      现在你可以像下面这样在一行中写下整个逻辑

      numbers = list(map(int,filter(lambda x : len(x)>0,input().split(' '))))
      print(numbers)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-30
        • 2018-02-23
        • 1970-01-01
        • 2020-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多