我是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?
谢谢!
答案 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
将从由空格分隔的标准输入读取kids
和cd
,而您的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 ++代码中那样。