我加入了黑暗面,决定学习Python。我使用的是Python 3。
这是一种直接的方法,使用C ++一次读取两个整数,直到它们都为0:
int x, y;
while (cin >> x >> y && (x != 0 || y != 0)) {
//x or y can be 0 but not both
}
//now x = 0 and y = 0 OR can't find two int's
这很简单,99.999%的时间都可以使用。我在Python中有以下内容,但它对我来说似乎不是Pythonic。而且,这注定要在某些输入上失败(即如果int在两条不同的行上)
while True:
line = sys.stdin.readline()
values = [int(i) for i in line.split()]
if (values[0] == 0 and values[1] == 0):
break
x = values[0]
y = values[1]
print(x + y)
print("both are 0 or couldn't find 2 int's")
有人可以告诉我一次读取两个int的最干净,最Pythonic的方式,直到两个都使用Python 3为0?
答案 0 :(得分:1)
使用Python 2.x,您将需要使用raw_input
,而对于Python 3.x,您只需使用input
inputs = raw_input("Enter two numbers")
values = [int(x) for x in inputs.split()]
答案 1 :(得分:1)
试一试。我的简单测试似乎有效。但是,如果只键入一个数字,则会抛出错误。
while True:
x,y = map(int, input().split())
if x == 0 and y == 0:
break
print(x + y)
print("both are 0 or couldn't find 2 int's")
这个版本正确地处理了"找不到2个""案件。
while True:
line = input()
data = line.split()
if len(data) < 2:
break
x,y = map(int, data)
if x == 0 and y == 0:
break
print(x + y)
print("both are 0 or couldn't find 2 int's")
答案 2 :(得分:1)
示例代码几乎是合理的,只是它可以立即解压缩变量并使用异常处理来处理错误
import sys
while True:
try:
x,y = [int(i) for i in sys.stdin.readline().split()]
if x == 0 and y == 0:
break
print(x+y)
except ValueError:
# didn't have 2 values or one of them isn't an int
break
print("both are 0 or couldn't find 2 int's")
答案 3 :(得分:0)
更一般地说,您可以将类型列表应用于以空格分隔的值序列:
>>> types = (int, str, int, float)
>>> inputs = '1234 "WESTA" 4 1.05'
>>> values = inputs.split()
>>> (type(value) for (type, value) in zip(types, values)
(1234, 'WESTA', 4, 1.05)
您还可以信任口译员使用ast.literal_eval
>>> map(literal_eval, values)
[1234, 'WESTA', 4, 1.05]