Was haltet ihr von diesem Weg um ein Wort in einem String zu suchen?
Ich habe das mal so programmiert.
String = " Hai"
len(String)
i = 0
state = 0
while i < len(String) :
if String[i].isspace() and state == 0:
i = i +1
print ("whitespace")
if String[i].isspace() == False and state == 0:
state = 1
if String[i] == "H" and state == 1:
print("H found")
state = 2
i = i +1
if String[i] == "a" and state == 2:
print ("a gefunden")
state = 3
i = i +1
if String[i] == "i" and state == 3:
print("i")
state = 4
if state == 4:
print ("Hai gefundem")
break
6 Antworten
Erst einmal sollte es am Ende wohl eher "Hai gefunden" statt "Hai gefundem" lauten.
Und warum springst du zwischen Englisch ("H found"), Deutsch ("a gefunden") und Nichts ("i")?
============
Des Weiteren funktioniert dein Programm so nur für dein konkretes Beispiel. Was ist, wenn du nicht nur Whitespace davor hast, sondern vielleicht noch andere Wörter? Also beispielsweise...
Wenn man beispielsweise die erste Zeile deines Programms zu...
String = "Wo ist der Hai?"
... ändert, läuft deine while-Schleife ewig, ohne voranzukommen und „Hai“ zu finden.
Und was ist, wenn du ein anderes Wort suchen möchtest? Beispielsweise "Schifffahrt"? Dann müsstest du umständlich etliche Zeilen in deinem Code ändern/ergänzen.
Dein Code ist dementsprechend umständlich und wenig flexibel.
============
Wenn du nur prüfen möchtest, ob "Hai" als Substring enthalten ist, würde ich auf den in-Operator zurückgreifen...
String = " Hai"
if "Hai" in String:
print("Hai gefunden")
Wenn du die Position brauchst, kannst du die str.find()-Methode verwenden...
String = " Hai"
pos = String.find("Hai")
if pos == -1:
print("Hai nicht gefunden")
else:
print(f"Hai an Position {pos} in String gefunden")
Danke für die Ausführliche Antwort.
Ja ich kenne "in"
Aber ich wollte selbst einen Weg implementieren. Einfach für mich zur Übung. In der Berufsschule haben wir z.B in Java auch einen Sortieralgorithmus geschrieben. Einfach damit wir sowas besser verstehen.
Absoluter Unsinn. Zudem brauchst du unheimlich viele abfragen um längere Worte zu suchen
Deshalb kompletter Unsinn. Vor allem wenn es dafür schon fertige Befehle gibt die wesentlich flexibler sind
Ich weiß schon das es fertige Befehle gibt nur ist ja gerade das (nur für mich zum lernen ist kein Produktiver Code gott bewahre) was ich mal selbst schreiben möchte. In der Berufsschule haben wir z.B auch einen Sortieralgorithmus in Java geschrieben. Aber das war halt rein zu lernzwecken um das dahinter zu verstehen.
Ich kenn mich mit Python nicht aus aber das sieht merkwürdig aus.
Du gibt ja wirklich alles einzeln vor und gibst nicht mal Spielraum für Buchstabenwiederholungen.
Was wenn du das Wort Hai im String " HHai" suchen sollst oder im String "HAi" ? Schon klappt es nicht mehr.
Sinnvoller, wäre mMn:
- String und Suchwort per Tastatur entgegen nehmen, das macht es Dynamisch
- Nach dem Wort im ganzen zu suchen wenn du wirklich das Wort und nicht die Buchstaben finden willst.
- ggf Groß und Kleinschreibung ignorieren
Wenn du wirklich jeden Buchstaben suchen willst würde ich:
- beide über die Tastatur entgegen nehmen
- dann eben jeden Buchstaben im Suchwort einzeln ansprechen damit du keine festen Buchstaben hast und flexible länge
- Dynamisch durchlaufen indem du nach dem der erste buchstabe gefunden wurde bei beiden Suchwort und String hoch zählst, ansonsten nur im String
- Die Option einbauen das suchwort wieder von Vorne anzufangen wenn ein nachfolgender Buchstabe nicht passt, damit du bei "HHai" den Hai auch findest, aber nicht bei "Hawaii".
Nachtrag:
Das hier wäre jetzt mal gaaaanz ganz Rudimentär und wie gesagt Python ist nicht meine Sprache. Experten haben hier sicher noch wesentlich elegantere Vorschläge.
Aber es hat die einzelbuchstaben Vergleiche drinn die du wohl haben wolltest und erlaubt Flexiblen Text. Es erlaubt aber bisher nicht das ein Wort mehrfach erkannt wird, erlaubt keine Abweichung bei groß und kleinschreibung und nimmt die Wörter nicht flexibel entgegen.
String = " Dies ist ein Hawaii Hai"
String2= "Hai"
len(String)
i = 0
j=0
state = 0
while i < len(String) :
if j==len(String2):
print("Gefunden: ", String2)
break
elif String[i] == String2[j]:
print("Gefunden:", String2[j])
i= i+1
j= j+1
else:
i=i+1
j= 0
continue
Ganz komisch
Ich würde das gesuchte Wort nicht hardcoden, sondern eine kompakte dynamische Lösung bauen ...
Soweit ich weiß, kannst du es einfach so machen, wenn ich mich nicht irre:
if wort in text:
gefunden
else:
nicht gefunden
Ich weiß 😅. Der Sinn und ja das hätte ich erwähnen sollen ist mir das selbst beizubringen wie man z.B über einen text itteriert und dann durchprüft.
Dann mach es wenigstens Automatisch ... So fest verdrahtet ist nicht schön
Ja ich überlege gerade wie. Aber irgendwo muss man auch mal Anfangen.
def findStringInString(search, text):
found = False
count = 0
for letter in text:
if search[count] == letter:
found = True
else:
found == False
count = 0
if len(search) - 1 == count and found:
return True
count = count + 1
return False
Und das als nicht Python Entwickler 😅
Dankeschön 😅 ja bin halt nicht so gut im Programmieren. War ich schon in der Berufsschule nicht so sehr. In der Abschlussprüfung wusste ich zum Glück noch wie man gettr und settr macht. 😅
Im Gegensatz zu dir bin ich halt Fachinformaitker für Systemintegration 😅. Aber cool, dass du FAE werden möchtest
Ja und ist Hardgecoded bedeutet also ich müsste das für jedes Wort neu schreiben.