计算多边形数需要一段时间来计算

2024-07-02 11:18:09 发布

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

我创建了一个函数,希望它能创建一个五边形和正方形的数字列表。你知道吗

以下是我目前掌握的情况:

def sqpent(n):
    i = 0
    list = []
    while n >= 0:
        if n == 0:
            list.append(0)
        elif n == 1:
            list.append(1)
        elif (i*i == (i*(3*i-1)//2)):
            list.append(i)
            n -= 1
        i += 1

但当它超过前两个数字时,它似乎需要一段时间才能做到。。。你知道吗


Tags: 函数列表ifdef情况数字listelif
2条回答

您有两个问题:第一个问题是n==0n==1的特殊大小写没有减少n,因此它进入了一个无限循环。这种特殊的套管其实并不需要,可以放下。你知道吗

第二个,也是更重要的一个,是在测试i*i == (i*(3*i-1)//2)中,假设平方数和五边形数的索引i相同。但是这种情况只会发生在i==0i==1上,所以您不会找到超过该值的值。你知道吗

我建议:

  1. 迭代i而不是n使事情更简单。你知道吗
  2. 取第i个五边形数并检查它是否是一个平方数(例如int(sqrt(x))**2 == x)。你知道吗
  3. 当你达到n数字时停止。你知道吗

多亏了@interjay的建议,我想出了一个完美的答案:

import math

def sqpent(n):
    counter = 0
    i = 0
    l = []
    while counter < n:
        x = (i*(3*i-1)//2)
        #print(x)
        if(int(math.sqrt(x))**2 == x):
            #print("APPENDED: " + str(x))
            l.append(x)
            counter += 1
        i += 1
    return l

解释如下:

  • 它遍历一个值i,得到第i个五边形数。然后它检查它是否是一个正方形,如果是,它会将它附加到我最终返回的列表中。你知道吗
  • 它会一直这样做,直到计数器达到所需列表中的项目数为止。你知道吗

相关问题 更多 >