详解Python各大聊天系统的屏蔽脏话功能原理


Posted in Python onDecember 01, 2016

突然想到一个视频里面弹幕被和谐的一满屏的*号觉得很有趣,然后就想用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)

详解Python各大聊天系统的屏蔽脏话功能原理

是不是简单轻松的就把脏话给屏蔽掉了呢,这导入了时间模块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()

详解Python各大聊天系统的屏蔽脏话功能原理

这里就很全面的介绍了类的使用及工作流程效果,这里先创建一个类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 "尼玛在逗我?"

测试结果如下:

详解Python各大聊天系统的屏蔽脏话功能原理

详解Python各大聊天系统的屏蔽脏话功能原理

你可以新建一个文件名叫zanghua.txt空文本就行,只是用来演示存储日志的行为效果,上面打印说change Player是为了演示不同用户输入做了个简易切换,实际上的系统你登录后很少切换用户之类的,就只是当前帐号聊天了,这里的代码就添加文件处理方式with open (文件名,打开模式) 简称为 f之类的然后写入write(记得在写入的最后加上\n换行符,不然全写第一行很难认)关于datetime[:7]切片 把上面打印时候时间后面的余数给忽略掉更简洁点。基本上的流程如此,当然可以有很多扩展,例如脏话次数超过多少禁止发言,限制发言几分钟啊,日志方面可以定时清空啊等等。这就看大家自己去研究了,代码量就有点大了这里就不展示了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
LRUCache的实现原理及利用python实现的方法
Nov 21 Python
python 获取文件下所有文件或目录os.walk()的实例
Apr 23 Python
Tensorflow 合并通道及加载子模型的方法
Jul 26 Python
python将字符串以utf-8格式保存在txt文件中的方法
Oct 30 Python
python读取文件名并改名字的实例
Jan 07 Python
零基础使用Python读写处理Excel表格的方法
May 02 Python
python实现连连看辅助(图像识别)
Mar 25 Python
Django组件content-type使用方法详解
Jul 19 Python
python word转pdf代码实例
Aug 16 Python
python用requests实现http请求代码实例
Oct 31 Python
Tensorflow轻松实现XOR运算的方式
Feb 03 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
Apr 20 Python
python模块简介之有序字典(OrderedDict)
Dec 01 #Python
Python中字符串的修改及传参详解
Nov 30 #Python
简单谈谈Python中的闭包
Nov 30 #Python
浅析Python中yield关键词的作用与用法
Nov 29 #Python
Python中 Lambda表达式全面解析
Nov 28 #Python
利用Python抓取行政区划码的方法
Nov 28 #Python
Python抓取手机号归属地信息示例代码
Nov 28 #Python
You might like
php笔记之:php数组相关函数的使用
2013/04/26 PHP
php 问卷调查结果统计
2015/10/08 PHP
PHP中in_array函数使用的问题与解决办法
2016/09/11 PHP
THINKPHP截取中文字符串函数实例代码
2017/03/20 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程
2012/08/22 Javascript
一个JS函数搞定网页标题(title)闪动效果
2014/05/13 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
2014年最火的Node.JS后端框架推荐
2014/10/27 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
简单实现限制uploadify上传个数
2015/11/16 Javascript
windows系统下更新nodejs版本的方案
2017/11/24 NodeJs
vuex直接赋值的三种方法总结
2018/09/16 Javascript
微信小程序实现动态显示和隐藏某个控件功能示例
2018/12/14 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
2019/02/28 Javascript
Vue.js实现备忘录功能
2019/06/26 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
jQuery实现查看图片功能
2020/12/01 jQuery
原生js实现下拉框选择组件
2021/01/20 Javascript
对Python 3.2 迭代器的next函数实例讲解
2018/10/18 Python
Python基于Tkinter模块实现的弹球小游戏
2018/12/27 Python
python障碍式期权定价公式
2019/07/19 Python
python3.5的包存放的具体路径
2020/08/16 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
2020/12/21 Python
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
营销主管自我评价怎么写
2013/09/19 职场文书
四年大学生活的个人自我评价
2013/12/11 职场文书
运动会稿件50字
2014/02/17 职场文书
总经理任命书范本
2014/06/05 职场文书
2014年个人思想工作总结
2014/11/27 职场文书
2014年小学安全工作总结
2014/12/04 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
初中历史教学反思
2016/02/19 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS