Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3316632
А
Аноним
25 августа 2025 12:15 · публичный вопрос
А
Аноним

На вход подаётся текст (строка произвольной длины). Выведите сколько раз в этом тексте встречается имя Иван. Требования: Учитываются только точные совпадения слова "Иван" (без…

Запрос пользователя

На вход подаётся текст (строка произвольной длины). Выведите сколько раз в этом тексте встречается имя Иван. Требования: Учитываются только точные совпадения слова "Иван" (без учета регистра, но без учета частей слов, например, "Иванов" не считается). Имя "Иван" может встречаться в любом месте текста и в любом регистре: "Иван", "иван", "ИВАН" и т.п. Знаки препинания, стоящие рядом, не мешают определению слова. Проверка вашей программы осуществляется с использованием наших тестовых данных, поэтому вывод в консоли может отличаться от введённых вами значений. ​Проверяется: Использование метода .lower() — программа должна преобразовать текст к нижнему регистру. Использование метода .count() — программа должна подсчитывать количество вхождений. Соответствие ответа правильному.

Ответ нейросети
25 августа 2025 12:15

Цель решения: понять по шагам, как посчитать точно отдельно стоящие слова Иван в произвольном тексте, без учёта регистра и без подсчета части слова (например, Иванов не считается). Также учтём условия проверки (.lower() и .count()).

Подход (пошагово):

  • Привести входной текст к нижнему регистру (используем .lower()).
  • Заменить все символы, которые не являются русскими буквами, на пробелы. Это позволяет трактовать знаки препинания как разделители слов.
  • Разбить строку на слова по пробелам и отбросить пустые элементы.
  • Посчитать количество слов, равных "иван", с помощью метода .count() на списке слов. Это обеспечивает точное совпадение слова, а не вхождение части слова.

Пример реализации на Python (со строгим использованием .lower() и .count()):

import re

text = input() # входной текст (одна строка) lower_text = text.lower()

заменить все не-русские буквы на пробелы (оставляем а-я и ё)

normalized = re.sub(r'[^а-яё]', ' ', lower_text)

получить список слов

words = [w for w in normalized.split() if w]

посчитать точные совпадения слова "иван"

count = words.count('иван')

print(count)

Пояснения по коду:

  • re.sub(r'[^а-яё]', ' ', lower_text) заменяет любые символы, не являющиеся кириллицей (включая пробелы, знаки препинания, цифры и т. д.), на пробелы. Это позволяет корректно отделять слова, и при этом не считать "(Иванов)" как слово "иван".
  • words.count('иван') подсчитывает число элементов списка, равных exactly "иван" (после приведения к нижнему регистру и разбиения на слова).

Примеры:

  • Ввод: "Иван, иванов! Иван." -> слова: ['иван', 'иванов', 'иван']; count = 2.
  • Ввод: "Иван ивана, ИВАН." -> слова: ['иван', 'ивана', 'иван']; count = 2.
  • Ввод: "ИвАнОв и Иван" -> слова: ['иванов', 'иван']; count = 1.

Сложность:

  • Время: O(n), где n — длина входной строки (нужно пройти по символам и затем разобрать слова).
  • Память: O(k), где k — количество слов после разбиения.

Если хочешь, могу адаптировать код под другую среду (например, без модуля re) или показать альтернативу на другом языке.