从C ++代码转换时python代码中出现故障?

时间:2014-01-31 03:40:07

标签: python c++

我是python的新手,我想知道如何将以下C ++代码转换为python

int kids, cd;
while (cin >> kids >> cd){
    if (kids == 0 && cd == 0)
    break;
    cout << pow(cd, kids)<<endl;
}

所以我觉得它可能就像

    from math import pow
    kids = int(raw_input())
    cd = int(raw_input())
    while kids!=0 and cd!=0:
       print pow(cd, kids)
       kids = int(raw_input())
       cd = int(raw_input())

当我将我的python代码提交给在线评判员SPOJ时,我收到了运行时错误。我的C ++代码不被接受,因为当数字太大时溢出... 怎么了?

当我尝试使用

编译python代码时

http://repl.it/languages/Python

带输入

2
5

我得到了输出

25.0

但是如何让它变成25而不是25.0?

谢谢!

2 个答案:

答案 0 :(得分:1)

while True:
    kids = int(raw_input())
    cd   = int(raw_input())
    if cd and kids:
        print(cd ** kids)
    else:
        break
查看http://www.spoj.com/problems/UJ/之后

编辑我会建议

while True:
    n,d = [int(s) for s in raw_input().split()]
    if n and d:
        print(n ** d)
    else:
        break

答案 1 :(得分:1)

您的Python代码与原始C ++代码很接近,但不是完全。在C ++中,您在EOF上退出循环,或者当两个数字都为0时退出循环。在Python中,只有当两个数字都为零时才退出,在EOF上失败并出现运行时错误。此外,在C ++中,cin >> kids >> cd将从由空格分隔的标准输入读取kidscd,而您的Python代码则以换行符分隔读取它。最后,您在C ++中使用整数运算,但在Python中使用浮点运算。

让我们从EOF问题开始吧。要捕获EOF,您可以照常阅读并捕获EOFError例外,例如:

try:
    kids = int(raw_input())
    cd   = int(raw_input())
except EOFError:
    break  # out of the loop we're in (not shown)

浮点问题也很容易解决:pow不是必需的;相反,Python有一个运算符:**。因此,你有

print cd ** kids

最后,还有那个麻烦的定界问题。如何解决这个问题取决于输入的外观。如果每行有两个输入,例如:

1 2
3 4
5 6

然后你想要读取一次,拆分它,并将每个部分转换为整数:

try:
    line = raw_input()
except EOFError:
    break
kids, cd = line.split()
kids = int(kids)
cd   = int(cd)

还有其他格式的解决方案,包括直接并行C ++代码;但这更复杂,可能没有必要。

最后,考虑使用while True循环,而不是在开始时重复kids = ...; cd = ...代码,并且当您想要停止时break,就像在C ++代码中那样。