← Назад к вопросам
Удаление гласных из строки
2.0 Middle🔥 111 комментариев
#Теория тестирования
Условие
Напишите функцию, которая удаляет все гласные буквы из строки.
Пример
Вход: Hello World Выход: Hll Wrld
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Решение
Анализ задачи
Необходимо удалить все гласные буквы из строки, сохраняя остальные символы и их позиции. Это задача на работу со строками и фильтрацию, которая часто встречается в тестировании валидации данных, очистки пользовательского ввода и обработки текстовых данных в API ответов.
Решение
Создам несколько вариантов удаления гласных:
import re
def remove_vowels(text: str) -> str:
"""Удаляет все гласные буквы из строки."""
if not isinstance(text, str):
raise TypeError("Входное значение должно быть строкой")
return re.sub(r"[aeiouAEIOU]", "", text)
class VowelRemover:
"""Класс для удаления гласных из строк."""
@staticmethod
def remove_vowels_iterative(text: str) -> str:
"""Удаление гласных через итерацию."""
if not text:
return ""
vowels = set("aeiouAEIOU")
return "".join(char for char in text if char not in vowels)
@staticmethod
def remove_vowels_translate(text: str) -> str:
"""Удаление гласных через метод translate()."""
if not text:
return ""
vowels = "aeiouAEIOU"
translation_table = str.maketrans("", "", vowels)
return text.translate(translation_table)
@staticmethod
def remove_vowels_with_stats(text: str) -> dict:
"""Удаление гласных с подробной статистикой."""
if not isinstance(text, str):
raise TypeError("Входное значение должно быть строкой")
vowels = set("aeiouAEIOU")
result = "".join(char for char in text if char not in vowels)
vowel_count = sum(1 for char in text if char in vowels)
removed_letters = [char for char in text if char in vowels]
return {
"original": text,
"result": result,
"vowels_removed": vowel_count,
"removed_vowels_list": removed_letters,
"characters_kept": len(result),
"total_characters": len(text)
}
Примеры использования
# Простой вариант с регулярными выражениями
print(remove_vowels("Hello World")) # Hll Wrld
print(remove_vowels("Python")) # Pythn
print(remove_vowels("AEIOU")) # ""
# Итеративный вариант
print(VowelRemover.remove_vowels_iterative("Hello World")) # Hll Wrld
# С использованием translate()
print(VowelRemover.remove_vowels_translate("Hello World")) # Hll Wrld
# С подробной статистикой
result = VowelRemover.remove_vowels_with_stats("Hello World")
print(result)
# {"original": "Hello World", "result": "Hll Wrld", "vowels_removed": 3, "removed_vowels_list": ["e", "o", "o"]}
# Граничные случаи
print(remove_vowels("")) # ""
print(remove_vowels("xyz")) # xyz
print(remove_vowels("123 456")) # 123 456
Ключевые моменты
Сравнение подходов:
| Подход | Производительность | Читаемость | Применение |
|---|---|---|---|
| Регулярное выражение | O(n), встроенная оптимизация | Компактно | Общий случай |
| Итеративный список | O(n), явный контроль | Понятно | Малые строки |
| translate() | O(n), самый быстрый | Специализирован | Большие объёмы |
Особенности реализаций:
- Регулярное выражение:
[aeiouAEIOU]ищет любую гласную translate()— встроённый метод, самый производительный- Set для поиска — O(1) для проверки принадлежности
- Список comprehension — лаконичен и понятен
Граничные случаи для тестирования:
- Пустая строка
- Строка только с согласными
- Строка только с гласными
- Смешанный регистр
- Числа и специальные символы
- Пробелы и пунктуация