什么是从stdin读取的此C ++代码的Python等价物?

时间:2016-02-05 20:33:45

标签: python c++ python-3.x

我加入了黑暗面,决定学习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?

4 个答案:

答案 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]