首页 > 解决方案 > 考虑到 python 中的 pa 素数,当我执行 p/p+1 + p+1/p 操作时出错

问题描述

所以,我想创建一个简单的程序来返回关于连续素数的计算。首先,我创建了一个包含所有这些素数的列表,然后我尝试计算结果,但这给了我一个超出范围的索引。任何人都可以帮助我吗?我的程序:

primes = []
lista = []
somas = []

def isPrimeNumber(number): #Calculate if is or not prime, here is everything ok
    for i in range(1, number+1):
        if number % i == 0:
            lista.append(i)
    if len(lista) == 2 or len(lista) == 1:
        lista.clear()
        return True    
    else:
        lista.clear()
        return False

for c in range(1,100):
    if isPrimeNumber(c):
        primes.append(c)
for t in range(1,len(primes)): #Here is the problem!
    somas[t] = primes[t]/primes[t-1] + primes[t-1]/primes[t]


print(primes)
print(somas)

错误:

Traceback (most recent call last):
File "C:\Users\Leleco\Desktop\primos_teom.py", line 19, in <module>
    somas[t] = primes[t]/primes[t-1] + primes[t-1]/primes[t]
IndexError: list assignment index out of range

标签: pythonlistcompiler-errors

解决方案


一些备注:

  • 您的 isPrime 为 1 提供 True,而 is 应返回 False。省略or len(lista) == 1. 例如,请参阅有关 1 不是素数的Numberphile 视频。
  • 最好listaisPrime(). 这样就不需要最后清空了。局部变量只存在于函数内部,因此您无需担心函数外部的它们。
  • 而不是写if blabla return True else return False,只是使用return blabla
  • 您需要append将内容添加到somas. 在 Python 中,仅将某些内容分配给somas[t]beforesomas就足以包含一个位置 fort是不允许的。
def isPrimeNumber(number): #Calculate whether number is prime or not
    lista = []
    for i in range(1, number+1):
        if number % i == 0:
            lista.append(i)
    return len(lista) == 2

primes = []
for c in range(1,100):
    if isPrimeNumber(c):
        primes.append(c)

somas = []
for t in range(1,len(primes)):
    somas.apppend(primes[t]/primes[t-1] + primes[t-1]/primes[t])

print(primes)
print(somas)

PS:使用zip,总和的计算也可以写成:

for p0, p1 in zip(primes[:-1],primes[1:]):
    somas.append(p1/p0 + p0/p1)

推荐阅读