How to disemvowel a string with a condition where if the letter “g” is right beside a vowel, it would also be considered a vowel?

前端 未结 3 1774
别跟我提以往
别跟我提以往 2021-01-27 17:29

Working on a homework question where all the vowels in a string need to be removed and if the letter \"g\" is beside a vowel, it would also be considered a vowel. For example gi

相关标签:
3条回答
  • 2021-01-27 18:09

    Interesting, does this stack?

    So if you had the word baggga, would the outer g's turn into vowels, which then would turn the inner g also into a vowel? So is the output bg or is it b?

    You can either remove all g's next to vowels and then in a second step remove all vowels.

    Or you could replace all g's next to vowels by, let's say 'a', and then remove all vowels. If the 'g is a vowel'-rule stacks, you may have to repeat the first step until the string does not change anymore.

    0 讨论(0)
  • 2021-01-27 18:15

    You can try using regex:

    import re

    def disemvowel(text):
        return re.sub(r"G?[AEIOU]+G?", "", text, flags=re.IGNORECASE)
    
    
    tests = {"fragrance": "frrnc", "gargden": "rgdn", "gargdenag": "rgdn", "gag": ""}
    
    for test, value in tests.items():
        assert disemvowel(test) == value
    
    print("PASSED")
    

    Output:

    PASSED
    
    0 讨论(0)
  • 2021-01-27 18:15

    You can add a variable to track if the previous letter was a vowel.

    def disemvowel(text):
    text = list(text)
    new_letters = []
    last_vowel_state=False
    for i in text:
        if i.lower() == "a" or i.lower() == "e" or i.lower() == "i" or i.lower() == "o" or i.lower() == "u":
            last_vowel_state=True
            pass
        else:
            if last_vowel_state==True and i.lower()=='g':
                pass
            else:    
                new_letters.append(i)
            last_vowel_state=False
    
    
    print (''.join(new_letters))
    

    Input

    disemvowel('fragrance')

    Output

    frrnc
    

    Input

    disemvowel('gargden')
    

    Output

    grgdn
    
    0 讨论(0)
提交回复
热议问题