3 Stimmen

Das Verständnis von Code mit String-Methoden

Ich habe Schwierigkeiten, einen Teil des Codes zu verstehen, der Teil eines größeren Problemsatzes ist. Der Code ist wie folgt (Beachten Sie, dass WordTrigger eine Unterklasse von Trigger ist):

class WordTrigger(Trigger):

    def __init__(self, word):
        self.word = word

    def isWordin(self, text):
        text = [a.strip(string.punctuation).lower() for a in text.split(" ")]
        for word in text:
            if self.word.lower() in word.split("'"):
                return True
        return False

Also erledigt Zeile 5 die Aufgabe, den Text von Satzzeichen zu befreien und ihn in Kleinbuchstaben umzuwandeln. Die Methode string.split(" ") erstellt eine Liste aller Wörter im Text, trennt sie auf und fügt Leerzeichen dazwischen ein. Die for-Schleife überprüft, ob das 'Wort' im 'Text' vorhanden ist. Erkennt es also die Variable 'Wort' aus dem Konstruktor?

Macht self.word.lower() das Wort, das im Konstruktor initialisiert wurde, komplett in Kleinbuchstaben? Und stellt die 'if'-Bedingung in der 'for'-Schleife sicher, dass die Suche nach 'Warnung' Wörtern keine Wörter mit Apostrophen ausschließt?

3voto

FMc Punkte 40706

Erkennt es also die Variable 'word' aus dem Konstruktor?

Nein. Variablen, die innerhalb einer Methode definiert sind, sind nur für diese Methode lokal, und Objektattribute (wie self.word) werden nicht mit lokalen Variablen verwechselt (wie word).

Macht self.word.lower() das Wort, das vom Konstruktor initialisiert wurde, komplett in Kleinbuchstaben?

Nein. Strings sind in Python unveränderlich. Es wird ein neuer String zurückgegeben - eine Version von self.word in Kleinbuchstaben.

Und sorgt das 'if'-Bedingung in der 'for'-Schleife dafür, dass die Suche nach 'Alarm'-Wörtern Wörter mit Apostrophen nicht ausschließt?

Scheint mir richtig zu sein.

2voto

Calvin Cheng Punkte 34082

1. Frage: Die for-Anweisung überprüft, ob das 'Wort' im 'Text' enthalten ist. Erkennt es also die Variable 'word' aus dem Konstruktor?

Die word-Variable der for-Anweisung ist eine lokale Variable und nicht dasselbe wie self.word. Du kannst diese Schleife im Grunde genommen mit item oder einem anderen Variablennamen ersetzen, wenn du möchtest.

2. Frage: Macht self.word.lower() das Wort, das vom Konstruktor initialisiert wurde, alle klein geschrieben?

Nein, tut es nicht, da es sich um zwei verschiedene Dinge handelt. Die word lokale Variable ist jedes Element in der Liste text. Und self.word ist die Variable, die du dem WordTrigger-Objekt übergibst, wenn du es zuerst instanziierst.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X