Задание 19878
Откройте файл электронной таблицы, содержащей в каждой строке семь натуральных чисел. Определите количество строк таблицы, содержащих числа, для которых выполнены оба условия:
- в строке ровно одно число повторяется трижды, остальные числа различны
- среднее арифметическое неповторяющихся чисел не больше повторяющегося числа
В ответе запишите только число.
Решение
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
-
Открытие файла:
f = open('19878.csv', encoding='utf-8-sig')
- Открываем файл с данными в формате CSV
-
Основной цикл обработки:
for line in f: a = line.strip().split(';') a = list(map(int, a))
- Читаем файл построчно
strip()
удаляет лишние пробелы и символы переноса строкиsplit(';')
разделяет строку по разделителю ";"map(int, a)
преобразуем все строковые числа в целые числа
-
Поиск повторяющихся чисел:
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 для компактной записи
-
Проверка условий:
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
) - Вычисляем среднее арифметическое неповторяющихся чисел и сравниваем с повторяющимся числом
- Проверяем, что есть ровно одно число, повторяющееся трижды (
-
Подсчет результата:
count += 1
- Если все условия выполнены, увеличиваем счетчик
-
Вывод результата:
print(count)
- В конце выводим количество строк, удовлетворяющих условиям задачи
Это решение эффективно обрабатывает данные и проверяет все необходимые условия задачи. Использование list comprehension делает код более компактным и читаемым.