How to read formatted input in python?

2020-03-02 07:11发布

I want to read from stdin five numbers entered as follows:

3, 4, 5, 1, 8

into seperate variables a,b,c,d & e.

How do I do this in python?

I tried this:

import string
a=input()
b=a.split(', ')

for two integers, but it does not work. I get:

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'

How to do this? and suppose I have not a fixed but a variable number n integers. Then?

标签: python input
4条回答
男人必须洒脱
2楼-- · 2020-03-02 07:13
in = eval(input())

a, b, c, d, e = in
查看更多
唯我独甜
3楼-- · 2020-03-02 07:16

If you print out a (the variable containing your input) you will find out, that a already contains a tuple. You do not have to split the contents.

>>> a = input()
3, 4, 5, 1, 8
>>> print(a)
(3, 4, 5, 1, 8)
>>> type(a)
<type 'tuple'>
>>> a[0]
3
>>> len(a)
5

查看更多
倾城 Initia
4楼-- · 2020-03-02 07:28

Under Python 2.x only (*)

after a = input()

a is a tuple with the 5 values readily parsed!

A quick way to assign these 5 values is

a, b, c, d, e = a

(*) with Python version 3.0? or for sure 3.1, input() works more like the raw_input() method of 2.x, which makes it less confusing. (thank you mshsayem to point this out!)

查看更多
来,给爷笑一个
5楼-- · 2020-03-02 07:35

Use raw_input() instead of 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']

The misleadingly names input function does not do what you'd expect it to. It actually evaluates the input from stdin as python code.

In your case it turns out that what you then have is a tuple of numbers in a, all parsed and ready for work, but generally you don't really want to use this curious side effect. Other inputs can cause any number of things to happen.

Incidentally, in Python 3 they fixed this, and now the input function does what you'd expect.

Two more things:

  1. You don't need to import string to do simple string manipulations.
  2. Like mjv said, to split a tuple or a list into several variables, you can 'unpack' it. This will not be feasible if you don't know how long the list will be, though.

Unpacking:

>>> l = (1,2,3,4,5)
>>> a,b,c,d,e = l
>>> e
5
查看更多
登录 后发表回答