Seite 2 von 2

Re: String find und Position finden

Verfasst: Sonntag 25. März 2018, 17:22
von andreasp
Das mit der Unfallaufnahme hast du wohl falsch verstanden, das kann ich und wenn ich dir Stichworte gebe, kannst du es trotzdem nicht alleine, nur das wollte ich damit sagen.

Die Hälfte der Begriffe in deinem Programm lese ich heute das erste Mal und sind somit in dem Buch noch gar nicht aufgetaucht,
wie hätte ich das schaffen sollen?

Aber trotzdem danke für die Mühe und werde nun versuchen, deine Lösung anzuwenden.

Re: String find und Position finden

Verfasst: Sonntag 25. März 2018, 17:53
von Sirius3
@andreasp: beim Programmieren muß man lernen, wie ein Computer denkt. Das ist erstmal unabhängig von der Programmiersprache. Ein »gib die Position aus mit print« läßt sich dann einfach in »print(position)« umwandeln, und das hättest Du bestimmt hinbekommen. Dagegen ist ein »sucht bis zur letzten Position gibt diese aus und bricht dann ab« ist für einen Computer viel zu kompliziert und kann nicht einfach in Python übersetzt werden. Daher meine Frage, das besser zu strukturieren und dann ist der nächste Schritt, dem eigentlichen Programmieren einfach.

Was __deets__ geschrieben hat, ist dann schon (fast) die optimale Lösung, Die muß nicht gleich als Anfänger so aussehen. Aber dass da viel neues dabei ist, kann ich auch kaum glauben, außer Listen kommen in Deinem Buch in den ersten 100 Seiten nicht vor.

Re: String find und Position finden

Verfasst: Sonntag 25. März 2018, 18:02
von andreasp
Richtig, Listen wurden noch nicht besprochen,
vielleicht bin ich ja etwas einfach gestrickt,
aber Offset, needles, haystack.find z.B. sagen mir gar nichts.

Und bei aller Freundschaft, würde mich hier gerne einbringen und will auch keinen nerven,
aber mal eben zu behaupten, ich knoble/überlege nicht gerne und will nichts lernen,
ist bei einer ersten Frage, sagen wir mal etwas frech.

Re: String find und Position finden

Verfasst: Sonntag 25. März 2018, 18:06
von Sirius3
`offset`, `needles` und `haystack` sind alles Variablen, die aus dem Kontext klar werden sollten. Heuhaufen ist der große String, in dem alle Vorkommen gefunden werden sollen, Nadel ist nun der String, der gefunden werden soll, und Offset ist ein Offset.

Re: String find und Position finden

Verfasst: Sonntag 25. März 2018, 18:12
von andreasp
Habe ich auch gerade herausgefunden, aber das Ergebnis stimmt nicht. Es sind die Positionen 8 und 13 und nicht 9 und 14.

Re: String find und Position finden

Verfasst: Sonntag 25. März 2018, 18:15
von Sirius3
Das erste Zeichen hat die Position 0 und nicht 1.

Re: String find und Position finden

Verfasst: Sonntag 25. März 2018, 18:19
von andreasp
Ja richtig,
ich gebe mit print(offset) das Ergebnis aus und es wird 9 und 14 ausgegeben, aber es ist 8 und 13 laut Buch und mit zählen kommt man zum gleichen Ergebnis.

Re: String find und Position finden

Verfasst: Sonntag 25. März 2018, 18:21
von Sirius3
`offset` ist auch die Position, ab der das nächste mal gesucht werden soll, sieht man ja auch an `offset = pos + 1`.

Re: String find und Position finden

Verfasst: Sonntag 25. März 2018, 18:38
von andreasp
Ist auch soweit klar, sucht beim zweiten Durchlauf ab einer anderen Position, verstehe aber nicht, warum die Positionen falsch sind.
Und was bedeutet "positions= []" ?

Re: String find und Position finden

Verfasst: Sonntag 25. März 2018, 18:47
von Sirius3
Wenn Du noch nicht weißt, was Listen sind, dann wird Dir das noch erklärt werden. Und die Positionen in `pos` sind richtig.

Re: String find und Position finden

Verfasst: Sonntag 25. März 2018, 18:49
von __deets__
Ohne deine konkreten strings und Code zu kennen kann man nicht wissen was da falsch läuft. Mein Beispiel aber ganz bestimmt nicht, denn das find tut wie es tut. Das addiert nicht magisch ne eins drauf. Bist du sicher das du nicht Offset ausgibst?

Re: String find und Position finden

Verfasst: Sonntag 25. März 2018, 18:54
von andreasp
Also wird mit den [] eine Liste erstellt, ok, warte bis es im Buch kommt.
Aber wenn ich mit print(offset) die gesuchten Positionen ausgebe, wird 9 und 14 angeben und die sind falsch.
Wie du eben selber sagtest, die Positionen fangen mit 0 und nicht mit 1 an und mit 0 angefangen, sind es 8 und 13, genau wie im Buch angegeben.
Aber danke für deine Mühe und nochmals, will hier keinen nerven und bin für Hilfe dankbar.

Re: String find und Position finden

Verfasst: Sonntag 25. März 2018, 18:57
von __deets__
Du sollst ja auch pos ausgeben. Nicht Offset. Offset ist der Ort ab dem das nächste mal gesucht wird, und wenn das nicht um eins größer wäre, dann würde man ja endlos die gleiche Stelle finden....

Re: String find und Position finden

Verfasst: Sonntag 25. März 2018, 18:58
von andreasp
Oder muss ich print(pos) ausgeben um an die gesuchten Positionen zu erhalten?

Re: String find und Position finden

Verfasst: Sonntag 25. März 2018, 19:00
von andreasp
Ok, habe auch gerade die Fehler gefunden.
Jetzt sind alle Klarheiten beseitigt.
Danke und schönen Abend noch.

Re: String find und Position finden

Verfasst: Samstag 18. April 2020, 20:50
von viktor-did
@andreasp meine Antwort kommt etwas spät, jedoch ist es für die Anderen vielleicht hilfreich. Hier ein Beispielcode, wie du "find" in einer Schleife benutzen und die Positionen von "a" ausgeben kannst:

Code: Alles auswählen

x = "baabaaabaaaaab"

z = 0

for i in x:
    if i == "a":
        u = x.find("a", z)
        print(u)
    z+=1

Re: String find und Position finden

Verfasst: Samstag 18. April 2020, 22:18
von __blackjack__
@viktor-did: Da wird nicht `find()` benutzt. Du kannst da offensichtlich auch einfach ``u = z`` schreiben, denn `find()` sucht ja nicht wirklich wenn es immer so aufgerufen wird, das genau an dem Offset auch garantiert ein "a" steht. Und dann kann man sich das `u` auch sparen und einfach gleich `z` ausgeben.

Die Namen sind alle schlecht, aber `i` ist besonders schlecht gewählt. Bei einer Laufvariablen mit dem Namen `i` hat man ganze Zahlen. Hat man keine ganzen Zahlen, nennt man die ganz sicher nicht `i`. Jeder Programmierer erwartet da, fast unabhängig von der Programmiersprache, eine ganze Zahl.

Statt `z` vor der Schleife zu definieren und dann in der Schleife manuell hoch zu zählen, würde man die `enumerate()`-Funktion verwenden:

Code: Alles auswählen

text = "baabaaabaaaaab"

for index, character in enumerate(text):
    if character == "a":
        print(index)