Seite 1 von 1
"".join() richtig verwenden zum abgleichen mit einer Liste aus strings
Verfasst: Montag 5. Oktober 2020, 14:27
von Mr. R341
Der code ist ziemlich selbsterklärend.
Code: Alles auswählen
word_list = ["test", "jerk", "ban", "Hello"]
def censor(text, word):
split_text = text.split()
for words in split_text:
if words == " ".join(word_list).split():
return "yes"
else:
return "no"
print censor("Hello World, you're an jerk", word_list)
(wenn ihr irgendwelche Kommentare geben wollt dass Python 2 alt ist: lasse es einfach

)
Ich lerne gerade python und möchte -in Python 2- eine Funktion, die den eingegebenen String Wort für Wort abgleicht und wenn eines der Wörter in der Liste einem Wort im String entspricht das "yes" ausgegeben wird und wenn nicht, dass "no".
Ich weiß, das mein Fehler einzig und allein hier ist:
Wie wird (ausschließlich das) richtig geschrieben, damit mir das gewünschte ergebnis ausgegeben wird? Bitte mit Erklärung, da ich Einsteiger bin

Vielen Dank
Re: "".join() richtig verwenden zum abgleichen mit einer Liste aus strings
Verfasst: Montag 5. Oktober 2020, 15:39
von Sirius3
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht 2.
Was denkst Du bewirkt ein split nach einem join? Hast Du diesen Ausdruck mal im interaktiven Modus ausprobiert?
Ein String kann daher niemals gleich einer Liste sein. Du suchst eigentlich den in-Operator.
Die Funktion benutzt die globale Variable word_list, statt dem übergebenen Parameter `word`.
So wie die Funktion jetzt da steht, wird nur das erste Wort in text verglichen, da die for-Schleife gleich per `return` abgebrochen wird. Wie soll das Ergebnis eigentlich aussehen?
Re: "".join() richtig verwenden zum abgleichen mit einer Liste aus strings
Verfasst: Montag 5. Oktober 2020, 16:13
von /me
Es ist auch sehr unglücklich, dass die Liste mit Wörtern in der Funktion `word` heißt, während hingegen ein einzelnes Wort den Namen `words` bekommt.
Alles in allem sieht die Funktion nach einem Einsatzfall für
any aus.
Re: "".join() richtig verwenden zum abgleichen mit einer Liste aus strings
Verfasst: Dienstag 6. Oktober 2020, 14:22
von Mr. R341
Hi Sirius3 ^^ Scheinst hier ja ganz schön aktiv zu sein
Die Aufgabenstellung ist eine funktion zu definieren, die einen String (im späteren Verlauf durch raw_input) Wort für Wort "scant" und die einzelnen Wörter mit einer Liste abgleicht und wenn eines der Wörter im String in der Liste vorkommt, soll das Wort durch Sternchen ersetzt werden. Und ich scheitere daran die Wörter abzugleichen.
.split() soll zuerst den Vorgegebenen String auseinandernehmen. Bei
Code: Alles auswählen
for words in split_text:
if words == " ".join(word_list).split():
hab ich .split() drin, weil er mir sonst sonst ""test jerk ban Hello"" als einen String ausgibt anstatt jeden Eintrag in der Liste als eigenständigen String.
Im Moment möchte ich einfach, dass mir "Yes" ausgegeben wird, wenn eines der Wörter im String einem Wort in der Liste entspricht und "no", wenn dies eben nicht der Fall ist.
[EDIT:]
Ja, aber die gobale Variable "word" entspricht ja der word_list, da dieses Argument ja im print censor("String", word_list) definiert wird.
Tatsächlich steht es in der Aufgabenstellung, dass das die zwei Argumente in der Funktion -text- und -word- sein sollen...
Re: "".join() richtig verwenden zum abgleichen mit einer Liste aus strings
Verfasst: Dienstag 6. Oktober 2020, 14:37
von Jankie
Als Ursprung hast du einen Satz und eine Liste mit Wörtern die durch ein * ersetzt werden sollen.
Diesen Satz musst du aufteilen mit split(), dann iterierst du mit einer for-Schleife über diesen gesplitteten Satz. Du prüfst für jedes Wort in dem Satz (also für jedes Element in der Liste) ob dieses Wort in der Liste mit den Wörtern die ersetzt werden sollen ist.
Wenn das der Fall ist musst du herausfinden an welcher Stelle das Wort ist, an diese Stelle schreibst du dann ein *
Am Ende gibst du den Satz mit " ".join() wieder zusammengesetzt aus.
Re: "".join() richtig verwenden zum abgleichen mit einer Liste aus strings
Verfasst: Dienstag 6. Oktober 2020, 14:42
von Mr. R341
Jankie so weit bin ich noch garnicht

Ich muss es erstmal hinbekommen, dass jedes einzelne Element in der Liste, die durch .split() erzeugt wurde mit jedem Element in der word_list abgeglichen wird... daran scheitert es...
Re: "".join() richtig verwenden zum abgleichen mit einer Liste aus strings
Verfasst: Dienstag 6. Oktober 2020, 14:58
von Sirius3
@Mr. R341: dass Du die globale Variable word_list benutzt ist trotzdem falsch.
`word_list` ist schon eine Liste. Also die Liste erst mit join zu einem String zu machen und per split wieder in eine Liste umzuwandeln bleibt Quatsch.
Re: "".join() richtig verwenden zum abgleichen mit einer Liste aus strings
Verfasst: Dienstag 6. Oktober 2020, 14:58
von Jankie
Code: Alles auswählen
sentence = "Das ist ein Beispieltext in dem Wörter ersetzt werden sollen."
word_list = ["test", "ein", "ban", "Hello"]
def censor(text, word_list):
split_text = text.split()
for word in split_text:
if word in word_list:
print("yes")
censor(sentence, word_list)
Re: "".join() richtig verwenden zum abgleichen mit einer Liste aus strings
Verfasst: Dienstag 6. Oktober 2020, 15:15
von Sirius3
@Jankie: ich wüsste gar nicht, dass du die selben Hausaufgaben hast. Damit ist Mr.R341 nicht geholfen. Eingerückt weiter immer mit 4 Leerzeichen pro Ebene.
Re: "".join() richtig verwenden zum abgleichen mit einer Liste aus strings
Verfasst: Dienstag 6. Oktober 2020, 15:19
von Mr. R341
Jankie vielen Dank ^^ habs auf meinen Code übertragen und .join(list) raus genommen ^^ vielen Dank, endlich funktionierts

Jetzt setz ch mich mal daran das Wort zu finden und die Anzahl der Buchstaben durch Sternchen zu ersetzten ^^ vielen Dank

Re: "".join() richtig verwenden zum abgleichen mit einer Liste aus strings
Verfasst: Dienstag 6. Oktober 2020, 16:39
von __blackjack__
Momentan scheint die Lösung auf so etwas hier hinaus zu laufen:
Code: Alles auswählen
#!/usr/bin/env python3
def censor(text, banned_words):
banned_words = set(banned_words)
return " ".join(
"*" * len(word) if word in banned_words else word
for word in text.split()
)
def main():
print(
censor("Hello World, you're an jerk", ["test", "jerk", "ban", "Hello"])
)
if __name__ == "__main__":
main()
Ausgabe:
Aber nicht zu früh freuen, denn das ist leider keine Lösung. Wenn man nämlich den Rechtschreibfehler korrigiert und den Satz "Hello World, you're an jerk" mit einem Satzzeichen beendet, funktioniert das nicht mehr:
Re: "".join() richtig verwenden zum abgleichen mit einer Liste aus strings
Verfasst: Dienstag 6. Oktober 2020, 19:18
von Mr. R341

Das is Quasi die Aufgabe.. und ich hatte Probleme dass die Liste zum abgleichen abgerufen wird..
Den Rest versuche ich selber wieder
