Seite 1 von 1
Schleifenproblem
Verfasst: Donnerstag 6. März 2008, 19:07
von breathe_easy
Hallo,
ich möchte zwei Strings miteinander vergleichen, so daß geschaut wird ob der index 0 des ersten Strings im zweiten irgendwo vorkommt und dann der index 1 usw. Ich habe das mit folgenden Schleifen versucht aber die Schleife mit j läuft nicht komplett mit index 0 von eingabe durch woran liegt das? Ich hoffe das Ganze ist verständlich formuliert. Ist die Einrückung falsch?
Code: Alles auswählen
for i in range (0,len(eingabe)):
a = eingabe[i]
print a
for j in range (0, len(zu_raten)):
b = zu_raten[j]
print b
if a == b:
print a, " ist enthalten"
if i == j:
print "und an der richtigen Stelle"
Verfasst: Donnerstag 6. März 2008, 19:15
von Hyperion
Code: Alles auswählen
>>> a="Hallo Welt"
>>> b="Ein langer Satz in dem sicherlich viele Buchstaben gleich sind"
>>> for i in a:
... if i in b:
... print True, i
...
True a
True l
True l
True
True e
True l
True t
Verfasst: Donnerstag 6. März 2008, 19:22
von audax
Warum so kompliziert?
Code: Alles auswählen
foo = 'Foobar'
bar = 'bar'
for count, c in enumerate(bar):
if c in foo:
print "Juchei! %s ist in %s enthalten!" %(c, foo)
if count == foo.index(c):
print "Wow! Und auch an der gleichen Stelle wie in %s" % foo
Verfasst: Donnerstag 6. März 2008, 20:00
von breathe_easy
o.k. das sieht natürlich alles viel eleganter aus. Trotzdem wäre ich dankbar, wenn mir jemand sagen würde warum meine Version nicht so durchläuft wie geplant. Mit anderen Worten was muss ich tun, um den Programmfluß zu verändern, damit die innere Schleife zuerst durchläuft und erst dann die Äußere weitergeführt wird. Mit anderen Worten ich habe ein Grundsatzproblem. Trotzdem vielen Dank für eure Mühe und schnelle Antwort.
Verfasst: Donnerstag 6. März 2008, 20:04
von Hyperion
Das mit der gleichen Stelle hat er ja nicht erwähnt ... aber du hast da imho nen Fehler drin:
Sonst macht es gar keinen Sinn!
Davon abgesehen teste das mal, wenn du statt bar="bar" mal bar="barbar" nimmst!
Also imho besser so:
Code: Alles auswählen
for count, c in enumerate(bar):
if c in foo:
print "Juchei! %s ist in %s enthalten!" %(c, foo)
if c == bar[count]:
print "Wow! Und auch an der gleichen Stelle wie in %s" % foo
Verfasst: Donnerstag 6. März 2008, 20:10
von Hyperion
@breathe_easy: Dein Script läuft doch durch! Oder aber ich sehe das Problem nicht!
Das einzige was passieren kann ist doch, dass es mehr als eine Übereinstimmung geben kann (eben weil du den 2. String ja immer komplett durchgehst!) Da müßteste dann nen break einbauen nach einem Treffer - wenn Du diesen Code wirklich so behalten willst
Ansonsten läuft das bei mir korrekt durch.
Verfasst: Donnerstag 6. März 2008, 20:30
von numerix
breathe_easy hat geschrieben:o.k. das sieht natürlich alles viel eleganter aus. Trotzdem wäre ich dankbar, wenn mir jemand sagen würde warum meine Version nicht so durchläuft wie geplant. Mit anderen Worten was muss ich tun, um den Programmfluß zu verändern, damit die innere Schleife zuerst durchläuft und erst dann die Äußere weitergeführt wird. Mit anderen Worten ich habe ein Grundsatzproblem.
Ich glaube, sogar mehr als eins ...
Wie Hyperion schon angemerkt hat, dein Programm sollte das machen, was du möchtest. An dem Programmausschnitt, den du uns zeigst, kann es nicht liegen. Gib dochmal konkret die Zeichenketten an, mit denen du es laufen lässt und meinst, dass es nicht funktioniert.
In jedem Fall wäre es nicht verkehrt, wenn du dir die von Hyperion vorgeschlagene Lösung nochmal ansehen würdest. Die sieht nicht nur "viel eleganter" aus, sie ist auch nicht besonders kompliziert. Und den Aspekt mit "an der richtigen Stelle" - falls das wichtig ist - könntest du z.B. über die String-Methode index() ergänzen.
Und wenn du - warum auch immer - bei deiner Struktur bleiben willst, dann solltest du zumindest etwas an der Ausgabe arbeiten. So bekommt man alles untereinander und es ist sehr unübersichtlich. Und: Bei range(a,b) brauchst du a nicht, wenn a=0 ist.
Verfasst: Freitag 7. März 2008, 10:24
von breathe_easy
Hey danke für euren Support! Ich habe gestern einen Fehler beim Check gemacht und gedacht es sei etwas falsch aber die Schleifen laufen natürlich durch. Gerne werde ich die von Hyperion vorgeschlagene Lösung annehmen!
Sie ist toll. Als Anfänger ist es manchmal schwierig aus den eigenen Denkstrukturen auszubrechen und sich in die Anderer hinein zu versetzen.