Wie andere erwähnt, können Sie den Test mit einem einfachen word.count('e')
implementieren können. Wenn Sie dies nicht als einfache Übung machen, ist das viel besser als das Rad neu zu erfinden.
Das Problem mit Ihrem Code ist, dass es das letzte Zeichen zweimal zählt, weil Sie den Index -1
am Ende testen, die in Python das letzte Zeichen in der Zeichenfolge zurückgibt. Beheben Sie es, indem Sie while letters >= 0
zu while letters > 0
ändern.
Es gibt auch andere Möglichkeiten, wie Sie Ihren Code aufzuräumen können (vorausgesetzt, dies ist eine Übung in Lernen):
- Python bietet eine schöne Art und Weise über eine Reihe von Iterieren eine
for
Schleife. Dies ist viel prägnanter und einfacher zu lesen als mit einer while
Schleife und die eigene Zählervariable zu verwalten. Wie Sie bereits gesehen haben, führt das Hinzufügen von Komplexität zu Fehlern. Halte es einfach.
- Die meisten Sprachen bieten einen Operator
+=
, der für Ganzzahlen die Menge zu einer Variablen hinzufügt. Es ist prägnanter als count = count + 1
.
- Verwenden Sie einen Parameter, um zu definieren, welches Zeichen Sie zählen, um es flexibler zu machen. Definieren Sie ein Standardargument für die Verwendung von
char='e'
in der Parameterliste, wenn Sie einen offensichtlichen Standardwert haben.
- Wählen Sie einen passenderen Namen für die Funktion. Der Name
has_no_e()
lässt den Leser denken, dass der Code prüft, ob der Code kein e hat, aber was er tatsächlich tut, zählt das Vorkommen von e.
Putting all dies zusammen, erhalten wir:
def count_letter(word, char='e'):
count = 0
for c in word:
if c == char:
count += 1
return count
Einige Tests:
>>> count_letter('tee')
2
>>> count_letter('tee', 't')
1
>>> count_letter('tee', 'f')
0
>>> count_letter('wh' + 'e'*100)
100
Wenn Buchstaben == 0 was wird passieren? Warum testen Sie für 'while letters> = 0'? Kannst du mir erklären warum du das tust? Eine Erklärung wäre hilfreich. –