如何在python中读取格式化的输入?

时间:2009-09-09 06:19:59

标签: python input

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

3,4,5,1,8

分成变量a,b,c,d&即

我如何在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个整数。然后?

4 个答案:

答案 0 :(得分:15)

使用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功能并不符合您的预期。它实际上将stdin的输入计算为python代码。

在你的情况下,你得到的是a中的数字元组,所有解析并准备好工作,但通常你并不真的想要使用这种奇怪的副作用。其他输入可能导致任何数量的事情发生。

顺便说一句,在Python 3中他们修复了这个问题,现在input函数完成了你所期望的工作。

还有两件事:

  1. 您无需import string进行简单的字符串操作。
  2. 与mjv said一样,要将元组或列表拆分为多个变量,您可以“解压缩”它。但是,如果您不知道列表的长度,这将是不可行的。
  3. 启封:

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

答案 1 :(得分: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指出这一点!)

答案 2 :(得分:0)

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

  

&GT;&GT;&GT; a =输入()
    3,4,5,1,8     &GT;&GT;&GT;打印的(a)
    (3,4,5,1,8)
    &GT;&GT;&GT;类型(a)中
    &lt; type'tuple'&gt;
    &GT;&GT;&GT;一个[0]
    3
    &GT;&GT;&GT; LEN(a)中
    5

答案 3 :(得分:-2)

in = eval(input())

a, b, c, d, e = in