1

我正在尝试使以下代码正常工作,它应该从用户输入的文本字符串中删除元音。

def isVowel(text):
    if text in ("a", "e", "i", "o", "u", "A", "E", "I", "O", "U"):
        return True

def withoutVowels(text):
    for char in text:
        if(isVowel == True):
            text = text.replace(char, "")
    return text

isVowel 函数工作正常,但是当我使用它时它似乎无法正确评估,这是为什么呢?

4

2 回答 2

11
if (isVowel == True):

应该

if isVowel(char):

isVowel是一个函数对象。isVowel == True永远是假的。


请注意,您也可以使用str.translate更快、更简单地执行此操作。

In [90]: 'Abracadabra'.translate(None, 'aeiouAEIOU')
Out[90]: 'brcdbr'

或者,(正如 EOL 指出的那样)使用正则表达式:

In [93]: import re
In [95]: re.sub(r'(?i)[aeiou]', '', 'Abracadabra')
Out[95]: 'brcdbr'

但是,str.translate在这种情况下更快:

In [94]: %timeit 'Abracadabra'.translate(None, 'aeiouAEIOU')
1000000 loops, best of 3: 316 ns per loop
In [96]: %timeit re.sub(r'(?i)[aeiou]', '', 'Abracadabra')
100000 loops, best of 3: 2.26 us per loop
于 2013-03-17T01:26:13.510 回答
1

您可以在一行中完成此操作,因为 Python 很棒:

def withoutVowels(text):
    return "".join(c for c in text if c not in "aeiouAEIOU")
于 2013-03-17T06:06:45.690 回答