【问题标题】:Problem in taking multiple input in a line在一行中获取多个输入的问题
【发布时间】:2019-01-13 01:15:23
【问题描述】:

我想接受像这样的输入 + 2 3 ? 1 20 其中第一个变量是 char,下一个变量是整数

我已经这样做了

sign,m,n = input().split()
[sign,m,n]=[str(sign),int(m),int(n)]

但我得到这个错误

ValueError: 没有足够的值来解包(预期 3,得到 0)

【问题讨论】:

  • 无法重现!您的 code-sn-p 运行良好。
  • 您的输入没有出现该错误。当我按 Enter 而不输入一些文本时,我 确实 得到它。也许你忘了输入什么?
  • @usr2564301 我每次按 Enter 时都会遇到这个问题
  • @G-man 这也给了我同样的错误
  • 您也可以使用以下单行语句完成此任务:sign, m, n = [c if i == 0 else int(c) for i, c in enumerate(input().split()[:3])]

标签: python-3.x


【解决方案1】:

您的问题在于sign,m,n = input().split()。您必须将其视为列表,而不是返回 3 个值的函数。这是您想要的sn-p代码:

stdin = input().split()
sign,m,n = str(stdin[0]),int(stdin[1]),int(stdin[2])

Stdin 是一个列表

【讨论】:

    【解决方案2】:

    如果你想使用自己的逻辑来完成它,那么这里就是方法。

    只需在第一条语句的末尾附加[:3] 即可对列表进行切片。

    >>> sign, m, n = input().split()[:3]
    + 2 3 ? 1 20
    >>>
    >>> [sign,m,n] = [str(sign), int(m), int(n)]
    >>>
    >>> sign
    '+'
    >>>
    >>> m
    2
    >>>
    >>> n
    3
    >>>
    

    这是另一种在一行中完成相同操作的方法。

    为此,您可以使用列表理解的概念。

    >>> sign, m, n = [c if i == 0 else int(c) for i, c in enumerate(input().split()[:3])]
    + 2 3 ? 1 20
    >>>
    >>> sign
    '+'
    >>> m
    2
    >>> n
    3
    >>>
    

    【讨论】:

      【解决方案3】:

      只需在您的第一条语句中添加封闭的方括号即可在 Python 3.6.7 上运行:

      [GCC 8.2.0] on linux
      Type "help", "copyright", "credits" or "license" for more information.
      >>> [sign,m,n] = input().split()
      - 2 3
      >>> [sign,m,n] = [str(sign),int(m),int(n)]
      >>> sign
      '-'
      >>> m
      2
      >>> n
      3
      

      【讨论】:

      • 是的。这也有效。你能告诉我这个方括号是如何工作的吗?
      猜你喜欢
      • 2014-06-24
      • 1970-01-01
      • 2023-03-08
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      • 2022-01-10
      相关资源
      最近更新 更多