Как отмечают другие, вы можете осуществить проверку с помощью простого 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
Когда буквы == 0, что произойдет? Почему вы тестируете 'while letters> = 0'? Можете ли вы объяснить, почему ** вы это делаете? Объяснение было бы полезно. –