Задание 18258
Откройте файл электронной таблицы, содержащей в каждой строке пять натуральных чисел. Определите наибольший номер строки таблицы, для чисел которой выполнены оба условия:
- числа в строке расположены в порядке неубывания
- в строке есть повторяющиеся числа с чётной суммой цифр
В ответе запишите только число. Файл (opens in a new tab)
Решение
z14331.py
f = open('9_18258.csv')
k = 0
def func(b):
for i in range(len(b)):
if sum(map(int, str(b[i]))) % 2 == 0:
return True
return False
for line in f:
a = list(map(int, line.split(';')))
b = [x for x in a if a.count(x) == 2]
if a.sort() == a and len(b) == 2 and func(b):
k += 1
print(k)
Разбор кода
Давайте разберем код пошагово:
-
Открытие файла
f = open('9_18258.csv')
- Открываем CSV файл с исходными данными для обработки
-
Инициализация счетчика
k = 0
- Создаем переменную k для подсчета строк, удовлетворяющих условиям
-
Вспомогательная функция
def func(b): for i in range(len(b)): if sum(map(int, str(b[i]))) % 2 == 0: return True return False
- Функция проверяет, есть ли в списке число с четной суммой цифр
- Для каждого числа преобразует его в строку, затем каждую цифру в число
- Суммирует цифры и проверяет четность суммы
- Возвращает True, если найдено хотя бы одно число с четной суммой цифр
-
Основной цикл обработки
for line in f: a = list(map(int, line.split(';'))) b = [x for x in a if a.count(x) == 2] if a.sort() == a and len(b) == 2 and func(b): k += 1
- Читаем файл построчно
- Каждую строку разбиваем по точке с запятой и преобразуем в список чисел
- Создаем список b, содержащий только те числа, которые встречаются ровно 2 раза
- Проверяем условия:
- Числа расположены в порядке неубывания (a.sort() == a)
- Есть ровно два повторяющихся числа (len(b) == 2)
- Среди повторяющихся чисел есть число с четной суммой цифр (func(b))
- Если все условия выполнены, увеличиваем счетчик k
-
Вывод результата
print(k)
- Выводим итоговое количество строк, удовлетворяющих всем условиям
Важные замечания:
- Код использует списковое включение (list comprehension) для эффективной фильтрации повторяющихся чисел
- Функция map() применяется дважды: для преобразования строк в числа и для суммирования цифр
- Проверка на неубывание реализована через сравнение с отсортированным списком
- Код эффективно обрабатывает большие наборы данных благодаря построчному чтению файла