因此,此代码使用范围并检查每个值以查看它是否为素数。
问题在于,如果起始值不是1
,则会出现"IndexError: list index out of range"
的错误,但使用起始值1
可以正常工作。我该怎么办?
start = 2
stop = 20
range_pn = list(range(start, stop + 1))
list_pn = []
num_order = 0
pn_checklist = []
while num_order < stop:
rand_num = range_pn[num_order]
divisor = rand_num
while divisor > 0:
num_check = (rand_num) % (divisor)
if num_check == 0:
pn_checklist.append(rand_num)
divisor -= 1
if pn_checklist.count(max(pn_checklist)) <= 2:
list_pn.append(rand_num)
num_order += 1
print(list_pn)
答案 0 :(得分:2)
当Loop的运行速度超过range_pn的长度时。
以下代码行:
range_pn = list(range(start, stop + 1)) print(range_pn)
产生输出:
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
列表的长度为:
print(len(range_pn))
Output:
19
答案 1 :(得分:1)
当您从2
开始到20
时,range_pn
的长度为19
,即19
个项目出现在列表中。
range_pn = list(range(start, stop + 1))
当您正在检查num_order < stop
条件时,这意味着您必须迭代循环20
时间因为num_order
的值设置为0
而值stop
是20
。
您是按索引从列表中提取项目,因此当索引为19
时它会给出IndexError,因为列表包含19
项,即从索引0
到索引18
rand_num = range_pn[num_order]
根据我改变条件来解决IndexError
问题。
示例:while num_order+start < stop:
以下方法是找出数字 prime 与否。
将输入数字从“2”除以number/2
,因为如果数字不是素数,那么应该可以在2
到number/2
之间用数字整除。
def is_number_prime(number):
"""
number must be positive integer greater than 1
"""
for divisor in range(2, number//2+1):
if number%divisor == 0:
return False
return True