【问题标题】:Writing a program that finds perfect numbers - error编写一个找到完美数字的程序 - 错误
【发布时间】:2017-01-23 20:33:57
【问题描述】:

我正在开发一个找到完美数字的程序(即 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

第一部分,检查一个数是否为素数,并产生 mercenne 素数,工作正常。这是我遇到麻烦的第二部分。我读过如果2^k - 1 是素数,那么((2^k - 1)(2^k))/2 是一个完美数,所以我使用了那个公式。

它给出的错误是

Traceback (most recent call last):
  File "python", line 47, in <module>
  File "python", line 44, in isperf
TypeError: 'int' object is not callable

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

谢谢!

【问题讨论】:

  • 那么你的分母中2 周围的括号是怎么回事?
  • 连接不是 Python 中的乘法。您需要实际写出* 标志。
  • prm = (((2**i)-1)*(2**i))/(2) 它给出了正确的输出。
  • 如需快速测试梅森素数并因此计算完美数,请参阅here

标签: python math compiler-errors listiterator


【解决方案1】:

错误清楚地表明您正在尝试调用不可调用的 int 类型。

在实践中,这意味着您尝试执行123() 之类的操作

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多