replace()函数不会取代' e'字符

时间:2015-10-02 15:09:01

标签: python

我的代码应识别元音字母并使用replace()函数将其从输入字符串中删除。但是除'e'字母外,它的工作正常。

如果输入为"Hey look Words!",则输出为"Hey lk Wrds!"。 它确定了' e'只有当'#34;元音"字符串仅等于"e""eE"

我很想知道为什么?

def anti_vowel(text):
vowles="AaEeOoIiUu"
newstr=""
for i in text:
    if i in vowles:
        newstr=text.replace(i,"")

return newstr

3 个答案:

答案 0 :(得分:6)

您只在<{1}}中放置最后替换结果。您之前的所有newstr结果都将被丢弃。

对于您的输入文字str.replace(),遇到的最后一个元音是Hey look Words!,因此只会替换oo替换确实发生并存储在e中,但是当您将newstr设置为newstr替换的结果时,该值便被丢弃。因此,它取决于输入字符串究竟将保留替换的元音;对于句子o,它将是'The cat sat on the mat',因为这是您测试和替换的最后一个元音。

直接在a上循环并替换每个字符;保存到调用vowels,其中第一个参数不存在。将结果存储回str.replace() ,以便后续替换任何内容:

text

更好的是,使用str.translate() method一次性替换所有元音:

def anti_vowel(text):
    vowels = "AaEeOoIiUu"
    for vowel in vowels:
        text = text.replace(vowel, "")
    return text

# Python 2 version def anti_vowel(text): vowels = "AaEeOoIiUu" return text.translate(None, vowels) # Python 3 version def anti_vowel(text): vowels = str.maketrans(dict.fromkeys("AaEeOoIiUu")) return text.translate(vowels) 立即进行所有替换;该方法在Python 2 str.translate()和Python 3 str之间进行了更改,但在两个版本中,所有元音都会在构建新字符串时被忽略,而不会有任何其他循环。

答案 1 :(得分:1)

您应该将代码更改为:

def anti_vowel(text):
    vowles="AaEeOoIiUu"
    newstr=text
    for i in newstr:
        if i in vowles:
            newstr=newstr.replace(i,"")

    return newstr

然后,您将在最终字符串中填充每个替换。

你的工作方式总是使用原始字符串,并且在每次迭代中只替换一组字符(&#39; Ee&#39;,#39; Aa&#39;等...)。因此,最后,您会得到原始字符串中只替换其中一个组的结果。

答案 2 :(得分:1)

没有理由迭代这个词中的所有字母; replace()方法为您做到了这一点。而且你每次都在删除newstr,所以到目前为止,你所做的只是取代u。这就是你需要做的事情。

def anti_vowel(text):
    vowels = "AaEeIiOoUu"
    for i in vowels:
        text = text.replace(i, "")
    return text

这样,每次替换文本时,都会保存并保留替换后的字符串。您之前所做的是将newstr变为text而不A,然后将newstr替换为text sans a(但A }}), 等等等等。最终结果是text没有u但是还有其他所有内容。