Что-то не так как должно по задумке. Python

string_ = "This website is for losers LOL!"
def disemvowel(string_):
    size = len(string_)
    for i in range(size):
        if string_[i] == 'a' or 'i' or 'u' or 'e' or 'o' or 'O':
            string_.replace(string_[i], "")
    print(string_)
disemvowel(string_)

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


Ответы (2 шт):

Автор решения: Zhihar

О чем мы в предыдущих вопросах говорили

не меняйте строку идя по ней, создайте новую

string_ = "This website is for losers LOL!"

string_ = ''.join(letter for letter in string_ if letter not in 'aiueoO')

print(string_)

а можно через регулярные выражения:

import re

string_ = "This website is for losers LOL!"

string_1 = re.sub('[aiueoO]', '', string_)
→ Ссылка
Автор решения: olushax

Во-первых, if string_[i] == 'a' or 'i' or 'u' or 'e' or 'o' or 'O' всегда будет истинным, потому что нужно применять сравнение для каждой буквы.

Во-вторых, string_.replace(string_[i], "") просто выполняет что сказано, но не изменяет строку, поэтому нужно обновлять строку:

string_ = string_.replace(i, '')

В-третьих, итерацию следует проводить не по размеру строки, а по самой строке, иначе при урезке строки мы будем вылетать за пределы самой строки:

for i in string_:

Этот код работает

string_ = "This website is for losers LOL!"
def disemvowel(string_):
    for i in string_:
        if i in ['a', 'i', 'u', 'e', 'o', 'O']:
            string_ = string_.replace(i, '')
    print(string_)
disemvowel(string_)
→ Ссылка