← Назад к вопросам

Удаление гласных из строки

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 — лаконичен и понятен

Граничные случаи для тестирования:

  • Пустая строка
  • Строка только с согласными
  • Строка только с гласными
  • Смешанный регистр
  • Числа и специальные символы
  • Пробелы и пунктуация