Строка заменяет гласные в Python?

Ожидаемое:

>>> removeVowels('apple')
"ppl"
>>> removeVowels('Apple')
"ppl"
>>> removeVowels('Banana')
'Bnn'

Код (Начинающий):

def removeVowels(word):
    vowels = ('a', 'e', 'i', 'o', 'u')
    for c in word:
        if c in vowels:
            res = word.replace(c,"")
    return res 

Как мне прописные и строчные буквы?

9 ответов

Решение

Вот версия, использующая список вместо генератора:

def removeVowels(word):
    letters = []            # make an empty list to hold the non-vowels
    for char in word:       # for each character in the word
        if char.lower() not in 'aeiou':    # if the letter is not a vowel
            letters.append(char)           # add it to the list of non-vowels
    return ''.join(letters) # join the list of non-vowels together into a string

Вы также можете написать это так же, как

''.join(char for char in word if char.lower() not in 'aeiou')

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

Если вы хотите ускорить это, сделав строку значений set ускоряет поиск каждого символа в них, а наличие букв в верхнем регистре также означает, что вам не нужно переводить каждый символ в нижний регистр.

''.join(char for char in word if char not in set('aeiouAEIOU'))
re.sub('[aeiou]', '', 'Banana', flags=re.I)

Использование метода bytes.translate():

def removeVowels(word, vowels=b'aeiouAEIOU'):
    return word.translate(None, vowels)

Пример:

>>> removeVowels('apple')
'ppl'
>>> removeVowels('Apple')
'ppl'
>>> removeVowels('Banana')
'Bnn'

Решение @katrielalex также можно упростить до выражения генератора:

def removeVowels(word):
    VOWELS = ('a', 'e', 'i', 'o', 'u')
    return ''.join(X for X in word if X.lower() not in VOWELS)

Поскольку все остальные ответы полностью переписывают код, который, как я полагал, вам нужен, с кодом, только слегка измененным. Кроме того, я сохранил это простым, так как вы начинающий.

Примечание: потому что вы переназначаете res в word в каждом цикле for вы получите только последний гласный. Вместо этого замените гласные прямо в word

def removeVowels(word):
    vowels = ('a', 'e', 'i', 'o', 'u')
    for c in word:
        if c.lower() in vowels:
            word = word.replace(c,"")
    return word

Пояснение: я только что изменился if c in vowels: в if c.lower() in vowels:

.lower() преобразовать строку в нижний регистр Таким образом, он преобразовал каждую букву в нижний регистр, затем проверил букву, чтобы увидеть, есть ли она в кортеж гласных, а затем заменил ее, если она была.

Все остальные ответы хорошие, поэтому вы должны проверить методы, которые они используют, если вы еще их не знаете.

Надеюсь это поможет!

Здесь у вас есть еще одна простая и удобная функция, не нужно использовать списки:

def removeVowels(word):
    vowels = 'aeiouAEIOU'
    for vowel in vowels:
        word = word.replace(vowel, '')
    return word
def _filterVowels(word):
    for char in word:
        if char.lower() not in 'aeiou':
            yield char

def removeVowels(word):
    return "".join(_filterVowels(word))

Как насчет этого:

import re

def removeVowels(word):
    return re.sub("[aeiouAEIOU]", "", word)
def removeVowels(word):
    vowels='aeiou'
    Vowels='AEIOU'
    newWord=''

    for letter in word:
        if letter in vowels or letter in Vowels:
            cap=letter.replace(letter,'')
        else: cap=letter
        newWord+=cap
    return newWord
Другие вопросы по тегам