为什么我的简单素数检查器不起作用?

Why is my simple prime number checker not working?

我已经对我的代码进行了更改,这有助于调整大小,但仍然出现错误

IndexError: list index out of range

但我似乎无法找出原因。我知道它与 [-1] 有关,但我似乎无法弄清楚为什么它不调用最后列出的元素。

number = 4
not_primes = 0
primes = []
while 1:
    for i in range(2, number):
        if number % i == 0:
            i = not_primes
        else:
            primes.append(number)
        print(primes[-1])
        number += 1

试试这个代码 (对你的代码稍做改动):

current_number = 2
not_prime = list()
prime_numbers = list()

def odd_checker():    
    if current_number % 2 == 0 and current_number != 2:
        not_prime.append(current_number)
    else:
        last_digit_check()

def last_digit_check():
    if current_number % 5 == 0 and current_number != 5:
        not_prime.append(current_number)
    else:
        last_prime_checker(current_number)

def last_prime_checker(the_number):
    for i in prime_numbers: 
        if the_number % i == 0:
            not_prime.append(the_number)
            return
    prime_numbers.append(the_number)

while True:
    odd_checker()
    current_number += 1
    print(prime_numbers)
    
    y_n = input('do you continue(y/n) : ') if current_number % 10 == 0 else ''
    if y_n == 'n':
        break

输出:

[2]
[2, 3]
[2, 3]
[2, 3, 5]
[2, 3, 5]
[2, 3, 5, 7]
[2, 3, 5, 7]
[2, 3, 5, 7]
do you continue(y/n) : y
[2, 3, 5, 7]
[2, 3, 5, 7, 11]
[2, 3, 5, 7, 11]
[2, 3, 5, 7, 11, 13]
[2, 3, 5, 7, 11, 13]
[2, 3, 5, 7, 11, 13]
[2, 3, 5, 7, 11, 13]
[2, 3, 5, 7, 11, 13, 17]
[2, 3, 5, 7, 11, 13, 17]
[2, 3, 5, 7, 11, 13, 17, 19]
do you continue(y/n) : y
[2, 3, 5, 7, 11, 13, 17, 19]
[2, 3, 5, 7, 11, 13, 17, 19]
[2, 3, 5, 7, 11, 13, 17, 19]
[2, 3, 5, 7, 11, 13, 17, 19, 23]
[2, 3, 5, 7, 11, 13, 17, 19, 23]
[2, 3, 5, 7, 11, 13, 17, 19, 23]
[2, 3, 5, 7, 11, 13, 17, 19, 23]
[2, 3, 5, 7, 11, 13, 17, 19, 23]
[2, 3, 5, 7, 11, 13, 17, 19, 23]
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
do you continue(y/n) : n

编辑:添加新代码以根据评论请求查找素数。

number = 4
not_primes = False
primes = []
while 1:
    
    for i in range(2, number):
        if number % i == 0:
            not_prime = True
    
    if not_prime == False:
        primes.append(number)
        
        
    try:
        print(primes[-1])
    except:
        print('do not find prime yet')
        
        
    number += 1
    not_prime = False
    
    y_n = input('do you continue(y/n) : ') if number % 10 == 0 else ''
    if y_n == 'n':
        break

输出:

do not find prime yet
5
5
7
7
7
do you continue(y/n) : y
7
11
11
13
13
13
13
17
17
19
do you continue(y/n) : y
19
19
19
23
23
23
23
23
23
29
do you continue(y/n) : n