Heim > Artikel > Backend-Entwicklung > Python schreibt das Prinzip des Blockierens von Schimpfwörtern in großen Chat-Systemen
Schreiben Sie das Prinzip des Blockierens von Schimpfwörtern in großen Chatsystemen mit Python
Plötzlich fiel mir ein Video ein, in dem die Flut harmonisch mit *-Zeichen auf dem Bildschirm gefüllt war, und ich fand es sehr interessant Dann wollte ich versuchen, es in Python zu schreiben. Die Idee ist, dass man zunächst ein Lager haben muss, um Schimpfwörter zu speichern, damit sie später erkannt werden können Listen, da Listen einfach zu verwenden und flexibel zu erweitern sind. Wenn Sie darüber nachdenken, wie Sie Schimpfwörter im Kern blockieren, müssen Sie sich daran erinnern, welcher Datentyp die vom Spieler eingegebene Sperre ist. Zuerst, gefolgt von einer Zeichenfolge, verwenden Sie diese einfach. Es gibt immer diese Datenstrukturen, und mit der Zeichenfolgenersetzung ist es viel einfacher, über einen vollständigen Satz von Strukturen zu sprechen Um es allen klarer zu machen, werde ich den Code aufteilen und ihn dann zusammenstellen, damit jeder ein tieferes Verständnis hat. Schauen wir uns zunächst die Kernfunktion zum Ersetzen der Schimpfwörter an Code wie folgt:
#!/usr/bin/env python # -*- coding:utf-8 -*- import datetime time = datetime.datetime.now() speak = '你个狗日的,fuckR你妈哟,操你个仙人板板,个老麻批' dirty = ['fuck','狗日的','犊子','麻批','仙人板板','R你妈','操你','草你'] for i in dirty: speak = speak.replace(i,'*') print speak+" | "+str(time)
Ist es einfach und leicht, die Schimpfwörter zu blockieren? Dadurch wird das Zeitmodul datetime importiert, um die aktuelle Ortszeit zu erhalten Wird verwendet, um Protokolle zu schreiben und sie später zu speichern. Natürlich wird in vielen Spieldialogen auch die aktuelle Zeit angezeigt, und dann ist „Sprechen“ das Schimpfwort, das der Spieler ausgeben möchte (jetzt ist es eine Demonstration und wird für echte Eingaben in „Eingabe“ geändert). Interaktion später), dirty Es ist eine definierte Bibliothek von Schimpfwörtern (natürlich habe ich nicht zu viel geschrieben, weil jede Region anders ist und es zu viele sind, um sie fertigzustellen), gefolgt von einer for-Schleife zum Abrufen So lange wie Sie say enthält die Schimpfwörter in der Bibliothek, dann werden wir sie durch ersetzen ersetzen, was bedeutet, dass alle auf dem öffentlichen Bildschirm angezeigten Untertitel *... sind. Natürlich müssen wir auch darüber nachdenken, wie wir verfolgen können, wer was gesagt hat Zu welchem Zeitpunkt werden Klassen zur Assoziation verwendet? Es wird definitiv Fragen geben, warum eine Klasse zunächst eine Zusammenfassung der Beschreibung einer Klasse von Dingen ist. Ein runder Tisch, ein Konferenztisch, ein Bürotisch usw.) Zum Beispiel hat eine Gruppe von Spielern alle ihre eigenen Spielnamen und alle haben eine Chat-Funktion (wir nennen sie auch Aktionen), sodass beides möglich ist Klassifizierung und Differenzierung erreicht werden. Der Code lautet wie folgt:
class Player(object): def __init__(self,name): self.name = name def talk(self): self.string = 'whatever fuck no joke' self.log() self.string = self.string.replace('fuck','雅蠛蝶') print "公屏显示:%s--%s"%(self.name,self.string) def log(self): print "日志记录为:%s--%s"%(self.name,self.string) t1 = Player('white') t1.talk()
Hier finden Sie eine umfassende Einführung in die Verwendung von Klassen und Workflow-Effekten. Hier erstellen wir zunächst eine Player-Klasse wie Player und init Initialisiert seinen Namen, der über die Chat-Funktion und die Protokollierungsfunktion verfügt. Nach der Registrierung und Anmeldung beim Spiel erhält jeder Spieler einen Namen (Sie können ihn so verstehen, als ob er sich bei QQ angemeldet hätte). . Hier ist self.name=name gleichbedeutend mit Holen Sie sich Ihren persönlichen Namen (Bildschirmnamen), öffnen Sie dann das Chat-Fenster, geben Sie die von Ihnen eingegebenen Chat-Informationen ein und self.log, um das Protokoll aufzuzeichnen Notieren Sie zunächst Ihre ursprünglichen Wörter im Chat-Protokoll, damit Sie sie überprüfen können. Gehen Sie zu Ihrem Datensatz, self.string.replace, um die von Ihnen gesagten Schimpfwörter zu ersetzen. Dann werden nur die ersetzten Wörter auf dem Bildschirm angezeigt wurde ursprünglich von Ya Zhidie programmiert ... Wenn Sie die Klassenmethode nicht verstehen, werden Sie hier natürlich sehr verwirrt sein, solange Sie diese Idee haben Lernen Sie die Klasse, es wird sehr einfach sein. Natürlich wird es nicht so enden. Schließlich wird der grundlegende vollständige Code wie folgt veröffentlicht:
import datetime time = str(datetime.datetime.now())[:-7] dirty = ['fuck','狗日的','犊子','麻批','仙人板板','R你妈','操你','草你'] class Player(object): def __init__(self,name): self.name = name def talk(self): self.string = raw_input("input-write:") # self.string = '你个狗日的,R你妈哟,操你个仙人板板,个老麻批' self.log() for i in dirty: self.string = self.string.replace(i,'雅蠛蝶') print "{} {}-speak:{}".format(time,self.name,self.string,) def log(self): with open('zanghua.txt','a') as f: f.write("{} {}-speak:{}\n".format(time,self.name,self.string)) t1 = Player('white') t2 = Player('black') t3 = Player('green') while True: n = raw_input('change Player:') if n == '1': t1.talk() elif n == '2': t2.talk() elif n == '3': t3.talk() elif n == 'q': print 'Bye' break else: print "尼玛在逗我?"
Die Testergebnisse lauten wie folgt:
Sie können eine neue Datei mit dem Namen zanghua.txt mit leerem Text erstellen. Sie wird nur verwendet, um den Verhaltenseffekt des Speicherns von Protokollen zu demonstrieren. Der obige Ausdruck besagt, dass Change Player ein einfacher Wechsel ist Demonstrieren Sie unterschiedliche Benutzereingaben. Nach der Anmeldung wechseln Sie selten den Benutzer. Der Code hier fügt die Dateiverarbeitungsmethode mit dem Namen „f“ hinzu schreibt dann write (denken Sie daran, am Ende n Zeilenumbruchzeichen hinzuzufügen, sonst wird es schwierig, die erste Zeile vollständig zu lesen). In Bezug auf das Slicing von datetime[:7] ist es prägnanter, den Rest nach der Zeit beim Drucken oben zu ignorieren . Der grundlegende Prozess ist wie folgt. Natürlich kann es viele Erweiterungen geben, z. B. das Sprechen nach einer bestimmten Anzahl von Schimpfwörtern verbieten, das Sprechen auf wenige Minuten beschränken, Protokolle können regelmäßig gelöscht werden usw. Es liegt an Ihnen, es selbst zu recherchieren. Die Menge an Code ist etwas groß und ich werde sie hier nicht zeigen. Das letzte Bild, das ich erklären möchte, ist wie folgt. Viele Leute haben möglicherweise etwas falsch verstanden. .