详解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 相关文章推荐
python完成FizzBuzzWhizz问题(拉勾网面试题)示例
May 05 Python
Python中使用ElementTree解析XML示例
Jun 02 Python
Python实现获取系统临时目录及临时文件的方法示例
Jun 26 Python
微信小程序python用户认证的实现
Jul 29 Python
Python3之字节串bytes与字节数组bytearray的使用详解
Aug 27 Python
python编写微信公众号首图思路详解
Dec 13 Python
Python字符串中删除特定字符的方法
Jan 15 Python
解决TensorFlow模型恢复报错的问题
Feb 06 Python
python线程优先级队列知识点总结
Feb 28 Python
用Python实现Newton插值法
Apr 17 Python
Python 数据科学 Matplotlib图库详解
Jul 07 Python
python百行代码实现汉服圈图片爬取
Nov 23 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
世界上第一台立体声收音机
2021/03/01 无线电
PhpDocumentor 2安装以及生成API文档的方法
2014/05/21 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
CodeIgniter针对lighttpd服务器URL重写的方法
2015/06/10 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
PDO::commit讲解
2019/01/27 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
javascript CSS画图之基础篇
2009/07/29 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
2013/07/09 Javascript
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
一步一步实现Vue的响应式(对象观测)
2019/09/02 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
2019/09/06 Javascript
vue 解决文本框被键盘遮住的问题
2019/11/06 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
[07:48]DOTA2上海特级锦标赛主赛事首日RECAP
2016/03/04 DOTA
仅用50行Python代码实现一个简单的代理服务器
2015/04/08 Python
利用python画一颗心的方法示例
2017/01/31 Python
教你用Python创建微信聊天机器人
2020/03/31 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
Python argparse模块使用方法解析
2020/02/20 Python
Linux安装Python3如何和系统自带的Python2并存
2020/07/23 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
2020/09/16 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
CSS3 边框效果
2019/11/04 HTML / CSS
理肤泉英国官网:La Roche-Posay英国
2019/01/14 全球购物
Zavvi西班牙:电子游戏、极客服装、Blu-ray、Funko Pop等
2019/05/03 全球购物
平面设计专业大学生职业规划书
2014/03/12 职场文书
动员大会主持词
2014/03/20 职场文书
处级领导班子全部召开专题民主生活会情况汇报
2014/09/27 职场文书
幼儿园教师个人工作总结2015
2015/05/12 职场文书
2015年中秋节主持词
2015/07/30 职场文书
2016年习主席讲话学习心得体会
2016/01/20 职场文书
Java框架入门之简单介绍SpringBoot框架
2021/06/18 Java/Android
JavaScript选择器函数querySelector和querySelectorAll
2021/11/27 Javascript