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.
还有其他方法可以整理你的代码(假设这是一个学习练习):
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)