在python调试中计算单词中的字母

Joh*_*nny 4 python letter count

我试图计算'e'出现在单词中的次数.

def has_no_e(word):     #counts 'e's in a word
    letters = len(word)
    count = 0
    while letters >= 0:
        if word[letters-1] == 'e':
            count = count + 1
        letters = letters - 1
    print count
Run Code Online (Sandbox Code Playgroud)

它似乎工作正常,除非单词以'e'结尾.它将计算两次'e'.我不知道为什么.有帮助吗?

我知道我的代码可能很草率,我是初学者!我只想弄清楚正在发生的事情背后的逻辑.

use*_*312 12

>>> word = 'eeeooooohoooooeee'
>>> word.count('e')
6
Run Code Online (Sandbox Code Playgroud)

为什么不呢?


mar*_*cog 11

正如其他人所提到的,您可以通过简单的方式实现测试word.count('e').除非你把它作为一个简单的练习,否则这比试图重新发明轮子要好得多.

您的代码的问题在于它将最后一个字符计算两次,因为您-1在末尾测试索引,在Python中返回字符串中的最后一个字符.通过更改while letters >= 0为修复它while letters > 0.

还有其他方法可以整理你的代码(假设这是一个学习练习):

  • Python提供了一种使用for循环迭代字符串的好方法.这比使用while循环和维护自己的计数器变量更简洁,更容易阅读.正如您在此处所看到的,添加复杂性会导致错误.把事情简单化.
  • 大多数语言都提供了一个+=运算符,对于整数,它将数量添加到变量中.它比...更简洁count = count + 1.
  • 使用参数定义您计算的字符以使其更灵活.char='e'当您有明显的默认值时,在参数列表中定义使用的默认参数.
  • 为该功能选择一个更合适的名称.该名称has_no_e()使读者认为代码检查代码是否没有e,但它实际上做的是计算e的出现次数.

把这一切放在一起我们得到:

def count_letter(word, char='e'):
    count = 0
    for c in word:
        if c == char:
            count += 1
    return count
Run Code Online (Sandbox Code Playgroud)

一些测试:

>>> count_letter('tee')
2
>>> count_letter('tee', 't')
1
>>> count_letter('tee', 'f')
0
>>> count_letter('wh' + 'e'*100)
100
Run Code Online (Sandbox Code Playgroud)