我的代码:
number = raw_input().split()
# I can't get a line here to do the trick
a = list()
a.append(number)
我需要做的就是在一行中用空格分隔2个整数。然后在Python列表中将它们作为整数输入,然后将元素添加回结果变量。
答案 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