我的代码应识别元音字母并使用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
答案 0 :(得分:6)
您只在<{1}}中放置最后替换结果。您之前的所有newstr
结果都将被丢弃。
对于您的输入文字str.replace()
,遇到的最后一个元音是Hey look Words!
,因此只会替换o
。 o
替换确实发生并存储在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
但是还有其他所有内容。