无法将模数 pow() 函数从 Lua 转换为 Python

Trouble converting a modulus pow() function from Lua to Python

我试图将 Lua mod_pow() 函数(有效)重写为 Python。语法和一切对我来说都很好,所以我不确定我错过了什么。有谁知道我需要在我的 Python 代码中更改什么才能使其正常工作并像 Lua 代码那样给出 81 作为答案?

Lua 工作代码:

function modPow(b,e,m)
        if m == 1 then
                return 0
        else
                local r = 1
                b = b % m
                while e > 0 do
                        if e % 2 == 1 then
                                r = (r*b) % m
                        end
                        e = e >> 1     --use 'e = math.floor(e / 2)' on Lua 5.2 or older
                        b = (b^2) % m
                end
                return r
        end
end

modPow(7,4,145)
81.0

Python 无效代码:

def modular_pow(b, e, m):
    if m == 1: 
       return 0
    else:
      r=1
      b = b % m
      while e > 0:
        if e % 2 == 1:
           r = (r*b) % m
        e = e >> 1
        b = (b^2)% m
    return r

modular_pow(7,4,145)
7

^ 是 python 中的按位异或。参考:here