Python 如何在不使用js2py的情况下获得相同的结果

Python 如何在不使用js2py的情况下获得相同的结果,python,python-3.x,Python,Python 3.x,我想要输出355901652而不使用js2py, 如何在不使用js2py的情况下获得相同的结果 import js2py o = 'How To Solve This' a = 0 f = js2py.eval_js('function $(a, o){for (var m = 0; m < o.length; m++){a = (a << 5) - a + o.charCodeAt(m),a &= a}return a}') print(f(a, o)) # retu

我想要输出355901652而不使用js2py, 如何在不使用js2py的情况下获得相同的结果

import js2py
o = 'How To Solve This'
a = 0
f = js2py.eval_js('function $(a, o){for (var m = 0; m < o.length; m++){a = (a << 5) - a + o.charCodeAt(m),a &= a}return a}')
print(f(a, o))
# return : 355901652

m = 0
while m < len(o):
  a = (a << 5) - a + ord(o[m])
  a &= a
  m += 1
print(a)
# return : 55070035549200009615810772
导入js2py
o='如何解决此问题'
a=0

f=js2py.eval_js('函数$(a,o){for(var m=0;mint
s几乎是无界的。因此需要将
a
约束为32位:

m = 0
while m < len(o):
  a = (a << 5) - a + ord(o[m])
  a &= a
  a &= (1 << 32) - 1  # restrict `a` to 32 bits
  m += 1
print(a)
就算法正确性而言,Python输出的结果是正确的,因为它可以处理如此大的整数,但是JavaScript的整数在某个点溢出,并且您开始得到垃圾结果,即355901652不是正确的答案

355901652