String find und Position finden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
andreasp
User
Beiträge: 16
Registriert: Donnerstag 22. März 2018, 20:11

-die Schleife sucht nach der 1. Position "ei",
-gibt die Position aus mit print
-sucht nach der nächsten Position von "ei"
-gibt diese aus mit print
- sucht bis zur letzten Position gibt diese aus und bricht dann ab

so eigentlich ganz einfach, bekomme es nur nicht umgesetzt
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Zur Beschreibung fehlt noch die genaue Struktur. 1. der Startwert, 2. die Abbruchbedingung, dann das was in der Schleife passiert und zum Schluss der Sprung zur der Zeile, wo der nächste Schleifendurchgang stattfindet. Versuch dann jeden einzelnen Schritt in Python auszudrücken.
Zuletzt geändert von Sirius3 am Sonntag 25. März 2018, 16:45, insgesamt 1-mal geändert.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Nein, eine Schleife sucht nichts. Sondern führt Code wiederholt aus. Bis eine Abbruchbedingung erreicht ist.
andreasp
User
Beiträge: 16
Registriert: Donnerstag 22. März 2018, 20:11

Habe es doch jetzt schon öfter gesagt, ich kann es nicht in Python ausdrücken, sonst würde ich ja nicht fragen.
Vielleicht einfach mal die Lösung, mit der ich mich dann an einer neuen Aufgabe versuchen kann?

Vielleicht ein blödes Beispiel, aber ich könnte dir Stichworte geben, um einen tödlichen Verkehrsunfall aufzunehmen, deshalb könntest du es aber in der Praxis trotzdem nicht.

ich weiß theoretisch auch, was die Schleife machen muss, kann es aber nicht umsetzen.
__deets__
User
Beiträge: 14540
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wir haben dir diverse Hilfestellungen gegeben, um dein Problem gedanklich so zu durchdringen, dass du es lösen kannst. Wenn wir dir das einfach programmieren, dann lernst du nix. Genausowenig wenn du immer jemand anders bittest, deine Unfallaufnahme zu machen - dann kannst du es auch nicht selbst.

Aber da du offensichtlich nicht willens bist, daran wirklich rumzuknobeln...

Code: Alles auswählen

positions = []
offset = 0
while True:
       pos = haystack.find(needle, offset)
       if pos == -1:
            break
       positions.append(pos)
       offset = pos + 1
andreasp
User
Beiträge: 16
Registriert: Donnerstag 22. März 2018, 20:11

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.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
andreasp
User
Beiträge: 16
Registriert: Donnerstag 22. März 2018, 20:11

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.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

`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.
andreasp
User
Beiträge: 16
Registriert: Donnerstag 22. März 2018, 20:11

Habe ich auch gerade herausgefunden, aber das Ergebnis stimmt nicht. Es sind die Positionen 8 und 13 und nicht 9 und 14.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Das erste Zeichen hat die Position 0 und nicht 1.
andreasp
User
Beiträge: 16
Registriert: Donnerstag 22. März 2018, 20:11

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.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

`offset` ist auch die Position, ab der das nächste mal gesucht werden soll, sieht man ja auch an `offset = pos + 1`.
andreasp
User
Beiträge: 16
Registriert: Donnerstag 22. März 2018, 20:11

Ist auch soweit klar, sucht beim zweiten Durchlauf ab einer anderen Position, verstehe aber nicht, warum die Positionen falsch sind.
Und was bedeutet "positions= []" ?
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Du noch nicht weißt, was Listen sind, dann wird Dir das noch erklärt werden. Und die Positionen in `pos` sind richtig.
__deets__
User
Beiträge: 14540
Registriert: Mittwoch 14. Oktober 2015, 14:29

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?
andreasp
User
Beiträge: 16
Registriert: Donnerstag 22. März 2018, 20:11

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.
__deets__
User
Beiträge: 14540
Registriert: Mittwoch 14. Oktober 2015, 14:29

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....
andreasp
User
Beiträge: 16
Registriert: Donnerstag 22. März 2018, 20:11

Oder muss ich print(pos) ausgeben um an die gesuchten Positionen zu erhalten?
andreasp
User
Beiträge: 16
Registriert: Donnerstag 22. März 2018, 20:11

Ok, habe auch gerade die Fehler gefunden.
Jetzt sind alle Klarheiten beseitigt.
Danke und schönen Abend noch.
Antworten