计算元音字母

6

请问有人能告诉我这个脚本有什么问题吗?我是 Python 新手,但似乎找不出导致它无法运行的原因。

def find_vowels(sentence):

    """
    >>> find_vowels(test)
    1

    """

    count = 0
    vowels = "aeiuoAEIOU"
    for letter in sentence:
        if letter in vowels:
            count += 1
    print count

if __name__ == '__main__':
    import doctest
    doctest.testmod()

3
好的,首先,你忘了“你”。 - Michael Mrozek
没有太关注。你是对的。 - shaytac
你的缩进看起来有点不对劲。在你的源文件中是一样的吗? - Uri
是的,从Eclipse/PyDev IDE复制的。 - shaytac
1
@gnibbler 当我们在确定代码中是否存在问题时,改变缩进可能不是最好的想法。 - Michael Mrozek
7个回答

8

您正在打印count(一个数字),但您的测试期望字母e

此外,更符合Python风格的计算元音字母的方式是使用列表推导式

>>> len([letter for letter in 'test' if letter in vowels])
1

想要查看您找到的元音字母吗?只需删除前面的len函数即可:

>>> [letter for letter in 'stackoverflow' if letter in vowels]
['a', 'o', 'e', 'o']

构建一个元音字母列表仅仅为了计数并不符合“Pythonic”的风格...考虑使用sum(letter in vowels for letter in test),其中vowels应该是一个集合而不是列表。 - John Machin
@John:计数方面你说得有道理,但我不同意使用集合。根据我们所知的规范(什么都不知道),find_vowels('wheel')应该返回'e'还是['e', 'e']?我假设它是后者。 - Mark Rushakoff
1
我的意思是“元音应该是一个集合,而不是序列”,即set("aeiouAEIOU")而不是"aeiouAEIOU"...变量'vowels'用于检查计数函数和“find”函数的输入(即letter in vowels),与“find”函数的输出无关。 - John Machin

6
除了你返回计数但期望元音字母的字符串之外,正如其他人所说,你还必须更改该行。
>>> find_vowels(test)

为了

>>> find_vowels('test')

你忘记加引号了!


1
然后你可以考虑接受它(通过点击问题左上方大数字下面的勾号图标),一旦你获得了接受带来的额外声望(使你达到能够顶级赞的门槛),就可以进行顶级赞(点击上述大数字上方的三角形)。基本的SO礼仪:感谢是好的,但接受和顶级赞才是SO持续运转的关键!-) - Alex Martelli

1

你的测试期望函数打印它找到的元音字母,但你却打印了计数。你还将变量test传递给它,而不是字符串'test',你需要这样做:

>>> find_vowels('test')

最后,缩进已经消失了,但我认为这是一个粘贴的问题。


1
def count_vowels(word):
'''
str->(number)
returns the number of vowels used
count_vowels('ramesh')
>>>2
count_vowels('sindhu')
>>>2
'''

vowels=list('a,e,i,o,u')
return vowels.count(word)

0

这个解决方案非常干净,对于大字符串比已经发布的解决方案更有效率;所有的努力都在构建计数器对象的 C 循环中进行。

from collections import Counter
vowels = "aeiuoAEIOU"

def count_vowels(txt):
    c = Counter(txt)
    return sum(c[v] for v in vowels)

print count_vowels('testing')

0

你需要缩进 find_vowels 函数的主体部分。


0
为什么不使用 str.count() 呢? 例如: s='heeello world' print str.count(s,'e') 输出结果为 3。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接