user74283 - 8 months ago 28
Python Question

# Letter Count on a string

Python newb here. I m trying to count the number of letter "a"s in a given string. Code is below. It keeps returning 1 instead 3 in string "banana". Any input appreciated.

``````def count_letters(word, char):
count = 0
while count <= len(word):
for char in word:
if char == word[count]:
count += 1
return count

print count_letters('banana','a')
``````

The other answers show what's wrong with your code. But there's also a built-in way to do this, if you weren't just doing this for an exercise:

``````>>> 'banana'.count('a')
3
``````

Danben gave this corrected version:

``````def count_letters(word, char):
count = 0
for c in word:
if char == c:
count += 1
return count
``````

Here are some other ways to do it, hopefully they will teach you more about Python!

Similar, but shorter `for` loop. Exploits the fact that booleans can turn into 1 if true and 0 if false:

``````def count_letters(word, char):
count = 0
for c in word:
count += (char == c)
return count
``````

Short for loops can generally be turned into list/generator comprehensions. This creates a list of integers corresponding to each letter, with 0 if the letter doesn't match `char` and 1 if it does, and then sums them:

``````def count_letters(word, char):
return sum(char == c for c in word)
``````

The next one filters out all the characters that don't match `char`, and counts how many are left:

``````def count_letters(word, char):
return len([c for c in word if c == char])
``````
Source (Stackoverflow)