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))

感谢任何帮助我似乎无法完全让它工作,当我修复一个错误时,我正在创建另一个错误。

4

3 回答 3

5

将行更改print为:

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

有关更多信息,请参阅此允许的类型转换说明符列表。

或者使用新的格式方法。

于 2013-06-13T07:23:34.050 回答
3

对于最后一行,您可以简单地使用:

print(i, new_xp - old_xp)

正如@pfnuesel 评论的那样,您需要稍微调整 for 循环的范围。

最后,您不需要import math. 您可以将前 3 行替换为:

from math import log, exp
于 2013-06-13T07:25:25.787 回答
1

根据您使用的 python 版本,C++ 代码中的强制转换为加倍

(double)xp_for_last_level / xp_for_first_level

可能需要在 python 代码中考虑。在 python 3 中你会得到一个浮点数,在旧的 python 中你可以做

from __future__ import division

然后xp_for_last_level / xp_for_first_level会给你一个浮动。

请参阅此处的讨论

于 2013-06-13T08:24:52.637 回答