让弹幕文明一点的Python屏蔽功能小实验

突然想到一个视频里面弹幕被和谐的一满屏的*号觉得很有趣,然后就想用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]切片 把上面打印时候时间后面的余数给忽略掉更简洁点。

基本上的流程如此,当然可以有很多扩展,例如脏话次数超过多少禁止发言,限制发言几分钟啊,日志方面可以定时清空啊等等。这就看大家自己去研究了,代码量就有点大了这里就不展示了。最后我要说明的图如下,有很多人估计误解了些点什么。。

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

最后还是老台词感谢观看,下次再见~~~!!!

原文作者:Cookie-Fei

原文链接:www.cnblogs.com/cookie1026/p/6121363.html


原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2017-10-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程一生

架构师之路--搜索业务和技术介绍及容错机制

1292
来自专栏何俊林

Android 插件化和热修复知识梳理

本文来自IAM四十二授权发布,IAM四十二的简书地址:http://www.jianshu.com/u/c6f7cfa366d9 概述 在Android开发中...

4349
来自专栏iOS技术

设计一个简单的 iOS 架构前言一、关于组件化二、模块化思维划分文件三、减少全局宏的使用四、去基类化设计五、MVC?MVP?MVVM?VIPER?结语

正如“100个读者就有100个哈姆雷特”一样,对于架构的理解不同的软件工程师有不同的看法。架构设计往往是一个权衡的过程,每一个架构设计者都要考虑到各个因素,比如...

1553
来自专栏草根专栏

.NET Core TDD 前传: 编写易于测试的代码 -- 缝

举个例子, 如果一辆汽车在产出后没完成测试, 那么没人敢去驾驶它. 代码也是一样的, 如果项目未能进行该做的测试, 那么客户就不敢去使用它, 即使使用了也会遇到...

1187
来自专栏Android 技术栈

Android DeepLink介绍与使用

前段时间公司让调研一下DeepLink,说以后会用到,之前看了很久,并做了个demo,现整理一下,方便以后查阅,如果有幸帮助到其他人就更好了。

4116
来自专栏沈唁志

你认为该怎么样学习PHP?PHP成长之路

2875
来自专栏王清培的专栏

.NET应用架构设计—表模块模式与事务脚本模式的代码编写

阅读目录: 1.背景介绍 2.简单介绍表模块模式、事务脚本模式 3.正确的编写表模块模式、事务脚本模式的代码 4.总结 1.背景介绍 要想正确的设计系统架...

21210
来自专栏逸鹏说道

一个粗心的Bug,JSON格式不规范导致AJAX错误

一、事件回放 今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里。 当时正在联调一个项目,由于后端没有提供数据...

3594
来自专栏量化投资与机器学习

战斗民族开源神器ClickHouse:一款适合于构建量化回测研究系统的高性能列式数据库(一)

编辑部原创 编译:wally21st、 西西 未经允许,不得转载 对于一些私募、投资机构和个人来说,量化投资研究、回测离不开数据的支持。当数据量达到一定数量,如...

6688
来自专栏happyJared

Python + Selenium 自动发布文章(四):加入 bat 脚本

  这是本系列的第四篇文章,同时也是最后一篇。有关于Bat脚本和自动发布博客的内容,不太了解的可以先看看之前写的文章。这篇文章是介绍如何整合Bat脚本来一键自动...

1332

扫码关注云+社区

领取腾讯云代金券