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]切片 把上面打印时候时间后面的余数给忽略掉更简洁点。基本上的流程如此,当然可以有很多扩展,例如脏话次数超过多少禁止发言,限制发言几分钟啊,日志方面可以定时清空啊等等。这就看大家自己去研究了,代码量就有点大了这里就不展示了。最后我要说明的图如下,有很多人估计误解了些点什么。。



这只是演示流程的思路(提供给入门开发的新手参考),请大佬们不要误解。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RHEL4- SAMBA服务(四)在x-window下图形界面简单搭建samba服务器

RHEL4- SAMBA服务(四)在x-window下图形界面简单搭建samba服务器在《RHEL4- SAMBA服务(一)samba服务的安装与启动》中我讲了如何安装和启动samba服务器,这一篇我来说一说如何使用图形界面配置简单的samba服务&#xff0…

mvc identity连接mysql_asp.net MVC5,如何使用mysql数据库,使用MVC框架中自带的identity用户验证体系...

问题如题现在很多时候,即使是.net项目,我们用的数据库也未必时是 SQL Server了。但很多VS 自带的框架(如MVC 、WebAPI等框架)中的示例自带的仍然是默认Sql Server的,而且并不一定好改成别的数据库。这有时候就很苦恼。比如.net MVC框架中自带…

Dapr 知多少 | 分布式应用运行时

IntroDapr 官方团队已于最近(2021.2.17)正式发布Dapr v1.0,Dapr已正式生产可用,可以部署到自托管环境或 Kubernetes 集群。对于绝大多数开发者来说,想必对Dapr只是有所耳闻,而具体是什么(What&a…

使用.NET中的XML注释(一) -- XML注释标签讲解

一.摘要 .Net允许开发人员在源代码中插入XML注释,这在多人协作开发的时候显得特别有用。 C#解析器可以把代码文件中的这些XML标记提取出来,并作进一步的处理为外部文档。 这篇文章将展示如何使用这些XML注释。 在项目开发中,很多人并不乐意写…

mysql tddl_TDDL思考总结

单机数据库分布式数据库TDDL原理与最佳实践1. 数据库的结构1.1. KV存储(id是K)1.2. B树与红黑树B树的特点是叶子节点是块状,一个叶子里面有多个数据,相邻数据是存在一起的,123,456起等,而磁盘也是按块的,B树…

c# winform中窗体切换后释放及防止重复生成

问题1:窗体切换后如何关闭,并释放资?c# winform中,2个窗体,form1和form2,互相切换的时候执行this.Hide(); Form2 form2 new Form2();form2.Show();此时你会发现当Form2显现时,Form1隐藏了,但当你关闭Form2时,其进程并…

2018程序员必备碎片化学习工具(年度精选)

2017马上就要过去了,2018来了。工作、生活节奏超快的今天,想要不断提升自我,碎片化阅读学习是你最佳的选择,如果你有一颗学习的心,那这些学习型的公众号,绝对会让你受益匪浅。小编为你精选了技术领域几个精…

mfc 找到字符串中字符_[LeetCode] 467. 环绕字符串中唯一的子字符串

题目链接: https://leetcode-cn.com/problems/unique-substrings-in-wraparound-string难度:中等通过率:35.6%题目描述:把字符串 s 看作是"abcdefghijklmnopqrstuvwxyz"的无限环绕字符串,所以 s 看起来是这样的&#xf…

ntopng mysql_网络流量监控工具与分析Ntop和Ntopng

Ntop工具NtopNtop是一种监控网络流量工具,用ntop显示网络的使用情况比其他一些网络管理软件更加直观、详细。Ntop甚至可以列出每个节点计算机的网络带宽利用率。Ntop工作方式1. 命令行界面2. web界面Ntop的功能1. 可以自动从网络中获取有用的信息2. 可以将获取的数据…

一文读懂背包问题

转自:刘毅https://www.61mon.com/index.php/archives/188/问题展开有 N 件物品和一个容量为 V 的背包。第 i 件物品的体积是 Ci,其价值是 Wi。求解,在不超过背包容量情况下,将哪些物品装入背包可使价值总和最大。基本思路这是最基…

小米造车是智能手机进入红海后的突围之举

日前,媒体报道小米已确定造车,并视其为战略级决策。此前,雷静曾多次考虑造车,但未下定决心,而是选择了投资蔚来和小鹏,而且并未占多少股权,小米在两家公司上市时的持股份额均不到 5%&#xff0c…

群论的创立:两个少年天才的接力

我们生活的世界中,美丽的对称无处不在。不过喜欢认死理的数学家,则硬要用他们独特的语言来定义对称。在数学上,对称与群相关联。随着数论、代数方程和几何等研究方向的发展,“群论”这个无比重要的数学领域被开创建立。而这一伟大…

普通程序员转型深度学习指南

AI领域人才奇缺,炙手可热的AI专业应届生年薪30万起步,AI毕业生基本不用找工作,都已经被企业早早预定。AI人才究竟有多紧缺?据腾讯研究院《全球人工智能人才白皮书》报告数据,目前全球AI领域人才仅约30万,全…

sm缩写代表什么意思_pe、PE在电气有代表什么意思,你发现没有,电气技术很有意思...

pe、pe、pe这些是什么意思解说1,听小课堂电小二跟你讲PE是Protecting Earthing的缩写,简体中文名称称之为“保护导体”,也就是我们通常所说的“地线”,我国规定PE线为黄绿双色线 。1.PE线的应用PE线是专门用于将电气装置外露导电部…

java短信接口 调用_带你了解短信接口的调用

查看接口说明image.png注册账号注册成功的页面如下:image.png设置短信内容的签名比如:将短信签名设置为yzcimage.png查取短信接口密钥image.png设计Java程序短信发送客户端的代码如下:package day02;import org.apache.http.Header;import or…

抢鲜体验.NET6 Preview1,配上Docker简直停不下来!

新年复工后的第一件大事儿就是上周三重磅发布的.NET6 Preview1,发布了很多的新特性,让人欢欣鼓舞!然而有些小伙伴儿却担心学不过来了,其实不用担心的,照常用你的.NET5,等11月份.NET6 LTS正式发布了&#xf…

实用金属材料手册_机械密封选用手册

《机械密封选用手册》较系统地介绍了机械密封的原理、结构、材料及辅助系统装置及安装、使用方法和故障分析等。内容以产品样本图册为主,并做了相应的结构说明。本书重点介绍了机械密封的选用方法,读者可根据介质、温度、压力、转速等工况条件选取合适的…

为什么在人工智能火爆的现在,我们还在做数据分析

这些年来,随着进入大数据时代,各行各业均有一个词频频被提到,那就是数据分析。那么数据分析究竟是什么呢?数据分析就是指用适当的统计分析方法对收集来的大量数据进行处理分析,提取有用信息并形成结论,从而…

web高德地图怎么加载离线地图_怎么验证全国离线卫星地图缓存文件的完整性

1. 概述自从我们发布了《如何离线浏览全国7137GB海量谷歌卫星离线影像》一文后,很多用户都在问下载海量数据的具体方法,为了解决大家的困惑,于是又分别发布了《如何一次性下载全国谷歌卫星影像地图数据的方法》和《如何一次性下载谷歌地球的全…

为什么程序员发现不了自己的BUG?

最近在朋友圈流行了这样的一个小学数学题,当然结果是“出乎意料”,看似简单的结果,几乎很少有人做对,而分析下来的原因无非是惯性思维下的粗心导致的完全错误,今天小编就带大家一起分析下思考过程。看图可知&#xff0…