Вы почти у финиша! Осталось всего 2 задачи, и этот модуль будет полностью пройден.
А сейчас — проверим, умеете ли вы находить простые числа с помощью выражений на Python.
В этой задаче предстоит применить вложенное выражение с условием, чтобы отфильтровать все простые числа из множества.
Вашему решению будет предоставлено множество numbers
.
Продумайте выражение для генерации множества содержащего все простые числа из заданных.
Примечание
В решении не должно быть ничего, кроме списочного выражения.
Подсказка:
Используйте еще одно списочное выражение для фильтрации.
Пример
Ввод
numbers = {1, 2, 3, 4, 5}
Вывод
{2, 3, 5}
Ввод
numbers = set(range(11, 50, 2))
Вывод
{37, 41, 11, 43, 13, 47, 17, 19, 23, 29, 31}
Решение
Для начала нам надо завернуть в списочное выражение поиск простого числа, который мы реализовали в серии задач с названием “Простая задача”. Основой этого решения служит цикл n % d != 0 for d in range(2, int(n ** 0.5) + 1).
Чтобы убедиться что все результаты вычислений не равны нулю, нам нужно завернуть это в функцию all(). таким образом мы получаем all(n % d != 0 for d in range(2, int(n ** 0.5) + 1))
Остается убедиться, что n > 1 и записать его в множество.
Существуют и другие способы проверить простое ли число после получения списка из показанной основы. Например, можно воспользоваться логически эквивалентным not any() – not any(n % d == 0 for d in range(2, int(n ** 0.5) + 1)), остальные способыбудучи все еще эффективными усложняют читабельность.
Посмотреть код
Решение
{n for n in numbers if n > 1 and all(n % d != 0 for d in range(2, int(n ** 0.5) + 1))}
Вполне себе имеющий право на жизнь метод, но сильно проигрывает в производительности тем, что показал я. Дело в том, что для любого числа проверяются все числа на делимость, в то время как all и not any будут прерывать выполнение уже на первом успешном делителе не равном самому числу. Таким образом, для числа 123123412343432 вердикт будет вынесен уже при первом сравнении.