如果字母“g”就在元音旁边,那么它也会被认为是元音,那么如何在这样的条件下解压一个字符串呢?

2024-10-03 21:31:28 发布

您现在位置:Python中文网/ 问答频道 /正文

做一个家庭作业问题,其中字符串中的所有元音都需要删除,如果字母“g”在元音旁边,也会被认为是元音。例如,给定字符串“flanger”,我希望返回的字符串为“frrnc”

到目前为止,我的情况是:

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

disemvowel('fragrance')
# frgrnc

Tags: or字符串textnewdef字母情况lower
3条回答

您可以尝试使用regex

进口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")

输出:

PASSED

有意思,这个叠吗?你知道吗

如果你有bagga这个词,外部的g会变成元音吗,然后内部的g也会变成元音吗?那么输出是bg还是b?你知道吗

您可以删除元音旁边的所有g,然后在第二步中删除所有元音。你知道吗

或者你可以用“a”替换元音旁边的所有g,然后去掉所有元音。如果“g”是元音-规则堆栈,您可能需要重复第一步,直到字符串不再改变。你知道吗

如果前一个字母是元音,可以添加一个变量来跟踪。你知道吗

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

输入

disemvowel('fragrance')

输出

frrnc

输入

disemvowel('gargden')

输出

grgdn

相关问题 更多 >