这篇文章主要介绍了详解 Python 各大聊天系统的屏蔽脏话功能原理, 小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Python 是一种面向对象、解释型计算机程序设计语言,由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。Python 语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是 C/C++)很轻松地联结在一起。
突然想到一个视频里面弹幕被和谐的一满屏的 * 号觉得很有趣,然后就想用 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.phperz.com/article/17/0313/310734.html