Задание 19117
Откройте файл электронной таблицы, содержащей в каждой строке пять натуральных чисел. Определите количество строк таблицы, содержащих числа, для которых выполнено хотя бы одно условие
:
- В строке одно число повторяется дважды, остальные различны;
- Выполнены следующие два условия:
- Сумма чётных чисел строки больше суммы нечётных;
- В строке существуют как чётные числа, так и нечётные числа.
В ответе запишите только число.
Решение
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 пустых строк в списке, что вызовет ошибку. Можно просто удалить эти строки или добавить проверку на наличие пустых строк перед преобразованием в числа, чтобы избежать ошибок
Лучше добавить проверку на наличие пустых строк в списке, так как файл может содержать подобные строки в разных местах
-
Открытие файла:
f = open('9_19117.csv')
- Открываем файл с данными в формате CSV
- Важно отметить, что в данном случае не указана кодировка файла. Если все такие есть проблемы с чтение то необходимо указывать кодировку:
f = open('9_19117.csv', encoding='utf-8')
- Это помогает избежать проблем с чтением русских символов или специальных знаков
-
Инициализация счетчика:
count = 0
- Создаем переменную для подсчета строк, удовлетворяющих условиям
-
Основной цикл обработки:
for line in f: a = line.strip().split(';')
- Читаем файл построчно
strip()
удаляет лишние пробелы и символы переноса строкиsplit(';')
разбивает строку по разделителю ';' на список чисел
-
Проверка и преобразование данных:
if a[0].isdigit(): a = list(map(int, a))
- Проверяем, что первое значение - число (пропускаем заголовок)
- Преобразуем все строковые значения в целые числа с помощью
map(int, a)
-
Определение четных и нечетных чисел:
chet = [x for x in a if x % 2 == 0] nechet = [x for x in a if x % 2 != 0]
- Создаем два списка: для четных и нечетных чисел
- Используем list comprehension для фильтрации чисел
-
Проверка условий:
if (len(chet) > 0 and len(nechet) > 0) and sum(chet) > sum(nechet) or \ len(set(a)) == 4:
- Проверяем одно из условий:
- Наличие и четных, и нечетных чисел (
len(chet) > 0 and len(nechet) > 0
) - Сумма четных больше суммы нечетных (
sum(chet) > sum(nechet)
)
- Наличие и четных, и нечетных чисел (
- ИЛИ проверяем условие с повторяющимся числом:
set(a)
создает множество из списка чисел (убирает дубликаты)len(set(a)) == 4
означает, что одно число повторяется дважды
- Проверяем одно из условий:
-
Подсчет результата:
count += 1
- Если строка удовлетворяет хотя бы одному из условий, увеличиваем счетчик
-
Вывод результата:
print(count)
- Выводим количество строк, удовлетворяющих условиям
Это решение эффективно обрабатывает данные и проверяет все необходимые условия задачи. Важно отметить, что код учитывает оба условия из задания: либо наличие повторяющегося числа, либо выполнение условий с четными и нечетными числами.