Python 编写一个寻找完美数字的程序-错误

Python 编写一个寻找完美数字的程序-错误,python,math,compiler-errors,listiterator,Python,Math,Compiler Errors,Listiterator,我正在做一个寻找完美数字的程序(例如,6,因为它的因子1、2和3加在一起)。我的代码是 k=2 mprim = [] mprimk = [] pnum = [] def isprime(n): """Returns True if n is prime.""" if n == 2: return True if n == 3: return True if n % 2 == 0: return False

我正在做一个寻找完美数字的程序(例如,6,因为它的因子1、2和3加在一起)。我的代码是

k=2
mprim = []
mprimk = []
pnum = []

def isprime(n):
    """Returns True if n is prime."""
    if n == 2:
        return True
    if n == 3:
        return True
    if n % 2 == 0:
        return False
    if n % 3 == 0:
        return False

    i = 5
    w = 2

    while i * i <= n:
        if n % i == 0:
            return False

        i += w
        w = 6 - w

    return True

def mprime(k):
    while k < 50:
        check = (2**k)-1
        if isprime(check) == True:
            mprim.append(check)
            mprimk.append(k)
            print check
            k+=1
        else:
            k+=1

mprime(k)

def isperf(lst):
    for i in lst:
        prm = (((2**i)-1)(2**i))/(2)
        pnum.append(prm)

isperf(mprimk)

print pnum
第47行是
isperf(mprimk)
,第44行是
prm=((2**i)-1)(2**i))/(2)
。任何协助都将不胜感激


谢谢

该错误清楚地表明您正在尝试调用一个int类型,该类型不可调用

实际上,这意味着你试图做一些像
123()


负责它的代码是
((2**i)-1)(2**i)
,因为您忘记了
*
,它应该是
((2**i)-1)*(2**i))/(2)

,所以分母中
2
的paren是怎么回事?在Python中串联不是乘法。您需要实际写出符号。
prm=((2**i)-1)*(2**i))/(2)
它给出了正确的输出。要快速测试梅森素数,从而计算甚至完美数,请参阅。
Traceback (most recent call last):
  File "python", line 47, in <module>
  File "python", line 44, in isperf
TypeError: 'int' object is not callable