Четность в Python: от простого условия до работы со списками

Раздел: Основы Python -> Условные операторы и циклы

Проверка числа на четность в Python

Четность целого числа определяется по остатку от деления на два. Если остаток равен нулю, число четное. Эта операция широко применяется при фильтрации данных, организации циклов, проверке условий. В Python существуют несколько способов выполнения такой проверки, каждый из которых имеет свои особенности.

Наиболее эффективный и читаемый способ - использование оператора % (остаток от деления). Выражение number % 2 == 0 возвращает True, когда число делится на два без остатка.

number = 42
if number % 2 == 0:
    print(f"{number} - четное")
else:
    print(f"{number} - нечетное")

четные элементы python (поиск четных элементов в python)

42 - четное

Python четные (четные числа в python)

Для наглядности результат выводится с помощью f-строки. Подход работает как с положительными, так и с отрицательными числами: -5 % 2 даёт 1, поэтому условие number % 2 == 0 корректно определяет четность.

Как определить четность без оператора %?

Побитовое И (&) с единицей: младший бит четных чисел равен 0. Выражение (number & 1) == 0 эквивалентно проверке остатка. Важно не забывать скобки из-за приоритета операторов.

num = 10
if (num & 1) == 0:
    print("Четное")

Типичные ошибки:

  • Отсутствие скобок: num & 1 == 0 интерпретируется как num & (1 == 0)num & Falsenum & 0 → 0, что всегда ложно.
  • Попытка использовать побитовое И для нецелых чисел - приведет к ошибке.

Как отфильтровать четные числа из списка?

Функция filter с лямбда-выражением возвращает итератор, который затем преобразуется в список.

numbers = [1, 2, 3, 4, 5, 6]
even = list(filter(lambda x: x % 2 == 0, numbers))
print(even)
[2, 4, 6]

Типичные ошибки:

  • Забывают обернуть filter в list(), получают объект filter, а не список.
  • Используют lambda x: x % 2 - это вернет True для нечетных чисел (так как остаток 1), что даст обратный фильтр.

Как вывести все четные числа от 1 до N?

Цикл for с шагом 2 позволяет перебирать только четные значения.

n = 10
for i in range(2, n+1, 2):
    print(i, end=' ')
2 4 6 8 10

Типичные ошибки:

  • Начинают с 1 вместо 2, тогда первое число нечетное, и шаг 2 даёт только нечетные.
  • Путают range(start, stop) - stop не включается, поэтому нужно n+1.

Как проверить, все ли числа в списке четные?

Встроенная функция all() в сочетании с генератором списка возвращает True, если каждый элемент удовлетворяет условию.

nums = [4, 8, 12, 16]
if all(x % 2 == 0 for x in nums):
    print("Все четные")

Типичные ошибки:

  • Передача списка вместо генератора: all([x%2==0 for x in nums]) - тоже работает, но создаёт дополнительный список.
  • Использование any() вместо all() для проверки, что хотя бы одно четное.

Как получить список четных чисел через генератор списка?

List comprehension - компактная запись, аналогичная filter.

numbers = [1, 2, 3, 4, 5, 6]
even = [x for x in numbers if x % 2 == 0]
print(even)
[2, 4, 6]

Этот подход предпочтительнее, когда требуется список целиком, так как он выполняется быстрее и легче читается.

Как организовать цикл while для поиска четных чисел?

Цикл while с ручным увеличением счётчика на 1 и проверкой четности внутри.

i = 1
while i <= 10:
    if i % 2 == 0:
        print(i, end=' ')
    i += 1
2 4 6 8 10

Типичные ошибки:

  • Забывают увеличивать счётчик - цикл становится бесконечным.
  • Неправильно расставляют отступы, проверка выполняется вне цикла.

Каждый из рассмотренных вариантов решает свою задачу: от базовой проверки до обработки коллекций. Выбор способа зависит от контекста и требований к производительности.

Примеры работы с четными числами

1. Функция is_even с проверкой типа

Пример
def is_even(n):
    """Возвращает True, если n - четное целое число."""
    if not isinstance(n, int):
        raise TypeError("Ожидается целое число")
    return n % 2 == 0

print(is_even(4))
print(is_even(7))
True
False

2. Обработка пользовательского ввода с исключениями

Пример
try:
    user_input = int(input("Введите целое число: "))
    if user_input % 2 == 0:
        print("Число четное")
    else:
        print("Число нечетное")
except ValueError:
    print("Ошибка: введено не целое число")
Введите целое число: 25
Число нечетное

3. List comprehension для генерации четных чисел от 1 до 100

Пример
even_numbers = [x for x in range(1, 101) if x % 2 == 0]
print(even_numbers[:10])  # вывод первых 10 четных
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

4. Использование map для маркировки четности

Пример
numbers = [1, 2, 3, 4, 5]
labeled = list(map(lambda x: (x, 'четное' if x % 2 == 0 else 'нечетное'), numbers))
print(labeled)
[(1, 'нечетное'), (2, 'четное'), (3, 'нечетное'), (4, 'четное'), (5, 'нечетное')]

5. Фильтрация списка с отрицательными числами

Пример
data = [-5, -4, -3, -2, -1, 0, 1, 2]
even_negative = [x for x in data if x % 2 == 0]
print(even_negative)
[-4, -2, 0, 2]

Обратите внимание: 0 считается четным.

6. Проверка всех чисел на четность с all()

Пример
test_cases = [
    [2, 4, 6],
    [1, 3, 5],
    [2, 4, 7]
]
for case in test_cases:
    print(f"{case}: все четные? {all(x % 2 == 0 for x in case)}")
[2, 4, 6]: все четные? True
[1, 3, 5]: все четные? False
[2, 4, 7]: все четные? False

7. Цикл while до первого четного числа больше заданного

Пример
start = 11
while True:
    if start % 2 == 0:
        print(f"Первое четное >= 11: {start}")
        break
    start += 1
Первое четное >= 11: 12

8. Генератор бесконечной последовательности четных чисел

Пример
def even_generator():
    n = 0
    while True:
        yield n
        n += 2

gen = even_generator()
print([next(gen) for _ in range(5)])
[0, 2, 4, 6, 8]

9. Использование itertools.islice для ограничения бесконечного генератора

Пример
import itertools

def even_infinite():
    n = 0
    while True:
        yield n
        n += 2

first_ten = list(itertools.islice(even_infinite(), 10))
print(first_ten)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

10. Сравнение производительности оператора % и побитового &

Пример
import timeit

mod_time = timeit.timeit('n % 2 == 0', setup='n=123456', number=1000000)
bit_time = timeit.timeit('(n & 1) == 0', setup='n=123456', number=1000000)
print(f"Оператор %: {mod_time:.5f}")
print(f"Побитовое &: {bit_time:.5f}")
Оператор %: 0.03421
Побитовое &: 0.02845

Побитовое И обычно немного быстрее, однако разница незначительна для большинства приложений.

Четные числа в Python - comments

En
Python четные (python)