如何在Python中读取格式化输入?
我想从标准输入中读取五个数字,输入格式如下:
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 的整数,那该怎么办?
4 个回答
如果你打印出变量a(也就是你输入的内容),你会发现a已经包含了一个元组。你不需要再去拆分里面的内容。
>>> a = input()
3, 4, 5, 1, 8
>>> print(a)
(3, 4, 5, 1, 8)
>>> type(a)
<type 'tuple'>
>>> a[0]
3
>>> len(a)
5
仅适用于 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 提醒这一点!)
使用 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
函数的行为是你所期待的。
还有两件事:
- 你不需要
import string
来进行简单的字符串操作。 - 正如 mjv 所说,要把一个元组或列表拆分成多个变量,你可以“解包”它。不过,如果你不知道列表的长度,这样做就不太可行了。
解包:
>>> l = (1,2,3,4,5)
>>> a,b,c,d,e = l
>>> e
5