【问题标题】:Error when I do the operation p/p+1 + p+1/p considering p a prime in python当我在 python 中考虑 p 是素数时执行 p/p+1 + p+1/p 操作时出错
【发布时间】:2019-11-11 20:58:50
【问题描述】:

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

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

【问题讨论】:

  • 什么是primos?你得到它的长度,然后索引primes。还是翻译错误?
  • 而somas 是空的。你只是想添加它吗?
  • 您不能通过分配给索引来在列表中创建新元素。您需要使用somas.append()

标签: python list compiler-errors


【解决方案1】:

一些备注:

  • 您的 isPrime 为 1 提供 True,而 is 应返回 False。省略or len(lista) == 1。例如,请参阅此 Numberphile video 约 1 不是素数。
  • 最好将lista 设为isPrime() 的局部变量。这样就不需要最后清空了。局部变量只存在于函数内部,因此您无需担心函数外部的它们。
  • 不用写if blabla return Trueelse return False,直接用return blabla
  • 您需要append 才能将内容添加到somas。在 Python 中不允许在 somas 之前为 somas[t] 分配一个足够长的时间来包含 t 的位置。
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)

【讨论】:

  • 非常感谢!关于1,我已经更正了,它只是一个测试!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-16
  • 2015-08-20
  • 1970-01-01
相关资源
最近更新 更多