Python - Wenn die Zeichenfolge enthält ein Wort aus einer Liste oder einem set
Gesucht hab ich ganz gründlich und haben keine passende Antwort. Ich bin neu in Python/Programmierung, so dass ich schätzen jede Beratung, die ich bekommen kann:
Ich bin versucht, suchen, user-input-strings für bestimmte Schlüssel-Worte. Zum Beispiel, sagen wir herausfiltern Gotteslästerung. Aus meiner Forschung, ich war in der Lage, um die folgenden dummy-Beispiel:
Swear = ("curse", "curse", "curse") #Obviously not typing actual swear words, created a set
Userinput = str.lower(input("Tell me about your day: "))
if Userinput in Swear:
print("Quit Cursing!")
else:
print("That sounds great!")
Mithilfe der oben genannten, wenn der Benutzer eine genaue word-Formular das als Ihre gesamte Zeichenfolge, es wird gedruckt "Hör auf zu fluchen"; jedoch, wenn der Benutzer eingibt "Flüche" oder "ich mag zu sagen curse" es wird gedruckt ", das klingt Super!"
Letztlich das, was ich brauchen, ist, um der Lage sein, um die gesamte Zeichenfolge für ein wichtiges Wort, nicht eine exakte übereinstimmung der gesamte string. Ex: "ich ging in den park und fühlte mich wie Schreien Fluchs" sollte true zurückgeben, für ein Spiel.
Wie ich sagte, unter den code, es funktioniert nur, wenn die Eingaben des Benutzers die genaue Zeichenfolge aus der Liste aus, und nur das. Wenn der Benutzer die Eingänge "Fluch" wird true zurückgegeben, wenn der Benutzer Eingaben "Flüche" oder "ich mag Fluch" wird false zurückgegeben (ich weiß, die Formatierung und syntax der gelöscht wurde und dass der code funktioniert)
Anmerkung: die Sie Lesen sollten, PEP 8, so dass Sie verwenden die empfohlene Stil-Konvention. Hier sollten Sie verwenden, Variablennamen mit Kleinbuchstaben: die form, die Sie verwenden in der Frage vorbehalten ist per Konvention für Klassennamen, das macht den code ein wenig seltsam.
Danke EOL, ich fand, was Sie reden, und fügte hinzu, es auf meine Leseliste. Ich weiß es zu schätzen 🙂
InformationsquelleAutor MoJo2015 | 2014-12-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie sollten Lesen, auf die Unterschiede zwischen Listen und Tupeln.
UserInput
lang ist), wenn Effizienz ist gefragt, dann eine andere Methode wäre effizienter, woUserInput
nur einmal gelesen wird (in der Regel mitre.finditer("\w+", UserInput)
).Das funktioniert perfekt, danke dir Caleb. Gehe ich über den link, den Sie Hinzugefügt als gut =)
sehr wahr. Von dem, was ich sammelte, aus Ihrer post, ich dachte die intuitive Antwort wäre am besten.
er sagte, dass war nur ein Beispiel. Er wird vermutlich einzigartige Wörter, die in der schwöre Liste, oder er kann eine Pause einlegen.
Es geht um Qualität und effiziente Antwort, das macht SO unglaublich und hilft beim lernen besser Weg, als ein anderer Ort.
InformationsquelleAutor caleb.breckon
Können Sie setzt, wenn Sie nur wollen, um zu überprüfen, die Existenz von Schimpfwörtern,
Ich sehe wissen. Es wird nicht funktionieren, für die Pluralformen. Vielen Dank für den Hinweis.
InformationsquelleAutor Marcin
Ergebnis:
Mit Regulären Ausdruck:
Muster verwendet, ist
r"\bcurse[\w]*"
.Überprüfen Sie bitte meine aktualisierte Antwort.
Das wäre
if any(UserInput.find(s) >= 0 for s in Swear)
, die nicht nur direkter, sondern auch schneller, da es nicht eine Liste erstellen zuerst für alle die Verbotenen Worte: die form, die ich empfehlen Stoppt beim ersten Schimpfwort, so ist es effizienter und auf den Punkt.Danke. Es war schlimm zu Durchlaufen, Sie alle zu suchen, als ich versuchte, jegliche Funktion.
InformationsquelleAutor Tanveer Alam