为什么我的元音删除功能不起作用? (Python 2.7)

时间:2019-06-11 06:14:53

标签: python python-2.7

我正在学习代码学院的Python课程,并尝试创建一个python函数,该函数删除字符串中的元音并返回新修改的字符串。但是,该函数返回的字符串未经任何修改(即,如果我调用anti_vowel(“ abcd“)它返回” abcd“)

使用print语句后,无论字符串的长度如何,for循环仅运行一次。

def anti_vowel(string):
    for t in string:
        if(t.lower()=='a' or t.lower()=='e' or t.lower()=='i' or t.lower()=='u'):
            string.replace(t, " ")
            print "test"
        print string
        return string

2 个答案:

答案 0 :(得分:0)

Python中的字符串是不可变的,因此您需要使用RHS上的替换内容将其分配回原始字符串:

if (t.lower()=='a' or t.lower()=='e' or t.lower()=='i' or t.lower()=='u'):
    string = string.replace(t, " ")

但是,您也可以在这里re.sub

string = re.sub(r'[aeiou]+', '', string, flags=re.IGNORECASE)

答案 1 :(得分:-1)

您在for循环中包含return语句,这就是为什么您的代码循环仅执行一次的原因。将其放在循环之外,您的代码将正常工作。

def anti_vowel(string):
    for t in string:
        if(t.lower()=='a' or t.lower()=='e' or t.lower()=='i' or t.lower()=='u'):
            string.replace(t, " ")
        print "test"
    print string
    return string

要替换元音字符,您不能替换现有变量,因为python中的字符串是不可变的。你可以试试这个

def anti_vowel(string):
    for t in string:
        if(t.lower()=='a' or t.lower()=='e' or t.lower()=='i' or t.lower()=='u'):
            string=string.replace(t, " ")
        print "test"
    print string
    return string