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

突然想到一个视频里面弹幕被和谐的一满屏的*号觉得很有趣,然后就想用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]切片 把上面打印时候时间后面的余数给忽略掉更简洁点。基本上的流程如此,当然可以有很多扩展,例如脏话次数超过多少禁止发言,限制发言几分钟啊,日志方面可以定时清空啊等等。这就看大家自己去研究了,代码量就有点大了这里就不展示了。

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

(0)

相关推荐

  • python实现简单点对点(p2p)聊天

    点对点聊天首先是基于多线程的网络编程,其次就是将每一个连接都保存为一个具有独一属性的对象并添加到连接列表中,对于每一个连接对象发送过来的信息必须要包含主要的三项内容(from,to,messages),这样当信息发送到服务器之后服务器根据to的连接对象遍历连接列表找到目标对象将信息发送给目标,目标拿到信息后就知道是谁发过来的,然后根据id号码进行回复.此实现将会继续完善,后续新加功能将会在我个人github主页展现 服务器端实现: #coding:utf-8 ''' file:server.py

  • python的tkinter布局之简单的聊天窗口实现方法

    本文实例展示了一个python的tkinter布局的简单聊天窗口.分享给大家供大家参考之用.具体方法如下: 该实例展示的是一个简单的聊天窗口,可以实现下方输入聊天内容,点击发送,可以增加到上方聊天记录列表中.现在只是"单机"版. 右侧预留了空位可以放点儿其它东西.感兴趣的读者可以进一步做成socket双方互聊. 以下是功能代码部分: from Tkinter import * import datetime import time root = Tk() root.title(unic

  • python socket多线程通讯实例分析(聊天室)

    本文实例讲述了python socket多线程通讯方法.分享给大家供大家参考,具体如下: #!/usr/bin/evn python """ 这是一个Socket+多进程的例子(聊天服务端) """ import socket import threading # 处理中文数据用的 encoding = "GBK" def HKServer(client, addr): """ 与客户端时实通讯函

  • 小小聊天室Python代码实现

    相对于Java方式的聊天室,Python同样可以做得到.而且可以做的更加的优雅.想必少了那么多的各种流的Python Socket,你一定会喜欢的. 至于知识点相关的内容,这里就不多说了. UDP方式 服务器端 # coding:utf-8 # __author__ = 'Mark sinoberg' # __date__ = '2016/7/7' # __Desc__ = 创建一个简单的套接字监听请求 import socket HOST = '192.168.59.255' PORT = 9

  • 使用Python的Tornado框架实现一个一对一聊天的程序

    按思路来聊: 类似微信,点击用户可以进入一对一聊天页面:另有聊天框列表包含所有存在聊天记录的一对一聊天框,点击进入聊天页面. [数据结构] 因为双方都有聊天记录,所以每一个聊天实际上得储存两份,设计的数据结构如下: A : user_a = {"id":1,"name":"A"} B : user_b = {"id":2,"name":"B"} A的聊天记录: chat_a = { &q

  • 基于Python如何使用AIML搭建聊天机器人

    借助 Python 的 AIML 包,我们很容易实现人工智能聊天机器人.AIML,全名为Artificial Intelligence Markup Language(人工智能标记语言),是一种创建自然语言软件代理的XML语言,是由Richard Wallace和世界各地的自由软件社区在1995年至2002年发明的. AIML 是什么? AIML由Richard Wallace发明.他设计了一个名为 A.L.I.C.E. (Artificial Linguistics Internet Comp

  • Python实现的使用telnet登陆聊天室实例

    本文实例讲述了Python实现的使用telnet登陆聊天室.分享给大家供大家参考.具体如下: 前久在家学习Python的时候写的一个简单的聊天室,可以使用telnet来登陆. 遗憾的是现在对中文的支持很差,英文聊天倒是没什么问题了. 功能很简单的,应该没有你想象的那么强大,但是你如果有兴趣的话可以试试的. 另外,让我惊奇的是它可以在Android的平板上运行SL4A的Python解释器上运行(需要稍微改几句代码,貌似是编码的那个地方,我记不清了). 现在这个是可以在PC上跑起来的. 废话不多,直

  • python聊天程序实例代码分享

    代码简单,直接看代码吧: 复制代码 代码如下: import socketimport threadingimport re#import Tkinter def ser():    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)    s.bind(('',33333))    s.listen(1)    conn,addr=s.accept()    while True:        print '[%s:%d] send a me

  • 快速实现基于Python的微信聊天机器人示例代码

    最近听说一个很好玩的图灵机器人api,正好可以用它做一个微信聊天机器人,下面是实现 # test.py import requests import itchat #这是一个用于微信回复的库 KEY = '8edce3ce905a4c1dbb965e6b35c3834d' #这个key可以直接拿来用 # 向api发送请求 def get_response(msg): apiUrl = 'http://www.tuling123.com/openapi/api' data = { 'key' :

  • Python socket C/S结构的聊天室应用实现

    Python socket C/S结构的聊天室应用 服务端: #!/usr/bin/env python #coding:utf8 import socket,select def broadcast_data (sock,message): for socket in conn_list: if socket != server_socket and socket != sock : try : socket.send(message) except : socket.close() conn

随机推荐