Проблемы с корректностью работы функции

Arschik

Новичок
Пользователь
Апр 5, 2020
6
0
1
Я хочу, чтобы в списке остались только простые числа,
Python:
def prime (x):
    for i in range(2,x):
        if x % i == 0:
            return False           
        else:
            return True
a = list(range(20))
a = list(filter(prime,a))
print(a)
для этого я создал функцию, но почему-то она оставляет числа, которые не являются простыми. Помогите
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
В вашем коде цикл не идет дальше первой итерации, а возвращает либо True, либо False. То есть он проверяет число на четность
if x % 2 == 0: и возвращает True на любое нечетное число от 3 и более. Числа меньше 3 он не возвращает, потому что не может запустить цикл по ним.
Вот исправленный пример:
Python:
def prime(x):
    if x < 3:
        return False
    for i in range(2, x):
        if x % i == 0:
            return False
    
    return True

a = list(range(20))
a = list(filter(prime,a))
print(a)
 
  • Мне нравится
Реакции: Student

Arschik

Новичок
Пользователь
Апр 5, 2020
6
0
1
В вашем коде цикл не идет дальше первой итерации, а возвращает либо True, либо False. То есть он проверяет число на четность
if x % 2 == 0: и возвращает True на любое нечетное число от 3 и более. Числа меньше 3 он не возвращает, потому что не может запустить цикл по ним.
Вот исправленный пример:
Python:
def prime(x):
    if x < 3:
        return False
    for i in range(2, x):
        if x % i == 0:
            return False
   
    return True

a = list(range(20))
a = list(filter(prime,a))
print(a)
а почему он не идет дальше первой итерации?
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
а почему он не идет дальше первой итерации?
Потому что он проверяет условие и выходит в любом случае (только возвращает в зависимости от условия либо True, либо False)
 

Форум IT Специалистов