【问题标题】:Counting vowels数元音
【发布时间】:2010-05-28 02:52:10
【问题描述】:

谁能告诉我这个脚本有什么问题。我是一个 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()

【问题讨论】:

  • 好吧,一件事,你忘了'你'
  • 没太注意。你是对的
  • 你的列表对我来说似乎有点不对劲。它在您的源文件上看起来是否相同?
  • 是从 eclipse/pydev ide 复制的。
  • @gnibbler 在我们确定是否是他代码中的问题之一时更改缩进可能不是最好的主意

标签: python


【解决方案1】:

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

此外,更 Pythonic 的元音计数方法是 list comprehension

>>> 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']

【讨论】:

  • -1 建立一个元音列表只是为了计算它们不是“pythonic”......考虑sum(letter in vowels for letter in test) AND 元音应该是一个集合,而不是列表。
  • @John:计数的有效点,但我不同意使用集合。根据我们对规格的了解(无),find_vowels('wheel') 应该返回'e' 还是['e', 'e']?我以为是后者。
  • 我的意思是“元音应该是一个集合,而不是序列”,即 set("aeiouAEIOU") 不是 "aeiouAEIOU" ... vowels 用于检查两者的 INPUT (letter in vowels)计数功能和“查找”功能;这与“查找”功能的输出无关。
【解决方案2】:

除了你要返回一个计数但期待一串元音之外,正如其他人所说,你还必须更改行

>>> find_vowels(test)

>>> find_vowels('test')

你忘记了引号!

【讨论】:

  • 然后你可以考虑接受它(通过点击问题左上角大数字下方的复选标记图标)和(一旦你得到了来自接受的额外代表,这会让你在上面能够投票的阈值)投票(单击已经提到的大数字上方的三角形)。基本的 SO 礼仪:谢谢,一切都很好,但接受和赞成是 SO 的原因!-)
【解决方案3】:

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

>>> find_vowels('test')

最后,缩进关闭了,但我认为这是粘贴问题

【讨论】:

    【解决方案4】:
    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)
    

    【讨论】:

      【解决方案5】:

      您需要缩进 find_vowels 的正文。

      【讨论】:

        【解决方案6】:

        为什么不使用 str.count() 例如 s='heeello world'

        打印 str.count(s,'e') 3

        【讨论】:

          【解决方案7】:

          这个解决方案非常干净,比已经发布的大字符串解决方案更有效;艰苦的工作都发生在构造 Counter 对象的 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')
          

          【讨论】:

            猜你喜欢
            • 2015-01-05
            • 2018-07-26
            • 1970-01-01
            • 2020-03-24
            • 2013-08-09
            • 1970-01-01
            • 2011-05-05
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多