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

Guten Tag zusammen,
ich bin neu hier und Anfänger/Beginner in Python und lese gerade das Buch "Einstieg in Python".
Das Buch ist gut, habe aber trotzdem ein kleines Problem.
Auf Seite 104, falls einer das Buch hat, wird find() und rfind() beschrieben, um in einem String die Position von z.B. "ei" zu finden.
Alles kein Problem, erste, letzte oder auch nächste und es wird geschrieben, dass mit einer Schleife alle Positionen von "ei" ausgegeben werden können. Dafür gibt es aber keine weitere Erklärung und ich bekommen es nicht hin. Vermutlich total einfach, aber bin halt Anfänger.
Vielleicht kann es mir einer zeigen oder zumindest den Weg weisen.
Dank im Voraus und schönes WE
Andreas P.
__deets__
User
Beiträge: 14541
Registriert: Mittwoch 14. Oktober 2015, 14:29

Schau dir mal genau an, was find für Argumente bekommt. Beim zweiten wirst du überrascht sein!
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@andreasp: welche Schleifenarten kennst Du? Wie kann man das erste, zweite, n+1 Vorkommen von "ei" in einem String finden?
andreasp
User
Beiträge: 16
Registriert: Donnerstag 22. März 2018, 20:11

Sirius3 hat geschrieben:@andreasp: welche Schleifenarten kennst Du? Wie kann man das erste, zweite, n+1 Vorkommen von "ei" in einem String finden?
Hallo,
folge dem Buch und kenne while und for Schleifen.#Beispiel
test = "Das ist ein Beispielsatz"
print("Text:", test)

#Anzahl Suchtexte

such = "ei"
anz = test.count(such)
print("count: Der String", such, "kommt", anz, "Mal vor")

#erste Position des Suchtextes
anfpos = test.find(such)
print("find 1: Zum ersten Mal an Position:", anfpos)

# weiter Position des Suchtextes
nextpos = test.find(such, anfpos + 1)
print("find 2: Ein weiteres Mal an Position:", nextpos)

# letzte Position des Suchtextes
endpos = test.rfind(such)
print(" rfind: Zum letzten Mal an Position:", endpos)

Und jetzt das ganze in einer Schleife, in der alle Positionen nacheinander ausgegeben werden.

VG
__deets__
User
Beiträge: 14541
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na wenn du schon for und while kennst - welche von den beiden ist denn die geeignetere? Und warum?
andreasp
User
Beiträge: 16
Registriert: Donnerstag 22. März 2018, 20:11

__deets__ hat geschrieben:Na wenn du schon for und while kennst - welche von den beiden ist denn die geeignetere? Und warum?
Wie gesagt, bekomme es nicht hin.
Würde sagen, die while Schleife,
solange eine neue Position gefunden wird, Schleife ausführen.
Konnte es aber nicht in die Tat umsetzen.
__deets__
User
Beiträge: 14541
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was ist denn das Kriterium dafür, das die while Schleife nicht mehr weiter laufen soll? Was liefert dir find unter welchen Umständen zurück, und wie kannst du das für dich nutzen?
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@andreasp: was fehlt Dir noch, um das wiederholte Suchen der nächsten Position in eine Schleife umzusetzen?

Schleifen funktionieren immer nach dem selben Prinzip

Code: Alles auswählen

variable = irgendein_startwert
while bedingung_an_variable_wahr:
    tu_irgendwas_das_die_variable_ändert
    variable = neuer_wert
Was ist die variable? Was ist der Start? Was die Bedingung? Was ist der neue Wert der Variable?
andreasp
User
Beiträge: 16
Registriert: Donnerstag 22. März 2018, 20:11

Sirius3 hat geschrieben:@andreasp: was fehlt Dir noch, um das wiederholte Suchen der nächsten Position in eine Schleife umzusetzen?

Schleifen funktionieren immer nach dem selben Prinzip

Code: Alles auswählen

variable = irgendein_startwert
while bedingung_an_variable_wahr:
    tu_irgendwas_das_die_variable_ändert
    variable = neuer_wert
Was ist die variable? Was ist der Start? Was die Bedingung? Was ist der neue Wert der Variable?

Tut mir leid, soweit bin ich wohl noch nicht. Kann ich nicht.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Die `variable` ist bei Deinem Problem die Position des Suchstrings. Undd ann kann man das Problem auf unterschiedliche Art und Weise angehen. Am Start der Schleife müßte z.B. variable die Position des ersten Vorkommens sein. Innerhalb der Schleife dann das Suchen des nächsten Vorkommens.
andreasp
User
Beiträge: 16
Registriert: Donnerstag 22. März 2018, 20:11

Aber ich kann es einfach nicht.
Bin Anfänger und auf Seite 105 des Buches und musste bislang nur die vorgegebenen Übungen meistern.
Dann stand dort als Hinweis, man kann es mit einer Schleife machen und mehr nicht.
Das habe ich versucht, kann es aber nicht, schade.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@andreasp: wie viele Schleifen hast Du denn schon programmiert?
andreasp
User
Beiträge: 16
Registriert: Donnerstag 22. März 2018, 20:11

Was in dem Buch bislang besprochen wurde.
Da wurden die for und die while Schleifen angesprochen und mit Beispielen gezeigt, dann gab es die eine oder andere Übung dazu.
Die waren auch schlüssig und zu lösen.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Buch und Übungen sind ja nicht dafür da, dass du alles schon können sollst, sondern es lernen kannst. Auf einer der vorhergehenden 104 Seiten sind bestimmt schon die Schleifen vorgestellt worden. Davon ist die while-Schleife geeignet. Schau dir die noch einmal an. Und dann, was 'find' als Parameter erwartet und als Resultat liefert. Damit solltest du die Aufgabe gelöst bekommen.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Dann versuch mal, mit eigenen Worten zu erklären, wie eine Schleife funktioniert und wie Dein Problem zu lösen ist.
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: 14541
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
Antworten