为什么我的简单素数检查器不起作用?
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
我已经对我的代码进行了更改,这有助于调整大小,但仍然出现错误
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