Задание 17863
Откройте файл электронной таблицы, содержащей в каждой строке шесть натуральных чисел. Определите количество строк таблицы, содержащих числа, для которых выполнены оба условия:
- в строке только одно число повторяется трижды, остальные числа различны;
- квадрат суммы всех повторяющихся чисел строки больше квадрата суммы всех её неповторяющихся чисел.
В ответе запишите только число.
Решение
z17863.py
f = open("9_17863.csv")
count = 0
for line in f:
a = list(map(int, line.strip().split(';')))
not_repeat = [x for x in a if a.count(x) == 1]
repeat = [x for x in a if a.count(x) == 3]
if len(repeat) == 3 and len(not_repeat) == 3 and (sum(repeat) ** 2 > sum(not_repeat) ** 2):
count += 1
print(count)
Разбор кода
Давайте разберем решение пошагово:
Для решения задачи нам нужно проверить два условия для каждой строки:
- Одно число повторяется трижды, остальные различны
- Квадрат суммы повторяющихся чисел больше квадрата суммы неповторяющихся
1. Открытие и чтение файла
f = open("9_17863.csv")
- Открываем CSV файл с данными для обработки
- Файл содержит строки с шестью натуральными числами, разделенными точкой с запятой
2. Инициализация счетчика
count = 0
- Создаем переменную для подсчета строк, удовлетворяющих условиям
3. Обработка каждой строки
for line in f:
a = list(map(int, line.strip().split(';')))
- Читаем файл построчно
line.strip()
- удаляем лишние пробелы и символы переноса строкиsplit(';')
- разбиваем строку по разделителю ';'map(int, ...)
- преобразуем каждый элемент в целое число- Получаем список из 6 чисел
4. Поиск повторяющихся и неповторяющихся чисел
not_repeat = [x for x in a if a.count(x) == 1]
repeat = [x for x in a if a.count(x) == 3]
- Используем списковые включения (list comprehension) для фильтрации чисел:
not_repeat
- список чисел, которые встречаются только один разrepeat
- список чисел, которые встречаются ровно три раза
Обратите внимание: в repeat
одно и то же число будет записано три раза,
так как мы проверяем каждый элемент списка a
на условие повторения
5. Проверка условий
if len(repeat) == 3 and len(not_repeat) == 3 and (sum(repeat) ** 2 > sum(not_repeat) ** 2):
count += 1
Проверяем три условия:
len(repeat) == 3
- убеждаемся, что есть ровно три повторяющихся числа (одно число, повторенное три раза)len(not_repeat) == 3
- проверяем, что есть ровно три неповторяющихся числаsum(repeat) ** 2 > sum(not_repeat) ** 2
- проверяем, что квадрат суммы повторяющихся чисел больше квадрата суммы неповторяющихся
Если все условия выполняются, увеличиваем счетчик на 1.
6. Вывод результата
print(count)
- Выводим итоговое количество строк, удовлетворяющих всем условиям
Для проверки своего решения можно создать тестовый файл с несколькими строками:
1;2;3;4;4;4 # подходит (4 повторяется трижды, 1,2,3 различны)
1;1;2;2;3;3 # не подходит (нет числа, повторяющегося трижды)
5;5;5;1;1;2 # не подходит (есть число, повторяющееся дважды)