【发布时间】:2020-03-02 04:59:48
【问题描述】:
我是 python 的初学者,我正在解决一个我无法解决的问题。
我应该做什么:创建一个带有素数的元组列表,范围是两个数字(也是素数)和其中的元组列表应该只包含 2 个素数 p 和 p+2
例如:给定范围 (11, 31) 返回列表 = [(11, 13), (17, 19), (29, 31)]
这是我的代码
def twin_primes(a: int, b:int) -> List[Tuple[int, int]]:
list_primes = []
list_final = []
for val in range (a, b+1):
if val > 1 :
for n in range(2, val):
if (val % n) == 0:
break
else:
list_primes.append(val)
for val in list_primes:
print(val)
list_final.append((list_primes[val], list_primes[val + 2]))
return list_final
print(twin_primes(11,31))
在第一个 for 循环中,我确定该范围内的哪些数字是素数并将它们附加到 list_primes
在第二个循环中,我尝试从list_primes 中获取质数并将它们作为元组附加到list_final
它告诉我这个:
list_final.append((list_primes[val], list_primes[val + 2]))
IndexError: 列表索引超出范围*
有人可以帮我解决这个问题吗?我想我理解这个错误,但我不知道如何修复代码,所以它只需将p、p+2 放入一个元组,然后再放入另一对等等......它也必须忽略23,尽管它是质数。
【问题讨论】:
-
您期望
list_primes[val]是什么?val是list_primes的一个元素,而不是列表中的索引。 -
你应该先做一些基本的调试:
print (val)就在错误点之前是“明显”的首选。 -
是的,我希望它是 list_primes 的一个元素,这就是为什么我尝试将它附加到 list_final ....我认为 (list_primes[val], list_primes[val + 2]) 会制作一个 p 和 p+2 的元组