Was haltet ihr von diesem Weg um ein Wort in einem String zu suchen?

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")
David2002D 
Fragesteller
 20.09.2022, 19:46

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.

2

Absoluter Unsinn. Zudem brauchst du unheimlich viele abfragen um längere Worte zu suchen

David2002D 
Fragesteller
 20.09.2022, 19:33

Ja und ist Hardgecoded bedeutet also ich müsste das für jedes Wort neu schreiben.

0
DodgeRT  20.09.2022, 19:35
@David2002D

Deshalb kompletter Unsinn. Vor allem wenn es dafür schon fertige Befehle gibt die wesentlich flexibler sind

1
David2002D 
Fragesteller
 20.09.2022, 19:39
@DodgeRT

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.

0
David2002D 
Fragesteller
 20.09.2022, 19:48
@DodgeRT

Ich versuchs ja schon 😅. Habe eine Idee

0

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".
dieLuka  20.09.2022, 20:11

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
0

Ganz komisch

Ich würde das gesuchte Wort nicht hardcoden, sondern eine kompakte dynamische Lösung bauen ...

Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf

Soweit ich weiß, kannst du es einfach so machen, wenn ich mich nicht irre:

if wort in text:
  gefunden
else:
  nicht gefunden
David2002D 
Fragesteller
 20.09.2022, 19:39

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.

0
FaTech  20.09.2022, 19:41
@David2002D

Dann mach es wenigstens Automatisch ... So fest verdrahtet ist nicht schön

0
David2002D 
Fragesteller
 20.09.2022, 19:42
@FaTech

Ja ich überlege gerade wie. Aber irgendwo muss man auch mal Anfangen.

0
FaTech  20.09.2022, 19:55
@David2002D
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 😅

0
David2002D 
Fragesteller
 20.09.2022, 19:56
@FaTech

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. 😅

1
David2002D 
Fragesteller
 20.09.2022, 20:14
@FaTech

Im Gegensatz zu dir bin ich halt Fachinformaitker für Systemintegration 😅. Aber cool, dass du FAE werden möchtest

0