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

1 つのバグを修正すると、別のバグを作成しているため、完全に動作させることができないようです。

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 へのキャスト

(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 に答える