За один проход посчитайте чётные и нечётные числа и сохраните первое число каждого типа. Верните первое из меньшинства; при равенстве договоримся возвращать 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, не пропускается молча.