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

Задание 19117

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

  • В строке одно число повторяется дважды, остальные различны;
  • Выполнены следующие два условия:
    1. Сумма чётных чисел строки больше суммы нечётных;
    2. В строке существуют как чётные числа, так и нечётные числа.

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

Файл (opens in a new tab)

Решение

z19117.py
f = open('9_19117.csv')
count = 0
 
for line in f:
    a = line.strip().split(';')
 
    if a[0].isdigit():
        a = list(map(int, a))
        
        chet = [x for x in a if x % 2 == 0]
        nechet = [x for x in a if x % 2 != 0]
 
        if (len(chet) > 0 and len(nechet) > 0) and sum(chet) > sum(nechet) or \
            len(set(a)) == 4:
                count += 1
 
print(count)

Разбор кода

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

Стоит заметить, файл заканчивается на:

9024;3077;7514;2071;9613
4654;8558;3085;9544;6967
;;;;
;;;;
;;;;
;;;;
;;;;

Поэтому при попытке разделить строку по разделителю ; вы получите 5 пустых строк в списке, что вызовет ошибку. Можно просто удалить эти строки или добавить проверку на наличие пустых строк перед преобразованием в числа, чтобы избежать ошибок

⚠️Важно

Лучше добавить проверку на наличие пустых строк в списке, так как файл может содержать подобные строки в разных местах

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

    f = open('9_19117.csv')
    • Открываем файл с данными в формате CSV
    • Важно отметить, что в данном случае не указана кодировка файла. Если все такие есть проблемы с чтение то необходимо указывать кодировку:
      f = open('9_19117.csv', encoding='utf-8')
    • Это помогает избежать проблем с чтением русских символов или специальных знаков
  2. Инициализация счетчика:

    count = 0
    • Создаем переменную для подсчета строк, удовлетворяющих условиям
  3. Основной цикл обработки:

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

    if a[0].isdigit():
        a = list(map(int, a))
    • Проверяем, что первое значение - число (пропускаем заголовок)
    • Преобразуем все строковые значения в целые числа с помощью map(int, a)
  5. Определение четных и нечетных чисел:

    chet = [x for x in a if x % 2 == 0]
    nechet = [x for x in a if x % 2 != 0]
    • Создаем два списка: для четных и нечетных чисел
    • Используем list comprehension для фильтрации чисел
  6. Проверка условий:

    if (len(chet) > 0 and len(nechet) > 0) and sum(chet) > sum(nechet) or \
        len(set(a)) == 4:
    • Проверяем одно из условий:
      1. Наличие и четных, и нечетных чисел (len(chet) > 0 and len(nechet) > 0)
      2. Сумма четных больше суммы нечетных (sum(chet) > sum(nechet))
    • ИЛИ проверяем условие с повторяющимся числом:
      • set(a) создает множество из списка чисел (убирает дубликаты)
      • len(set(a)) == 4 означает, что одно число повторяется дважды
  7. Подсчет результата:

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

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

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