在Python和节点.js返回不同的结果

2024-09-29 07:31:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将一个项目从Python转换为节点.js-到目前为止一切都很顺利。我有一个函数,可以把某个人的经验值转换成一个水平。我试图将Python的工作函数重写为节点.js但是函数返回完全不同的答案,我不知道为什么。你知道吗

Python:

def calculateLevel(exp):
    if exp < 83: return 1
    else:
        calcExp = 0
        for level in range(1, 1000):
            diff = int(level + 300 * math.pow(2, float(level)/7))
            calcExp += diff
            if exp < calcExp//4:
                break
        return level

你知道吗节点.js地址:

const _ = require("underscore");
// ...
function calculateLevel(exp) {
    return new Promise((resolve, reject) => {
        if (exp < 83) resolve(1);
        else {
            var calcExp = 0;
            for (var i in _.range(1, 1000)) {
                calcExp += parseInt(i + 300 * Math.pow(2, i/7));
                if (exp < Math.floor(calcExp/4)) {
                    resolve(i);
                    break;
                }
            }
        }
    });
}

例如,Python中的calculateLevel(123456)返回51(正确答案),而Python中的await calculateLevel(123456);节点.js返回15(错误答案)。你知道吗

很明显这里面有问题节点.js版本,但我搞不懂是什么。你知道吗

非常感谢您的帮助。提前谢谢。你知道吗


Tags: 函数答案inforreturnif节点js
3条回答

在Python中:

for i in range(1, 10)
   print(i)

将创建序列到1 2 3 4 5 6 7 8 9

JavaScript中的^{}将遍历键而不是值。你知道吗

所以for (var i in _.range(1, 1000)) {总是0 ... 999

将其更改为^{}

function calculateLevel(exp) {
    return new Promise((resolve, reject) => {
        if (exp < 83) resolve(1);
        else {
            var calcExp = 0;
            for (var i of _.range(1, 999)) {
                calcExp += parseInt(i + 300 * Math.pow(2, i/7));
                if (exp < Math.floor(calcExp/4)) {
                    resolve(i);
                    break;
                }
            }
        }
    });
}

此外,还不清楚为什么在这里使用Promise,因为这里没有任何异步代码。所以你可以完全取消这里的承诺。你知道吗

const _ = require("underscore");
// ...
function calculateLevel(exp) {
  if (exp < 83) return 1;
  else {
      var calcExp = 0;
      for (var i of _.range(1, 1000)) {
          calcExp += parseInt(i + 300 * Math.pow(2, i/7));
          if (exp < Math.floor(calcExp/4)) {
              break;
          }
      }
      return i;
  }
}

console.log(calculateLevel(123456))
if (exp < Math.floor(calcExp/4)) {
                    resolve(i);
                    break;
                }

应该是

if (exp < Math.floor(calcExp/4)) {
                        break;
                    }
resolve(i)

我运行了以下代码:

function calculateLevel(exp) {
    return new Promise((resolve, reject) => {
        if (exp < 83) resolve(1);
        else {
            var calcExp = 0;
            for (var i=1; i<1000; i++) {
                calcExp += parseInt(i + 300 * Math.pow(2, i/7));
                if (exp < Math.floor(calcExp/4)) {
                    resolve(i);
                    break;
                }
            }
        }
    }); }

console.log(calculateLevel(123456));

它返回51。你知道吗

可能是其他原因导致了这个问题。你知道吗

相关问题 更多 >