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

8 投票
4 回答
36076 浏览
提问于 2025-04-15 14:10

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

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 个回答

0

如果你打印出变量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

3

仅适用于 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 提醒这一点!)

17

使用 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 所说,要把一个元组或列表拆分成多个变量,你可以“解包”它。不过,如果你不知道列表的长度,这样做就不太可行了。

解包:

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

撰写回答