Python 写各大聊天系统的屏蔽脏话功能原理
來源:Cookie-Fei?
www.cnblogs.com/cookie1026/p/6121363.html
突然想到一個視頻里面彈幕被和諧的一滿屏的*號覺得很有趣,然后就想用python來試試寫寫看,結果還真玩出了點效果,思路是首先你得有一個臟話存放的倉庫好到時候檢測,那么個人還是喜歡用列表,因為列表靈活使用擴展都很方便,有了臟話庫我們在來想核心怎么屏蔽臟話,你要記得玩家輸入的彈幕數據類型是什么首檔其次是字符串如果沒有特殊要求就它了,萬變不離其中總是這幾個數據結構嘛,有了字符串替換*號什么的都輕松許多了對吧,今天所聊的是完整的一套結構,為了讓大家更清晰學會,我會拆分代碼然后在組裝起來講,這樣大家就會有個更深了了解首先來看看核心的功能替換臟話代碼如下:
import datetime
time?=?datetime.datetime.now()
?
speak?=?'你個狗日的,fuckR你媽喲,操你個仙人板板,個老麻批'
dirty?=?['fuck','狗日的','犢子','麻批','仙人板板','R你媽','操你','草你']
?
for?i?in?dirty:
????speak?=?speak.replace(i,'*')
print?speak+" | "+str(time)
是不是簡單輕松的就把臟話給屏蔽掉了呢,這導入了時間模塊datetime用來獲取現在本地時間,后面會用來寫入日志保存,當然很多游戲對話里面也會顯示當前時間,然后speak是玩家要輸出的臟話(現在是演示后面會改成Input真正的輸入交互),dirty是定義的臟話庫(當然沒寫太多因為每地域都不同太多了寫不完),后面跟一個for循環來檢索,只要你說的話里面包含臟話庫內,那么我們就用replace替換掉,最后打印也就等于公屏上顯示的字幕都是*了…當然我們還要想那如何去跟蹤是誰什么時間都說了什么,這樣關聯就要用到類了,肯定會有疑惑為什么用類,首先類class是一類(比如桌子有方桌、圓桌、會議桌、辦公桌等)事物描述的概括,例如一群玩家Player,他們都有各自的游戲名字name,然后都具有聊天功能(我們又稱之為動作),這樣就既可以分類又可以達到區分的效果。代碼如下:
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()
這里就很全面的介紹了類的使用及工作流程效果,這里先創建一個類Player玩家類,init初始化他的名字name,其中他具備聊天功能talk,還具備日志記錄功能,那么來聊天運作流程,每個玩家注冊后登錄游戲會有一個游戲名字(你可以理解為登錄QQ后),這里self.name=name等于獲取到你的個人名稱(網名),然后打聊天窗口進入talk,self.string你輸入的聊天信息,self.log記錄日志,重點是優先把你原本的話記入到聊天日志中這樣查可以查到你的記錄,self.string.replace替換掉你說的臟話,那么屏幕上只會顯示替換后的話語例如這打印的本來是fuck編程了雅蠛蝶…這個工作流程是不是很清晰了呢,當然你不了解類方法這里就會很迷糊了,慢慢來只要有這個思路學了類以后就很輕松了。當然不會這樣就結束,最后把基本的完整代碼放出來代碼如下:
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?"尼瑪在逗我?"
測試結果如下:
你可以新建一個文件名叫zanghua.txt空文本就行,只是用來演示存儲日志的行為效果,上面打印說change Player是為了演示不同用戶輸入做了個簡易切換,實際上的系統你登錄后很少切換用戶之類的,就只是當前帳號聊天了,這里的代碼就添加文件處理方式with open (文件名,打開模式) 簡稱為 f之類的然后寫入write(記得在寫入的最后加上n換行符,不然全寫第一行很難認)關于datetime[:7]切片 把上面打印時候時間后面的余數給忽略掉更簡潔點。基本上的流程如此,當然可以有很多擴展,例如臟話次數超過多少禁止發言,限制發言幾分鐘啊,日志方面可以定時清空啊等等。這就看大家自己去研究了,代碼量就有點大了這里就不展示了。最后我要說明的圖如下,有很多人估計誤解了些點什么。。
這只是演示流程的思路(提供給入門開發的新手參考),請大佬們不要誤解。
總結
以上是生活随笔為你收集整理的Python 写各大聊天系统的屏蔽脏话功能原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 正态分布为什么常见?
- 下一篇: 一文读懂背包问题