[本文出自天外归云的博客园]

问题

最近在网上搜到了一些练习题,对第十二题稍作修改如下:

敏感词文本文件“filtered_words.txt”,里面的内容:

北京人
人大
北京
程序员
公务员
领导
牛比
牛逼
你娘
你妈
love
sex
jiangge

当用户输入敏感词语,则用星号“*”替换,例如当用户输入「北京是个好城市」,则变成「**是个好城市」。

思路

这道题练习的是字符串的替换,不过如果不小心的话很容易把过程想简单。在过程中会涉及到递归方法的使用,在Windows下用python2还涉及到编码的转换,要考虑到的是过滤完一遍字符串后可能并没有过滤完的情况,例如在过滤一遍并将敏感字符串替换之后剩余字符串中新组成了敏感词语的情况。这种情况就要用递归来解决,直到过滤替换完一遍之后的结果和过滤之前一样没有发生改变才能视为替换完成,否则在逻辑上是有疏漏的。

编写脚本

代码如下:

# -*- coding: utf-8 -*-
import os
curr_dir = os.path.dirname(os.path.abspath(__file__))
filtered_words_txt_path = os.path.join(curr_dir,'filtered_words.txt')
import chardet def filter_replace(string):
string = string.decode("gbk")
filtered_words = []
with open(filtered_words_txt_path) as filtered_words_txt:
lines = filtered_words_txt.readlines()
for line in lines:
filtered_words.append(line.strip().decode("gbk"))
print replace(filtered_words, string) def replace(filtered_words,string):
new_string = string
for words in filtered_words:
if words in string:
new_string = string.replace(words,"*"*len(words))
if new_string == string:
return new_string
else:
return replace(filtered_words,new_string) if __name__ == '__main__':
filter_replace(raw_input("Type:"))

运行测试结果:

 

最新文章

  1. Ruby之基本数据类型(三)
  2. 第一章 基础设施,1.3 阿里视频云ApsaraVideo是怎样让4000万人同时狂欢的(作者:蔡华)
  3. Golang学习 - sort 包
  4. MySQL 行子查询(转)
  5. ListView视图缓存错位问题
  6. hdu 1263 水果
  7. 【SICP读书笔记(二)】使用过程来黏合数据 —— 酷炫吊的消息传递机制
  8. 天天果园,中粮我买网等生鲜APP竞品分析
  9. 在Eclipse如何实现在xml文件实现代码提示
  10. 201521123107 《Java程序设计》第3周学习总结
  11. java 5并发中的阻塞队列ArrayBlockingQueue的使用以及案例实现
  12. [原创]手把手教你写网络爬虫(7):URL去重
  13. jpa Auditor 自动赋值与自定义 @CreatedBy @LastModifiedBy @CreatedDate @LastModifiedDate
  14. [微信跳转链接]之WAP浏览器跳转微信指定页面,微信跳转链接
  15. CCTV5 前端
  16. NET-SNMP基本命令
  17. .gho文件检查
  18. 指针delete之后赋值为null
  19. 恢复VS2010/VS2013项目为VS2008项目
  20. MySQL数据库----事务处理

热门文章

  1. PCRE函数简介和使用示例【转】
  2. 安装和使用solr
  3. JavaScript插件:快速选择日期----jedate日历插件
  4. WCF异步调用
  5. CocoaPods iOS 开源库管理
  6. aaronyang的百度地图API之LBS云与.NET开发 Javascript API 2.0【把数据存到LBS云1/2】
  7. Docker学习笔记 ---存储与管理
  8. 关于ViewPager设置属性页setCurrentItem会阻塞主线程ANR总结
  9. Ios开发中UILocalNotification实现本地通知实现提醒功能
  10. 公网用户接入NAT后面的freeswitch配置