Brief Count on a string
Python newb hier. Ich m versuchen, um die Anzahl der Buchstaben "a"s in einem gegebenen string. Code ist unten. Es hält Rückkehr 1 statt 3 in den string "Banane". Jede Eingabe wird geschätzt.
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')
Ich denke, dein code war richtig eingezogen. Sie würde bekommen haben eine Einbuchtung Fehler.
InformationsquelleAutor shaytac | 2010-05-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die anderen Antworten zeigen, was falsch mit Ihrem code. Aber es gibt auch eine integrierte Möglichkeit, dies zu tun, wenn Sie nicht nur tun dies für eine übung:
Danben gab diese korrigierte version:
Hier sind einige andere Möglichkeiten, es zu tun, der Sie hoffentlich lernen Sie mehr über Python!
Ähnlich, aber kürzer
for
Schleife. Nutzt die Tatsache, dass Boolesche Werte können wiederum in 1, wenn wahr und 0 wenn falsch:Kurze for-Schleifen können in der Regel verwandelt sich in Liste/generator Verstehens. Dies erzeugt eine Liste von Ganzzahlen, die den entsprechenden Buchstaben, mit 0, falls der Brief nicht mit
char
1, wenn es tut, und dann Summen Sie:Den nächsten filtert alle Zeichen, die nicht übereinstimmen
char
, und zählt, wie viele sind noch übrig:Sie brauchen nicht
int()
um boolean-Wert in Python:True == 1 and False == 0
ideone.com/k4QLc ideone.com/5dHkKSebastian: sehr interessant! nie wusste, dass. bearbeitet, um widerzuspiegeln, dass
Hier ist eine andere Variante
sum(1 for x in iterable if x == value)
. Es kann nützlich sein, wenn die iterierbar hat keinecount()
Methode.Ich merke, dass die 'Banane'.count ("ana") gibt 1 zurück, anstatt 2 wie man erwarten könnte.
InformationsquelleAutor Claudiu
Ein problem ist, dass Sie mit
count
zu beziehen sich sowohl auf die position im Wort, das Sie überprüfen möchten, und die Anzahl derchar
Sie gesehen haben, und Sie sind mitchar
zu beziehen sich sowohl auf die input-Charakter, das Sie prüfen, und das aktuelle Zeichen in der Zeichenkette. Verwenden Sie separate Variablen statt.Auch, bewegen Sie den
return
- Anweisung außerhalb der Schleife, sonst werden Sie immer wieder nach dem prüfen der ersten Zeichen.Schließlich, Sie benötigen nur eine Schleife zur Iteration über die Schnur. Holen Sie sich befreien von den äußeren
while
Schleife und werden Sie nicht brauchen, um zu verfolgen die position in der Zeichenfolge.Nehmen diese Vorschläge, würde der code wie folgt Aussehen:
InformationsquelleAutor danben
Ein einfacher Weg ist wie folgt:
Oder gibt es eine andere Möglichkeit zählen jedes element direkt:
Natürlich, Sie können festlegen, dass ein element, z.B.
InformationsquelleAutor Wei
Ihre
return
ist in deiner for-Schleife! Seien Sie vorsichtig mit Senkung, die Sie wollen, dass die Liniereturn count
werden außerhalb der Schleife. Weil die for-Schleife geht durch alle Zeichen inword
die äußere while-Schleife ist völlig nicht benötigte.Eine bereinigte version:
InformationsquelleAutor Justin Ardini
Sehe ich ein paar Dinge falsch.
char
, so dass es zu Problemen führen.if char == word[count]
stattword[some index]
Brauchen Sie nicht einmal die
while
. Wenn Sie benennen Sie die char param zusearch
,InformationsquelleAutor Tesserex
Haben Sie eine Reihe von Problemen:
Dieser code behebt alle diese Fehler:
Sehr viel präziser Weise, dies zu schreiben, ist die Verwendung einer generator expression:
Oder nutzen Sie einfach die integrierte Methode zählen , bedeutet dies für Sie:
InformationsquelleAutor Mark Byers
Alternativ können Sie Folgendes verwenden:
InformationsquelleAutor joaquin
InformationsquelleAutor Johnny
InformationsquelleAutor python2.7.3
InformationsquelleAutor Omri Or
"banana".count("ana")
gibt 1 zurück, statt 2 !Ich denke, die Methode iteriert über die Zeichenfolge (oder die Liste) mit einem Schritt gleich der Länge des Teilstrings, so dass es nicht sehen, diese Art von Sachen.
Wenn Sie So wollen, eine "volle Zahl", die Sie implementieren müssen, um Ihre eigenen Zähler mit der richtigen Schleife von Schritt 1
Mich korrigieren, wenn ich falsch Liege...
InformationsquelleAutor Ben