Типы данных

127 задачвместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
📔
Шаг 1: Дневник олимпиадника
Просто
Знакомься: Вася, 11 класс, мечтает поступить на программиста. С сентября ведёт текстовый дневник тренировок к олимпиадам. Туда он записывает всё: какие задачи решил, что ел на обед, мысли о жизни. Завтра выступление, и Вася хочет вытащить только коды решённых задач, чтобы быстро повторить темы.
Условие задачи
 

Каждый код задачи имеет формат: 2 заглавные латинские буквы + 4 цифры (например, AB1234, MK0001).

Дана одна строка текста. Извлеки все валидные коды и выведи их по одному на строке.

Входные данные

Одна строка произвольного текста (до 10 000 символов).

Выходные данные

Все найденные коды задач, по одному на строке. Если не найдены — пустой вывод.

Подсказка: re.findall(r"\b[A-Z]{2}\d{4}\b", text). Граница слова \b — чтобы не цеплять ABC1234.
Шаг 10: Финальная анкета
Сложно
Финал лета. Деканат прислал тебе CSV-файл с заявлениями абитуриентов и сказал: «Скажи, сколько из них вообще можно рассматривать». В файле пять полей: ID, ФИО, email, телефон, балл. Если хоть одно поле в строке кривое — вся анкета летит в мусорку. Это твой главный тест. Проверь все анкеты и доложи число валидных. Пройдёшь — станешь главным аналитиком приёмной комиссии. Не пройдёшь — будешь до Нового года считать степлеры на складе.
Условие задачи
 

Дано N заявлений в формате CSV (разделитель — символ |). Каждое заявление содержит 5 полей:

  1. ID: ровно 2 заглавные латинские буквы + 4 цифры. Пример: AB1234
  2. ФИО: фамилия (русская, с заглавной буквы) + пробел + заглавная буква + точка + заглавная буква + точка. Пример: Иванов И.И.
  3. Email: имя@домен.tld, где tld — 2–4 латинские буквы.
  4. Телефон: ровно +7 и 10 цифр. Пример: +79991234567
  5. Балл: целое число от 1 до 100.

Заявление считается валидным, если ВСЕ пять полей соответствуют формату.

Входные данные

В первой строке — целое число N. Далее N строк с заявлениями.

Выходные данные

Одно целое число — количество валидных заявлений.

Подсказка: Используй re.fullmatch() — в отличие от match, она требует, чтобы шаблон совпал с всей строкой, а не только с её началом.
🔒
Шаг 9: Тс-с, это тайна
Сложно
Завтра вуз вывешивает результаты на сайте. По закону о персональных данных нельзя показывать ФИО — только обезличенные результаты. Юрист комиссии нервно дергает левый глаз и говорит: «Замени все ФИО на звёздочки. Прямо сейчас. И чтобы я больше этого не видел». Юристов лучше не злить. Особенно когда у них дёргается глаз.
Условие задачи
 

Замени все ФИО в тексте на ***.

ФИО имеет формат: Фамилия с заглавной буквы, пробел, заглавная буква, точка, заглавная буква, точка. Например, Иванов И.И., Петрова А.С.. Все ФИО в кириллице.

Входные данные

Одна строка текста.

Выходные данные

Та же строка, в которой все ФИО заменены на ***.

Подсказка: re.sub(r"[А-ЯЁ][а-яё]+\s[А-ЯЁ]\.[А-ЯЁ]\.", "***", text). Не забудь экранировать точки!
🎯
Шаг 6: Сколько у меня баллов?
Средне
Тебе пишет абитуриентка Алиса: «Помогите, я не понимаю свой суммарный балл, у меня результаты в трёх разных форматах, я в шоке». Открываешь её скриншот — и правда: где-то математика: 95 баллов, где-то русский=92, где-то физика - 88. Алисе нужна одна цифра. Алисе нужна сумма. Алисе нужна твоя помощь.
Условие задачи
 

Извлеки все числовые значения баллов из текста и выведи их сумму. Балл — любое целое число от 1 до 100. Гарантируется, что других чисел в тексте нет.

Входные данные

Одна строка текста с описанием результатов.

Выходные данные

Одно целое число — сумма всех найденных баллов. Если баллов нет — вывести 0.

Подсказка: re.findall(r"\d+", text) вернёт список всех чисел в виде строк. Останется только сложить их.
📞
Шаг 5: Алло, это приёмка?
Средне
Час дня. Тебе позвонили 17 раз за последние 10 минут. У комиссии копится база телефонов абитуриентов, и каждый записывает номер по-своему: с плюсом, с восьмёркой, со скобками, с тире, а одна бабушка вообще словами. К счастью, словами — это не наш случай. Сегодня твоя миссия — привести все номера к человеческому виду +7XXXXXXXXXX.
Условие задачи
 

Извлеки все российские мобильные номера из текста и приведи к формату +7XXXXXXXXXX (плюс, семёрка, 10 цифр без разделителей).

Возможные форматы во входных данных:

  • +7(495)123-45-67 — код в скобках
  • 8(495)123-45-67 — восьмёрка вместо +7
  • +7-495-123-45-67 — всё через дефис
  • 8-495-123-45-67 — то же с восьмёркой

Все номера: либо +7, либо 8, далее код (3 цифры), далее 7 цифр. Пробелов внутри номера нет.

Входные данные

Одна строка текста.

Выходные данные

Все найденные номера в формате +7XXXXXXXXXX, по одному на строке.

Подсказка: Найди подстроки телефонов, потом re.sub(r"\D", "", s) чистит всё нецифровое. Если первая цифра 8 — замени на 7.
📅
Шаг 4: Когда же экзамен?!
Средне
Расписание экзаменов прислали сразу три разных департамента. В одном пишут даты через точку (15.06.2025), в другом — через слеш (15/06/2025), в третьем — через дефис (15-06-2025). Конечно же, никто не согласовался. И конечно же, разбираться тебе. Приведи весь хаос к нормальному виду ГГГГ-ММ-ДД, как делают серьёзные айтишники.
Условие задачи
 

Извлеки все даты из текста и выведи их в формате ГГГГ-ММ-ДД (ISO 8601).

Формат входных дат: ровно 2 цифры дня, разделитель (., / или -), 2 цифры месяца, тот же или другой разделитель, 4 цифры года. Год от 2020 до 2026, день от 01 до 28, месяц от 01 до 12 (валидность гарантируется).

Входные данные

Одна строка текста.

Выходные данные

Все найденные даты в формате ГГГГ-ММ-ДД, по одной на строке.

Подсказка: Группы захвата: (\d{2})[./-](\d{2})[./-](\d{4}). Класс [./-] заменит сразу все три разделителя.
📄
Шаг 3: Бланки ЕГЭ
Просто
Сегодня в комиссию пришёл абитуриент Костя. Он принёс распечатку с десяти разных сайтов с результатами ЕГЭ, потому что «не понял, какому верить». Среди этой пачки бумаг нужно отыскать номера бланков ЕГЭ — и проверить, что они валидные. Костя нервничает. Костя смотрит на тебя. Костя верит.
Условие задачи
 

Номер бланка ЕГЭ имеет формат: ровно 4 цифры, дефис, ровно 7 цифр. Например, 0123-4567890.

Входные данные

Одна строка текста.

Выходные данные

Все найденные валидные номера бланков, по одному на строке.

Подсказка: Регулярка \b\d{4}-\d{7}\b. Границы \b важны — иначе номер 12345-67890123 тоже подойдёт частично, а это не наш случай.
📧
Шаг 2: Письма из ниоткуда
Просто
День второй. На почту приёмной комиссии завалилось 347 писем от абитуриентов. Кто-то пишет email в подписи, кто-то в теле письма, кто-то прямо в теме: «Если что, пишите на vasya.gamer@hse.ru, я там всегда онлайн». Твой начальник просит собрать все email в один список, потому что Excel у него снова завис. Печаль.
Условие задачи
 

Email считается валидным, если он состоит из:

  • имени из латинских букв, цифр и точек,
  • символа @,
  • домена из латинских букв, цифр и точек,
  • точки и доменного зона из 2–4 латинских букв (например, .ru, .edu, .com).
Входные данные

Одна строка произвольного текста.

Выходные данные

Все найденные email-адреса, по одному на строке, в порядке появления.

Подсказка: Шаблон: [a-zA-Z0-9.]+@[a-zA-Z0-9.]+\.[a-zA-Z]{2,4}. Не забудь экранировать точку перед доменной зоной: \..

Что не так с кодом df[df['A'] > 5 & df['B'] < 10]?

  1. всё в порядке, код работает
  2. надо писать and вместо &
  3. не хватает скобок вокруг каждого сравнения, будет ошибка
  4. надо писать | вместо &

В выражении (df['A'] > 5) & (df['B'] < 10) зачем нужны скобки вокруг каждого условия?

  1. для красоты, можно убрать
  2. оператор & имеет более высокий приоритет, чем сравнение, без скобок будет ошибка
  3. чтобы pandas понял русский язык
  4. чтобы код стал быстрее

Учитель ведёт журнал сдачи домашних заданий. На вход подаётся число \(N\) — количество записей. Затем \(N\) строк в формате:

имя предмет балл

Один ученик может сдавать задания по разным предметам.

Программа должна для каждого ученика подсчитать количество сданных заданий и суммарный балл. Вывести таблицу, отсортированную по убыванию количества заданий. При равном количестве — по возрастанию суммы баллов. При полном равенстве — в алфавитном порядке.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 30\)).

Следующие \(N\) строк — имя, предмет и балл через пробел.

Формат выходных данных

Для каждого ученика строка в формате: Имя — X заданий, Y баллов

В зоопарке записали массу животных. На вход подаётся число \(N\) — количество животных. Затем вводятся \(N\) строк, в каждой через пробел: название животного и его масса в кг (целое число).

Программа должна собрать данные в словарь и вывести только тех животных, чья масса \(\ge 100\) кг, в формате Животное — масса, в порядке ввода.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 15\)).

Следующие \(N\) строк — название и масса через пробел. Названия уникальны (одно слово).

Формат выходных данных

Строки в формате Животное — масса для животных с массой \(\ge 100\). Если таких нет, ничего не выводить.

На вход подаётся число \(N\) — количество товаров. Затем вводятся \(N\) строк, в каждой через пробел: название товара и его цена (целое число).

Программа должна собрать данные в словарь и вывести только те товары, цена которых строго больше 500, в формате Товар — цена, в порядке ввода.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 15\)).

Следующие \(N\) строк — название и цена через пробел. Названия уникальны (одно слово).

Формат выходных данных

Строки в формате Товар — цена для товаров с ценой \(> 500\). Если таких нет, ничего не выводить.

На вход подаётся число \(N\) — количество учеников. Затем вводятся \(N\) строк, в каждой через пробел: имя ученика и его средний балл (целое число).

Программа должна собрать данные в словарь и вывести только тех учеников, чей средний балл \(\ge 5\), в формате Имя — балл, в порядке ввода.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 15\)).

Следующие \(N\) строк — имя и балл через пробел. Имена уникальны.

Формат выходных данных

Строки в формате Имя — балл для учеников с баллом \(\ge 5\). Если таких нет, ничего не выводить.

Пользователь вводит количество чисел, а затем сами числа — каждое на отдельной строке. Сохраните все числа в список.

Выведите три строки:

  1. Исходный список — числа через пробел.
  2. Количество уникальных (различных) чисел.
  3. Уникальные числа через пробел в порядке возрастания.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 20\)).

Следующие \(N\) строк — по одному целому числу (от \(-1000\) до \(1000\)).

Формат выходных данных

Первая строка — исходный список через пробел.

Вторая строка — количество уникальных чисел.

Третья строка — уникальные числа в порядке возрастания через пробел.

Примечание

Подсказка: преобразуйте список в множество с помощью set(), затем отсортируйте.

Пользователь вводит количество чисел, а затем сами числа — каждое на отдельной строке. Сохраните все числа в список.

Выведите две строки:

  1. Исходный список — числа через пробел.
  2. Среднее арифметическое, округлённое до 1 знака после запятой.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 20\)).

Следующие \(N\) строк — по одному целому числу (от \(-1000\) до \(1000\)).

Формат выходных данных

Первая строка — исходный список через пробел.

Вторая строка — среднее арифметическое с одним знаком после запятой.

Примечание

Подсказка: среднее = сумма / количество. Для вывода используйте round(x, 1).

Пользователь вводит количество слов, а затем сами слова — каждое на отдельной строке. Сохраните все слова в список.

Выведите две строки:

  1. Исходный список — слова через пробел в порядке ввода.
  2. Отсортированный список — слова через пробел в алфавитном порядке.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 15\)).

Следующие \(N\) строк — по одному слову (строчные русские буквы, без пробелов).

Формат выходных данных

Две строки: исходный список и отсортированный по алфавиту, слова через пробел.

Пользователь вводит предложение. Посчитайте, сколько в нём пробелов.

Формат входных данных

Одна строка — предложение (может содержать буквы, цифры, знаки препинания и пробелы). Длина от 1 до 200 символов.

Формат выходных данных

Одно целое число — количество пробелов в строке.

Пользователь вводит слово. Выведите его первый и последний символ через пробел.

Формат входных данных

Одна строка — слово (без пробелов). Длина не менее 2 символов.

Формат выходных данных

Два символа через пробел — первый и последний символ слова.

Пользователь вводит имя и фамилию через пробел. Выведите только фамилию.

Формат входных данных

Одна строка — имя и фамилия, разделённые ровно одним пробелом.

Формат выходных данных

Одна строка — фамилия.

Поделиться
Класснуть