Я бы рекомендовал is_prime
принять целое число в качестве аргумента.Тогда это просто чистая функция, которая принимает целое число и выводит логическое значение.
Я также заметил проблему в вашей реализации is_prime.В вашем операторе if
- else
функция возвращает независимо от того, что происходит во время этого оператора, поэтому цикл for всегда останавливается только после одной итерации.Вы должны возвращать значение False только в том случае, если все проверяемых делителей действительно делят число:
import math
def is_prime(n):
if n <= 1:
return False
for d in range(2, int(math.sqrt(n))+1):
if n % d == 0:
return False
return True
# >>> is_prime(7)
# True
# >>> is_prime(8)
# False
Я также думаю, что было бы яснее писать вашу программу итеративно, а не рекурсивно (Ваша функция номера в настоящее время вызывает себя).Это может выглядеть как
vector = []
while True:
value = int(input('Write an integer bigger than 1: '))
if value == 0:
break
elif value > 0:
vector.append(value)
for n in vector:
print(n, is_prime(n))
# prints something like:
#
# 1 False
# 2 True
# 11 True