当python中的空格和换行符分隔时,如何接受用户输入?

时间:2019-06-06 04:50:06

标签: python-3.x input python-3.6

我一直在尝试将整数输入分隔成任意数量的空格或换行符。我知道如何使用空格分隔的输出和具有换行符的输出。在基于C的语言中,我们不必关心输入在哪里,它会在找到输入时自动获取输入,但是我不认为Python是这种情况(如果我错了,请纠正我)。有人可以帮忙吗?

我尝试使用While语句直到True并在其中使用try语句。但这是行不通的。

a = []
try:
    while(True):
        a.append(int(input()))
except:
    pass
print(a) 

当我输入 12 12 12 它返回一个空列表。如果我删除输入中的int,它将返回一个列表[12 12, 12]

3 个答案:

答案 0 :(得分:1)

等等,所以我想我现在明白了。您想接受任意数量的输入,但是将每个由空格分隔的输入保存为自己的输入吗?实际上有一个字符串方法。这是一个示例脚本。它不是最好的,但是很好地演示了该方法。

list = []
string = "user input goes here"
splitString = string.split()
for word in splitString:
    list.append(word)
print(list)

输出:

["user", "input", "goes", "here"]

string.split()方法默认情况下使用空格,但是您可以指定另一个定界符,例如#号。

List = []
String = "Hi#my#name#is#bob"
newString = String.split("#")
for word in newString:
    list.append(word)

编辑:这是一个完整的工作实现,无论分隔两个输入的内容是空格,换行符还是其他您想要的东西,它都将起作用。

import re
list = []
while True:
    string = input()
    if string == "break":
        break
    splitString = re.split("[\s | \r\n]", string)
    for word in splitString:
        list.append(word)
    cleanList = []
    for word in list:
        if word != '':
            cleanList.append(word)
print(cleanList)

输入:

12 94 17
56
3

输出:

[12, 94, 17, 56, 3]

功能证明:单击here

答案 1 :(得分:1)

尝试一下:尽可能最短的方法

a = []
s=input()

while s != '':  
    i = s.split()       
    [a.append(int(j)) for j in i]
    s=input()

print(a)

输入:

1 2 3
4 5
6

输出:

[1, 2, 3, 4, 5, 6]

您也可以尝试:

a = []
s=input()

while s != '':  
    i = s.split()       
    a.extend(map(lambda s: int(s),i))
    s=input()

print(a)

答案 2 :(得分:0)

希望您将在此示例中获得一些见解,并添加了我个人的代码编写观点。

首先,使用多空格输入是可以理解的,但不能使用多行。最好一一接受输入。

出于测试和调试的目的,建议分别收集用户和处理输入数据。

现在,假设您已收集用户输入并使用raw_input存储为数据,这在需要收集多行输入时非常方便。请浏览raw_input,它在Python3和Python2中受支持。

>>>
>>> data = '''12
...
... 12       12
...
...
... 12'''
>>> data
'12 \n\n12       12\n\n\n12'
>>> print(data)
12

12       12


12

第一步:清除所有行分隔

>>> double_spaces = '  '
>>> single_space = ' ' 
>>> data = data.strip().replace('\n', single_space)
>>> data
'12   12       12   12'

步骤2:修复多个空格

>>> while double_spaces in data:
...     data = data.replace(double_spaces, single_space)
...
>>> data
'12 12 12 12'
>>> print(list(map(int, data.split()))
...
... )
[12, 12, 12, 12]
>>>

您的代码有问题

>>> a = []
>>> try:
...     while(True):
...         a.append(int(input()))
... except:
...     pass
...
12
1
12  12
>>> a
[12, 1]
>>>

输入12 12时,应该会发生以下情况。

>>> int('12 12')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '12 12'

由于此代码的except:处理异常情况不好,因此您的用例将按预期返回空列表。

由于我更改了输入,因此您会看到这种差异。