友好数字功能会破坏某些东西

2024-09-29 17:20:55 发布

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

这个函数是我的开发尝试,用来解决projecteulerProblem 21计算10000以下所有友好数字之和。 我使用的是一个名为list_divisors()的模块,它位于另一个文件中,应该可以正常工作。它应该不会影响出什么问题。在

def ami():
    storedSums = [0, 0]
    amiables = [0, 0]
    for i in range(2, 10000):
        som = sum(k for k in list_divisors(i))
        storedSums.append(som) if som < 10000 else 0
        for j in range(2, i - 1):

            #this if statement is the test.  It does not do anything except print what is happening.
            if (i > 5037 and j % 1000 == 0) or i < 10 or (i > 5038 and j > 5020):
                print("i = {}, j = {}, storedSums[i] = {}, storedSums[j] = {}, \
                len(storedSum) = {}".format(i, j, storedSums[i], storedSums[j], len(storedSums)))

            #The code freezes here at 5040
            if storedSums[i] == j and storedSums[j] == i:
                amiables.extend((i, j))
    return sum(i for i in amiables)

print(ami())

以及我的测试输出:

^{pr2}$

当我变成5040时,任何访问storedSums[i]的尝试都会产生索引超出范围的错误。在


Tags: orandinforifisrangelist
1条回答
网友
1楼 · 发布于 2024-09-29 17:20:55

我认为问题出在这里:

storedSums.append(som) if som < 10000 else 0

如果som是<;10000,那么这只会在列表中追加一些内容,否则它实际上不会起任何作用,因此您对索引长度的假设是错误的。在

参见本测试程序:

^{pr2}$

输出:

[0, 1, 2, 3, 4]

我想你想要这个:

    if som < 10000:
        storedSums.append(som)
    else:
        storedSums.append(0)

相关问题 更多 >

    热门问题