🎉 Добавлен материал по 9 заданию
ЕГЭ
Задания
Задание 9
19878

Задание 19878

Откройте файл электронной таблицы, содержащей в каждой строке семь натуральных чисел. Определите количество строк таблицы, содержащих числа, для которых выполнены оба условия:

  • в строке ровно одно число повторяется трижды, остальные числа различны
  • среднее арифметическое неповторяющихся чисел не больше повторяющегося числа

В ответе запишите только число.

Файл (opens in a new tab)

Решение

z19878.py
f = open('19878.csv', encoding='utf-8-sig')
 
count = 0
 
for line in f:
    a = line.strip().split(';')  # Разделяем строку по ";"
    a = list(map(int, a))  # Преобразуем в числа
 
    repeated = [x for x in set(a) if a.count(x) == 3]  # Число, встречающееся 3 раза
    non_repeated = [x for x in a if a.count(x) == 1]  # Остальные числа
 
    # если условие длинное, то допускается перенести в отдельную строку
    if (
        len(repeated) == 1 and len(non_repeated) == 4 and
        sum(non_repeated) / len(non_repeated) <= repeated[0]
        ):
            count += 1
 
 
print(count)

Разбор кода

Давайте разберем решение пошагово:

💡Обратите внимание

Параметр encoding='utf-8-sig' важен для корректного чтения русских символов. utf-8-sig указывает, что файл содержит BOM-маркер (Byte Order Mark), который часто добавляется при сохранении файлов в Excel

  1. Открытие файла:

    f = open('19878.csv', encoding='utf-8-sig')
    • Открываем файл с данными в формате CSV
  2. Основной цикл обработки:

    for line in f:
        a = line.strip().split(';')
        a = list(map(int, a))
    • Читаем файл построчно
    • strip() удаляет лишние пробелы и символы переноса строки
    • split(';') разделяет строку по разделителю ";"
    • map(int, a) преобразуем все строковые числа в целые числа
  3. Поиск повторяющихся чисел:

    repeated = [x for x in set(a) if a.count(x) == 3]
    non_repeated = [x for x in a if a.count(x) == 1]
    • repeated находит числа, которые встречаются ровно 3 раза
    • non_repeated находит числа, которые встречаются только 1 раз
    • Используем list comprehension для компактной записи
  4. Проверка условий:

    if (
        len(repeated) == 1 and len(non_repeated) == 4 and
        sum(non_repeated) / len(non_repeated) <= repeated[0]
    ):
    • Проверяем, что есть ровно одно число, повторяющееся трижды (len(repeated) == 1)
    • Проверяем, что остальные 4 числа уникальны (len(non_repeated) == 4)
    • Вычисляем среднее арифметическое неповторяющихся чисел и сравниваем с повторяющимся числом
  5. Подсчет результата:

    count += 1
    • Если все условия выполнены, увеличиваем счетчик
  6. Вывод результата:

    print(count)
    • В конце выводим количество строк, удовлетворяющих условиям задачи

Это решение эффективно обрабатывает данные и проверяет все необходимые условия задачи. Использование list comprehension делает код более компактным и читаемым.