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
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.
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
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