【问题标题】:How to read formatted input in python?如何在python中读取格式化输入?
【发布时间】:2009-09-09 06:19:59
【问题描述】:

我想从标准输入读取五个数字,输入如下:

3、4、5、1、8

分成单独的变量 a、b、c、d 和 e。

我如何在 python 中做到这一点?

我试过了:

import string
a=input()
b=a.split(', ')

对于两个整数,但它不起作用。我明白了:

Traceback (most recent call last):
  File "C:\Users\Desktop\comb.py", line 3, in <module>
    b=a.split(', ')
AttributeError: 'tuple' object has no attribute 'split'

如何做到这一点?并假设我没有一个固定的,而是一个可变的 n 个整数。然后呢?

【问题讨论】:

    标签: python input


    【解决方案1】:

    使用raw_input() 而不是input()

    # Python 2.5.4
    >>> a = raw_input()
    3, 4, 5
    >>> a
    '3, 4, 5'
    >>> b = a.split(', ')
    >>> b
    ['3', '4', '5']
    >>> [s.strip() for s in raw_input().split(",")] # one liner
    3, 4, 5
    ['3', '4', '5']
    

    具有误导性的名称 input 函数并没有达到您的预期。它实际上将来自标准输入的输入评估为 python 代码。

    在您的情况下,事实证明您所拥有的是a 中的一个数字元组,所有这些都已解析并准备好工作,但通常您并不想使用这种奇怪的副作用。其他输入可以导致任意数量的事情发生。

    顺便说一句,他们在 Python 3 中修复了这个问题,现在 input 函数可以满足您的期望。

    还有两件事:

    1. 您不需要import string 来执行简单的字符串操作。
    2. 像 mjv said 一样,要将元组或列表拆分为多个变量,您可以“解包”它。但是,如果您不知道列表有多长,这将是不可行的。

    开箱:

    >>> l = (1,2,3,4,5)
    >>> a,b,c,d,e = l
    >>> e
    5
    

    【讨论】:

    • 在 Python 3.1 中 input() 返回字符串。
    • 是的,但是发帖人明显用的是2.X
    【解决方案2】:

    仅在 Python 2.x 下 (*)

    在a = input()之后

    a 是一个包含 5 个值的元组,很容易解析!

    分配这 5 个值的快速方法是

    a, b, c, d, e = a
    

    (*) 使用 Python 3.0 版?或者肯定 3.1,input() 的工作方式更像 2.x 的 raw_input() 方法,这使得它不那么混乱。 (感谢 mshsayem 指出这一点!)

    【讨论】:

    • IN python 3.1 输入函数不会“评估”用户输入。如docs.python.org/3.1/library/functions.html:“...该函数然后从输入中读取一行,将其转换为字符串(去除尾随换行符),然后返回...”
    【解决方案3】:

    如果您打印出 a(包含您的输入的变量),您会发现 a 已经包含一个元组。您不必拆分内容。

    >>> a = 输入()
    3、4、5、1、8
    >>> 打印(一)
    (3、4、5、1、8)
    >>> 类型(a)

    >>> a[0]
    3
    >>> len(a)
    5

    【讨论】:

      【解决方案4】:
      in = eval(input())
      
      a, b, c, d, e = in
      

      【讨论】:

        猜你喜欢
        • 2010-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-27
        • 1970-01-01
        • 2013-06-19
        • 1970-01-01
        • 2010-12-30
        相关资源
        最近更新 更多