Определение преобладающих чисел и поиск первого противоположного в строке

За один проход посчитайте чётные и нечётные числа и сохраните первое число каждого типа. Верните первое из меньшинства; при равенстве договоримся возвращать None.

Короткий ответ

Что ответить на собеседовании

За один проход посчитайте чётные и нечётные числа и сохраните первое число каждого типа. Верните первое из меньшинства; при равенстве договоримся возвращать None.

Подробный разбор

Ответ с пояснениями

Условие

Дана строка, содержащая целые числа, разделённые пробелами. Требуется реализовать функцию, которая подсчитывает, каких чисел больше — чётных или нечётных. Если чётных чисел больше, функция должна вернуть первое найденное нечётное число; если нечётных — первое чётное. Если в строке нет числа противоположного типа, вернуть None.

Пример 1: Ввод: 2 4 6 7 8 Вывод: 7

Пример 2: Ввод: 1 3 5 4 7 Вывод: 4

Пример 3: Ввод: 2 4 6 8 Вывод: None

Ответ

За один проход посчитайте чётные и нечётные числа и сохраните первое число каждого типа. Верните первое из меньшинства; при равенстве договоримся возвращать None.

def first_opposite(text):
    even_count = odd_count = 0
    first_even = first_odd = None
    for token in text.split():
        number = int(token)
        if number % 2 == 0:
            even_count += 1
            if first_even is None:
                first_even = number
        else:
            odd_count += 1
            if first_odd is None:
                first_odd = number
    if even_count > odd_count:
        return first_odd
    if odd_count > even_count:
        return first_even
    return None

Ноль считается чётным, отрицательные числа обрабатываются так же. Пустая строка и отсутствие противоположного типа дают None. Некорректный числовой токен вызывает ValueError, не пропускается молча.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее