如何在python中读取格式化的输入?
问题内容:
我想从stdin读取五个输入的数字,如下所示:
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个整数。然后?
问题答案:
使用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
功能可以实现您的期望。
还有两件事:
- 您无需进行
import string
简单的字符串操作。 - 就像mjv所说的那样,要将一个元组或一个列表拆分为多个变量,可以对其进行“解压缩”。但是,如果您不知道列表会持续多久,这将是不可行的。
开箱:
>>> l = (1,2,3,4,5)
>>> a,b,c,d,e = l
>>> e
5