Zählen von Buchstaben in einem Wort in python-debug -
Ich versuche zu zählen, wie oft " e " wird in einem Wort.
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
Es scheint zu funktionieren, außer wenn das Wort endet mit einem 'e'. Es zählt das 'e' zweimal. Ich habe keine Ahnung, warum. Keine Hilfe?
Ich weiß mein code ist vielleicht schlampig bin, bin ich ein Anfänger!!! Ich versuche nur, um herauszufinden, die Logik hinter dem, was geschieht.
Wenn Briefe == 0 was wird dann passieren? Warum testen Sie für
while letters >= 0
? Können Sie erklären, warum Sie dies tun? Eine Erklärung wäre hilfreich.InformationsquelleAutor Johnny | 2010-12-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als andere erwähnen, die Sie implementieren können, der test mit einem einfachen
word.count('e')
. Es sei denn, Sie tun dies als eine einfache übung, diese ist weit besser als zu versuchen das Rad neu zu erfinden.Das problem mit deinem code ist, dass es zählt das Letzte Zeichen zweimal, weil Sie den Test-index
-1
am Ende, die in Python gibt das Letzte Zeichen in der Zeichenfolge. Fixieren Sie es, indem Siewhile letters >= 0
zuwhile letters > 0
.Gibt es andere Möglichkeiten, wie Sie können, Räumen Sie Ihren code (vorausgesetzt, dies ist eine übung im lernen):
for
Schleife. Das ist weit übersichtlicher und einfacher zu Lesen als mit einemwhile
Schleife und die Pflege der eigenen counter-variable. Wie Sie bereits gesehen haben hier, hinzufügen von Komplexität führt zu Fehlern. Halten Sie es einfach.+=
- operator, welcher für ganze zahlen addiert den Betrag einer Variablen. Es ist präziser alscount = count + 1
.char='e'
in der Liste der parameter, wenn Sie einen offensichtlichen Standardwert.has_no_e()
lässt den Leser denken, der code überprüft, um zu sehen, ob der code hat keine e -, aber was es tatsächlich ist, zählt die vorkommen von e.Umsetzung dieses alle zusammen, erhalten wir:
Einige tests:
InformationsquelleAutor marcog
Warum nicht?
InformationsquelleAutor user225312
Warum nicht einfach
InformationsquelleAutor Tim Pietzcker
Das problem ist, dass der Letzte Wert von "Buchstaben" in Ihrer iteration "0", und wenn dies geschieht, schauen Sie auf:
Bedeutung, betrachten Sie word[-1], welches in python bedeutet "letzter Buchstabe des Wortes".
du bist also tatsächlich zählen richtig, und das hinzufügen von einem "bonus", wenn der Letzte Buchstabe ist ein 'e'.
InformationsquelleAutor Yonatan
Wird es doppelt, wenn die Endung mit einem e, weil Sie Dekrement
letters
einmal zu oft (weil Sie loop währendletters >= 0
und Sie sollten looping, währendletters > 0
). Wennletters
null erreicht-Sie überprüfenword[letters-1]
==word[-1]
das entspricht dem letzten Buchstaben im Wort.InformationsquelleAutor Klaus Byskov Pedersen
Viele der vorgeschlagenen Lösungen funktioniert.
Wissen, dass in Python, list[-1] wird wieder das Letzte element der Liste.
So, in Ihrer ursprünglichen code, wenn Sie verweisenden Wort[Zeichen-1] in einer while-Schleife eingeschränkt, durch Briefe >= 0, Sie zählen würde das 'e' am Ende des Wortes zweimal (einmal, wenn die Buchstaben wurde die Länge-1 und ein zweites mal, wenn die Buchstaben 0 war).
Zum Beispiel, wenn mein Wort war "Pete" Ihre trace-code würde wie folgt Aussehen (wenn Sie ausgedruckt Wort[Brief] - each-Schleife.
e (für word[3])
t (für word[2])
e (für Wort[1])
P (Wort[0])
e (für word[-1])
Hoffe, das hilft, die Sache aufzuklären und zu zeigen, eine interessante, kleine Macke über Python.
InformationsquelleAutor sjberry
@marcog macht einige ausgezeichnete Punkte;
in der Zwischenzeit können Sie tun, einfache debugging durch einfügen von print-Anweisungen -
dann
gibt
aus denen Sie sehen können, dass
InformationsquelleAutor Hugh Bothwell
Wenn das, was Sie wirklich wollen, ist 'has_no_e", dann die folgenden können geeigneter sein, als das zählen der 'e' s und dann später die Prüfung für null,
Wenn Sie überprüfen möchten, es gibt auch keine " E ' s entweder,
InformationsquelleAutor aid
Sie nicht haben, um eine while-Schleife. Zeichenketten können verwendet werden for-Schleifen in Python.
oder etwas einfacher:
InformationsquelleAutor Nope