Как уже упоминалось, вы можете реализовать тест с помощью простого word.count('e')
.Если вы не делаете это как простое упражнение, это гораздо лучше, чем пытаться заново изобрести колесо.
Проблема с вашим кодом состоит в том, что он подсчитывает последний символ дважды, потому что вы тестируете индексконец, который в 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