2013-06-13 4 views
1

Я пытаюсь преобразовать C++ кода на Python, но я застрялпитон кода для вычисления хр для проекта

оригинального C++ код

int main(void) 
{ 
    int levels = 40; 
    int xp_for_first_level = 1000; 
    int xp_for_last_level = 1000000; 

    double B = log((double)xp_for_last_level/xp_for_first_level)/(levels - 1); 
    double A = (double)xp_for_first_level/(exp(B) - 1.0); 

    for (int i = 1; i <= levels; i++) 
    { 
     int old_xp = round(A * exp(B * (i - 1))); 
     int new_xp = round(A * exp(B * i)); 
     std::cout << i << " " << (new_xp - old_xp) << std::endl; 
    } 
} 

питон код

import math 
from math import log 
from math import exp 

levels = 40 
xp_for_first_level = 1000 
xp_for_last_level = 1000000 

B = log(xp_for_last_level/xp_for_first_level)/(levels - 1) 
A = xp_for_first_level/(exp(B) - 1.0) 

for i in range(1, levels): 
    old_xp = round(A * exp(B * (i - 1))) 
    new_xp = round(A * exp(B * i)) 
    print(i + " " + (new_xp - old_xp)) 

Любого помощь приветствуется, я не могу полностью заставить ее работать, когда я исправляю одну ошибку, я создаю другую.

+2

'для г в диапазоне (1, уровни)' должны быть 'для г в диапазоне (1, уровней + 1):' – pfnuesel

+0

все еще получаю ту же ошибку: TypeError: неподдерживаемый тип операнда (ов) для +: 'int' и 'str' – ScepT1c

+1

также вам нужно поместить str (i) на и в str ((new_xp - old_xp))) при последней печати – vaggelas

ответ

3

Для последней строки, вы можете просто использовать:

print(i, new_xp - old_xp) 

Как @pfnuesel отметил, что вам нужно будет настроить диапазон вашего для петли немного.

И, наконец, вам не нужно import math. Вы можете заменить первые 3 строки с:

from math import log, exp 
+0

Спасибо вам за ваш вклад !! – ScepT1c

5

Изменение print линии:

print("%i %i" % (i, new_xp - old_xp)) 

Обратитесь к этому list of allowed type conversion specifiers для получения дополнительной информации.

Или используйте новый метод format.

+0

Что делает% я делаю? это зафиксировало это, кстати, спасибо. (подождать 8 минут, чтобы пометить правильный ответ). – ScepT1c

+0

Это заполнитель для целого числа. Вы указываете фактическое значение в кортеже, которое следует за знаком процента. Он работает как 'printf' в C. –

+0

, поэтому print ("% q% q "% (i, 5-2)) будет печатать значение i и 3? – ScepT1c

1

В зависимости от версии питона, который вы используете, бросок, чтобы удвоить в C++ код

(double)xp_for_last_level/xp_for_first_level 

, возможно, должны быть приняты во внимание в код python. В Python 3 вы получите поплавок, в пожилом питона вы можете сделать

from __future__ import division 

тогда xp_for_last_level/xp_for_first_level даст вам поплавок.

Смотрите discussion here

Смежные вопросы