正如其他人提到的,您可以使用简单的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
一些测试:
>>> count_letter('tee')
2
>>> count_letter('tee', 't')
1
>>> count_letter('tee', 'f')
0
>>> count_letter('wh' + 'e'*100)
100