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.
__deets__
User
Beiträge: 14529
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: 14529
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.
viktor-did
User
Beiträge: 1
Registriert: Samstag 18. April 2020, 20:23

@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
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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)
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten