小编典典

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

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个整数。然后?


阅读 216

收藏
2021-01-20

共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功能无法实现您期望的功能。它实际上将stdin的输入评估为python代码。

以您的情况为例,您所拥有的只是一个元组中的数字a,所有这些数字都已解析并可以工作,但是通常您并不真正想要使用这种奇怪的副作用。其他输入可能导致任何事情发生。

顺便说一句,他们在Python
3中解决了这个问题,现在该input功能可以实现您的期望。

还有两件事:

  1. 您无需进行import string简单的字符串操作。
  2. 就像mjv所说的那样,要将一个元组或一个列表拆分为多个变量,可以对其进行“解压缩”。但是,如果您不知道列表会持续多久,这将是不可行的。

开箱:

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