Я немного новичок в 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?
Благодарю!
Ваш код 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
loop, не повторяя kids =...; cd =...
kids =...; cd =...
в начале и break
когда вы хотите остановиться, как и в коде C++.
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
>>
или это должно быть>=
?>>
вероятно, намеренный;cin >> x
читает из стандартного ввода вx
.