我们如何在一行中使用原始空格输入原始输入,然后将它们转换为整数并将它们添加到列表中?

时间:2015-05-10 12:43:30

标签: python string python-2.7

我的代码:

number = raw_input().split()
# I can't get a line here to do the trick
a = list()
a.append(number)

我需要做的就是在一行中用空格分隔2个整数。然后在Python列表中将它们作为整数输入,然后将元素添加回结果变量。

3 个答案:

答案 0 :(得分:5)

这会拆分您在空白处输入的所有内容,并尝试将每个条目转换为整数:

 numbers = [int(x) for x in raw_input().split()]

这是列表理解。它与此代码的作用相同:

numbers = []
for x in raw_input().split():
    numbers.append(int(x))

列表理解力更短。如果您需要处理潜在的异常并且代码变得更复杂,那么循环可能更合适。

进一步改进 - 错误处理

用户总是有可能输入错误的数据。

def get_numbers(count=2):
    """Get `count` integers from one line of user input.
    """
    numbers = []
    msg = 'Please enter {} integers separated by space: '.format(count)
    for entry in raw_input(msg).split():
        try:
            numbers.append(int(entry))
        except ValueError:
            print('Found bad value: {}.'.format(entry))
            return get_numbers()
    if len(numbers) != count:
        print('Need to enter exactly {} numbers. '
              'Found: {}.'.format(count, len(numbers)))
        return get_numbers()
    return numbers

my_two_numbers = get_numbers()

答案 1 :(得分:3)

您可以映射到int,但任何错误的输入都会引发valueError:

numbers = map(int,raw_input().split())

更安全的方法是尝试/除了在用户输入错误输入时捕获:

while True:
     number = raw_input().split()
     try:
         # try casting to int
         numbers = map(int, number) 
         break
     except ValueError:
         # user entered bad input so print message and ask again
         print("Invalid input")
print(numbers) # list of ints

这也将允许一个数字或两个以上的数字,所以如果你只需要两个数字,你需要在分割后检查长度。分割后你也有一个列表,所以不需要。

答案 2 :(得分:0)

为了避免错误的输入和禁止的字符,我会使用正则表达式进行搜索然后进行投射:

valid_integers = map(int, re.findall(r'-?\d+', user_input)) # cast found strs to ints