Теория
Что нужно знать
Задание 9 проверяет анализ данных в электронной таблице: нужно открыть файл, разобрать строки чисел и найти количество подходящих строк, их сумму, среднее или номер. В демоверсии 2027 приведён классический вариант: пять натуральных чисел в строке, все числа различны и удвоенная сумма максимума и минимума больше суммы трёх оставшихся. В банке задач условия сложнее: повторяющиеся числа, чётность, делимость, средние, геометрия и временные ряды. Решать можно в Excel или программой — главное правильно формализовать условие и не перепутать, что именно просят.
Как устроено задание 9
В каждой строке файла записан набор чисел — обычно от 3 до 10. Условие описывает свойства строки: все числа различны, есть повторения, выполняются неравенства, среднее больше медианы и т. п. Нужно пройти по всем строкам, отобрать подходящие и вычислить требуемую величину. В 2027 году задание относится к разделу «Информационные технологии» и оценивается в 1 первичный балл.
- Файл прилагается к заданию; в демоверсии 2027 — пять натуральных чисел в строке.
- Ответ — одно число: счётчик, сумма, среднее, номер или произведение.
- Проверять нужно именно все условия, а не только первое.
- Строки нумеруются с 1, если в условии не сказано иначе.
- Решать можно в редакторе таблиц или программой на Python.
Файлы и чтение строк
Сначала определите формат. CSV и TXT — это текст, его читают построчно; XLSX и ODS — книги, их удобно открывать в Excel или LibreOffice. В текстовом файле разделитель может быть запятой, точкой с запятой, пробелом или табуляцией. Заголовок и пустые строки нужно пропускать.
- CSV: a,b,c или a;b;c; десятичный разделитель может быть точкой или запятой.
- TXT: чаще всего числа разделены пробелами.
- XLSX и ODS: один столбец — одно число; строка таблицы — одна запись.
- Если в файле есть заголовок, начните со второй строки.
- В Python используйте open(path, encoding='utf-8'); для старых файлов иногда нужен cp1251.
- Если разделитель неизвестен, посмотрите первые 3–5 строк и проверьте, что чисел столько же, сколько в условии.
Базовые операции со строкой
Почти все условия задания 9 собираются из нескольких простых операций. Запомните их названия и то, что они возвращают.
- Сумма: sum(a) или =СУММ(A1:E1).
- Среднее: sum(a) / len(a) или =СРЗНАЧ(A1:E1).
- Минимум и максимум: min(a), max(a) или =МИН, =МАКС.
- Произведение: math.prod(a); в Excel — =ПРОИЗВЕД(A1:E1).
- Сортировка: sorted(a); первые и последние элементы — наименьшие и наибольшие.
- Чётность: x % 2 == 0; нечётность: x % 2 != 0.
- Кратность: x % k == 0; остаток: x % k.
- Цифры числа: str(abs(x)), sum(map(int, str(abs(x)))).
sum(a)min(a)max(a)sorted(a)x % 2 == 0math.prod(a)
Повторяющиеся числа
Самая частая конструкция в банке — подсчёт повторений. Для каждого числа считают, сколько раз оно встречается, и раскладывают строку на группы: числа с частотой 1, 2, 3, 4. Важно: a.count(x) возвращает частоту, поэтому список [x for x in a if a.count(x) == 2] содержит каждое повторяющееся число столько раз, сколько оно встречается.
- Все числа различны: len(set(a)) == len(a).
- Есть повторения: len(set(a)) < len(a).
- Ровно одно число повторяется дважды: длина списка чисел с частотой 2 равна 2.
- Ровно два числа повторяются дважды: длина списка чисел с частотой 2 равна 4.
- Одно число повторяется трижды, два — дважды: длины списков 3 и 4.
- Неповторяющиеся числа: [x for x in a if a.count(x) == 1].
- Повторяющиеся числа: [x for x in a if a.count(x) > 1].
- Сумма повторяющихся чисел с учётом кратности — sum(x for x in a if a.count(x) > 1); без учёта кратности — sum(set(...)).
len(set(a)) == len(a)a.count(x)[x for x in a if a.count(x) == 2][x for x in a if a.count(x) == 1]
Логика условий
Условия в задании 9 почти всегда составные. «Выполнены оба условия» — это логическое И, «хотя бы одно» — ИЛИ, «ровно k условий из m» — сумма логических значений. В Python True и False складываются как 1 и 0, поэтому sum(cond) — короткий и надёжный способ посчитать число выполненных условий.
- И: cond1 and cond2; в Excel — И(...).
- ИЛИ: cond1 or cond2; в Excel — ИЛИ(...).
- Не: not cond; в Excel — НЕ(...).
- Ровно k: sum([cond1, cond2, cond3]) == k.
- Хотя бы одно: any([...]) или sum(...) >= 1.
- Ни одного: not any([...]).
- «Не более k»: sum(...) <= k; «не менее k»: sum(...) >= k.
- Строгие и нестрогие сравнения: < и <= дают разные ответы; перечитывайте формулировку.
cond1 and cond2sum([c1, c2, c3]) == 2any([...])
Что именно найти
Одна и та же строка может дать разные ответы в зависимости от последней фразы. До решения выпишите, что накапливаете: счётчик, сумму значений, сумму номеров, среднее или экстремальный номер.
- «Количество строк» — увеличивайте счётчик на 1.
- «Сумма чисел всех строк» — прибавляйте sum(a).
- «Сумма номеров строк» — прибавляйте номер строки, а не числа.
- «Среднее арифметическое чисел строк» — делите сумму значений на количество значений.
- «Среднее номеров строк» — делите сумму номеров на количество строк.
- «Строка с наибольшим или наименьшим номером» — запоминайте номер и не останавливайтесь раньше времени.
- «Сумма максимальных значений в подходящих строках» — прибавляйте max(a).
- «Произведение чисел в строке» — используйте math.prod(a) или =ПРОИЗВЕД.
- «Целая часть» — int(x) или //; «округлить» — round(x).
count += 1total += sum(a)total += isum(values) / len(values)
Excel: формулы и вспомогательные столбцы
В Excel задачу удобно решать в два прохода. Сначала рядом с каждой строкой добавьте вспомогательные столбцы: отдельно для каждого условия, затем общий столбец «подходит или нет». После этого считайте количество, сумму или номера функцией СЧЁТЕСЛИ или СУММЕСЛИ.
- =СУММ(A1:E1), =СРЗНАЧ(A1:E1), =МАКС(A1:E1), =МИН(A1:E1).
- =СЧЁТ(A1:E1) — только числа; =СЧЁТЗ(A1:E1) — непустые ячейки.
- =СЧЁТЕСЛИ(диапазон; условие) — количество по одному условию.
- =СЧЁТЕСЛИМН(диапазон1; условие1; диапазон2; условие2) — несколько условий.
- =СУММЕСЛИ(диапазон; условие; диапазон_сумм) и =СУММЕСЛИМН(...) — суммы по условию.
- =ЕСЛИ(И(...); 1; 0) — флаг строки; =СУММ(флаги) — количество.
- =ОСТАТ(x; k), =НАИМЕНЬШИЙ(диапазон; k), =НАИБОЛЬШИЙ(диапазон; k).
- Абсолютные ссылки $A$1 нужны, когда формула копируется вниз или вправо.
- Для нескольких условий в одной строке проще сначала получить 0 или 1 в отдельных столбцах, а потом сложить их.
=СЧЁТЕСЛИ(...)=СЧЁТЕСЛИМН(...)=СУММЕСЛИМН(...)=ЕСЛИ(И(...); 1; 0)=ОСТАТ(x; k)=НАИМЕНЬШИЙ(...; k)
Python: каркас решения
Программа читает файл построчно и проверяет условие для каждой строки. Шаблон ниже подходит для большинства задач: замените разделитель, условие и то, что накапливается.
- Открывайте файл один раз и идите циклом по строкам.
- Приводите элементы к int или float сразу.
- Для CSV с запятыми используйте split(','), для пробелов — split().
- Для строк с заголовком пропустите первую строку.
- Проверяйте len(a), чтобы не поймать пустую строку.
- Сохраняйте промежуточные значения в список, если нужен средний или максимальный номер.
- Печатайте только ответ, без пояснений.
for i, line in enumerate(open('9.csv'), 1):a = [int(x) for x in line.split()]if condition: count += 1
Вещественные числа и округление
В задачах с температурой, концентрациями и измерениями числа вещественные. Сравнивать их на точное равенство опасно: 23,9 в файле и 23,9 после вычисления могут отличаться на 10 в минус девятой степени. Округляйте до нужного знака и сравнивайте с допуском.
- Среднее: sum(a) / len(a); для вывода целой части — int(...).
- Округление до десятых: round(x, 1); в Excel — =ОКРУГЛ(x; 1).
- Сравнение с порогом: x > 23.9 - 1e-9.
- Счёт точных значений: sum(abs(x - target) < 1e-9 for x in a).
- Максимальное повышение: max(a[i + 1] - a[i] for i in range(len(a) - 1)).
- Суточные колебания: max(day) - min(day).
- Не путайте округление и отбрасывание: int(14.9) = 14, round(14.9) = 15.
round(x, 1)abs(x - target) < 1e-9int(x)
Геометрия и координаты
В банке встречаются задачи, где строка — это длины сторон, углы или координаты. Здесь важна не таблица, а геометрическое условие.
- Треугольник: max(a) < sum(a) - max(a).
- Прямоугольный треугольник: max(a) ** 2 == a[0] ** 2 + a[1] ** 2 после сортировки.
- Равнобедренный: две стороны равны; равносторонний: все три равны.
- Параллелограмм: противоположные стороны равны; ромб — все стороны равны.
- Расстояние: math.hypot(x1 - x0, y1 - y0) или sqrt(dx ** 2 + dy ** 2).
- Точки на одной прямой: (x2 - x1) * (y3 - y1) == (x3 - x1) * (y2 - y1).
- Проверяйте, какие числа даны: стороны, углы или координаты.
max(a) < sum(a) - max(a)c ** 2 == a ** 2 + b ** 2math.hypot(dx, dy)