详解Python各大聊天系统的屏蔽脏话功能原理
作者:Cookie-Fei 发布时间:2021-02-23 13:53:44
突然想到一个视频里面弹幕被和谐的一满屏的*号觉得很有趣,然后就想用python来试试写写看,结果还真玩出了点效果,思路是首先你得有一个脏话存放的仓库好到时候检测,那么个人还是喜欢用列表,因为列表灵活使用扩展都很方便,有了脏话库我们在来想核心怎么屏蔽脏话,你要记得玩家输入的弹幕数据类型是什么首档其次是字符串如果没有特殊要求就它了,万变不离其中总是这几个数据结构嘛,有了字符串替换*号什么的都轻松许多了对吧,今天所聊的是完整的一套结构,为了让大家更清晰学会,我会拆分代码然后在组装起来讲,这样大家就会有个更深了了解首先来看看核心的功能替换脏话代码如下:
#!/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)
是不是简单轻松的就把脏话给屏蔽掉了呢,这导入了时间模块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]切片 把上面打印时候时间后面的余数给忽略掉更简洁点。基本上的流程如此,当然可以有很多扩展,例如脏话次数超过多少禁止发言,限制发言几分钟啊,日志方面可以定时清空啊等等。这就看大家自己去研究了,代码量就有点大了这里就不展示了。
来源:http://www.cnblogs.com/cookie1026/p/6121363.html


猜你喜欢
- osql 工具是一个 Microsoft Windows 32 命令提示符工具,您可以使用它运行 Transact-SQL 语句和脚本文件。
- 今天有朋友问我关于用JAVASCRIPT来进行页面各表单之间的数据传递的问题,我以前也写过,不过从来没有注意,今天总结了一下,希望能够给大家
- 解析url用的类库:python2版本: from urlparse import urlparseimport urllibpython3
- Protobuf是google开发的一个序列化和反序列化的协议库,我们可以自己设计传递数据的格式,通过.proto文件定义我们的要传递的数据
- 一、 QingScan介绍QingScan是一个安全工具整合系统,解决你平时使用各种工具一个个打 开填写扫描目标的麻烦过程;QingScan
- 前言前面写过一篇用Python制作PPT的博客,感兴趣的可以参考用Python制作PPT这篇是关于用Python进行数据可视化的,准备作为一
- 前言相比大家都听过自动化生产线、自动化办公等词汇,在没有人工干预的情况下,机器可以自己完成各项任务,这大大提升了工作效率。编程世界里有各种各
- 背景在python工程完成开发以后需要编译成可执行文件,如此一来生产环境和开发环境隔离开来便于用户使用(可独立使用,无需配置python开发
- 根据SalesOrderID排序,取第16-18行这3条记录。方法一:(最常用的分页代码, top / not in)SELECT &nbs
- 上一篇自动在Windows中运行Python脚本并定时触发功能实现传送门链接运行Python脚本:.bat文件在Windows中,.bat文
- 1、将mysql数据导出到SQL文件中(数据库存在的情况)主要需要修改数据库的相关信息,端口号、用户名、密码等其中数据库得存在,不然会报错
- Python实现Mysql数据统计的实例代码如下所示:import pymysqlimport xlwtexcel=xlwt.Workboo
- 废话不多说,直接开干!抖音字符视频在今年火过一段时间。反正我是始终忘不了那段刘耕宏老师本草纲目的音乐…这一次自己也来实
- 备注1:解决连接MySQL数据库很慢的问题vim /etc/my.cnf添加内容:skip-name-resolve,重启数据库。 
- 1、python教程基于 python3.10 的持续解读,旨在快速回忆加深理解,节约自己的时间成本1.1 概述python 是一门易于学习
- 前段时间,接到一个需求,要求下载某一个网站的视频,然后自己从网上查阅了相关的资料,在这里做一个总结。1. m3u8文件m3u8是苹果公司推出
- 当发现目录时出错如下:\windows\tensorflow\core\framework\op_kernel.cc:993] Not fo
- sqlserver2008不支持关键字limit ,所以它的分页sql查询语句将不能用MySQL的方式进行,幸好sqlserver2008提
- 获取单输入尺寸,该层只被使用了一次。import kerasfrom keras.layers import Input, LSTM, De
- 比如,我要建立一个1,000,000行的数字表: CREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY