From 020f0ee6d5836be705052dd7a05a4b0522b243c6 Mon Sep 17 00:00:00 2001 From: Peterpig <309871271@qq.com> Date: Thu, 15 Jan 2015 12:54:55 +0800 Subject: [PATCH 1/3] task 0010 added --- Mr.Lin/0010/0010.py | 114 +++++++++++++++++++++++++++++++++++++++ Mr.Lin/0010/validate.JPG | Bin 0 -> 2715 bytes Mr.Lin/0010/validate.gif | Bin 0 -> 2616 bytes 3 files changed, 114 insertions(+) create mode 100644 Mr.Lin/0010/0010.py create mode 100644 Mr.Lin/0010/validate.JPG create mode 100644 Mr.Lin/0010/validate.gif diff --git a/Mr.Lin/0010/0010.py b/Mr.Lin/0010/0010.py new file mode 100644 index 00000000..c1222283 --- /dev/null +++ b/Mr.Lin/0010/0010.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Author: 30987 +# @Date: 2015-01-14 18:20:01 +# @Last Modified by: 30987 +# @Last Modified time: 2015-01-15 12:20:59 + +#第 0010 题:使用 Python 生成字母验证码图片 + +import random +from PIL import Image,ImageDraw,ImageFont,ImageFilter + +_letter_cases = 'abcdefghjkmnpqrstuvwxy' #小写字母,忽略了容易误解的i,l,o,z +_upper_cases = _letter_cases.upper() #转换为大写字母 +_number = ''.join(map(str,range(3,10))) #生成[3,4,5,6,7,8,9],然后将他们连接为3456789 +init_chars=''.join((_letter_cases,_upper_cases,_number)) + + +def create_validate_code(size=(120, 30), + chars=init_chars, + img_type="JPEG", + mode="RGB", + bg_color=(255, 255, 255), + fg_color=(0, 0, 255), + font_size=18, + font_type="ahronbd.ttf", + length=4, + draw_lines=True, + n_line=(1, 2), + draw_points=True, + point_chance = 2): + """ + @todo:生成验证码图片 + @param size: 生成验证码图片的尺寸,默认(240,60) + @param chars: 图片中的字符集 + @param img_type:图片保存的格式,默认JPEG,支持GIF,JPEG,TIFF,PNG + @param mode: 图片颜色的模式,默认RGB + @param bg_color:图片背景颜色,默认白色 + @param fg_color:前景颜色,验证码字符的颜色,默认蓝色#0000FF + @param font_size:验证码字体字体大小,默认18号 + @param font_type:验证码字体,默认ae_AlArabiya.ttf + @param length: 验证码字符个数 + @param draw_lines:是否有干扰线 + @param n_line: 干扰线条数,元组,只有draw_lines为True时才有效 + @param draw_points:是否画干扰点 + @param point_chance:干扰点出现的概率,范围为[0,100] + """ + width,height = size + img = Image.new(mode,size,bg_color) #创建图形 + draw = ImageDraw.Draw(img) #创建画笔 + + def get_chars(): + #生成验证码字符 + return random.sample(chars,length) #random.sample(),从chars中去length长度的内容返回为列表['4', 'g', 'U', 'n'] + + def creat_lines(): + #创建干扰线 + line_num = random.randint(*n_line) #干扰线条数,随机生成,randon.randint(a,b) 用于生成一个指定范围内的整数,a为下限,b为上限,生成的随机整数a<=n<=b;若a=b,则n=a;若a>b,报错 + + for i in range(line_num): + #起始点 + begin = (random.randint(0,size[0]),random.randint(0,size[1])) + #结束点 + end = (random.randint(0,size[0]),random.randint(0,size[1])) + draw.line([begin,end],fill=(0,0,0)) + + def creat_points(): + #绘制干扰点 + chance = min(100,max(0,int(point_chance))) #大小限制在[0,100] + + for w in xrange(width): + for h in xrange(height): + tmp = random.randint(0,100) + if tmp > 100-chance: + draw.point((w,h),fill=(0,0,0)) + + def creat_chars(): + #绘制验证码 + c_chars = get_chars() + strs = ' %s' %''.join(c_chars) #每个字符前以空格隔开 + + font = ImageFont.truetype(font_type,font_size) + font_width,font_height = font.getsize(strs) + + #draw.text((width-font_width)/3,(height-font_height)/3,strs,font=font,fill=fg_color) + draw.text(((width - font_width) / 3, (height - font_height) / 3),strs, font=font, fill=fg_color) + + return ''.join(c_chars) + + if draw_lines: + creat_lines() + if draw_points: + creat_points() + strs = creat_chars() + + #图形扭曲 + #param = [1-float(random.randint(1,2)/100),0,0,0,1 - float(random.randint(1, 10)) / 100,float(random.randint(1, 2)) / 5000.001,float(random.randint(1, 2)) / 500] + params = [1 - float(random.randint(1, 2)) / 100, + 0, + 0, + 0, + 1 - float(random.randint(1, 10)) / 100, + float(random.randint(1, 2)) / 500, + 0.001, + float(random.randint(1, 2)) / 500 + ] + img = img.transform(size, Image.PERSPECTIVE, params) #创建扭曲 + img = img.filter(ImageFilter.EDGE_ENHANCE_MORE) # 滤镜,边界加强(阈值更大) + img.save("validate.JPG", "JPEG") + + + +if __name__ == '__main__': + code_img = create_validate_code(point_chance = 5) diff --git a/Mr.Lin/0010/validate.JPG b/Mr.Lin/0010/validate.JPG new file mode 100644 index 0000000000000000000000000000000000000000..a096770d3a2d6f30ee2220e1584079e77c652f44 GIT binary patch literal 2715 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 uA*%TEJttl-CZ}gSkZ5 Date: Fri, 16 Jan 2015 10:11:09 +0800 Subject: [PATCH 2/3] 0011 and 0012 added MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 由于本人属于菜鸟,0011和0012在读取windows下读取中文时,无法解决编码问题。询问好久,但是仍无法解决。 --- Mr.Lin/0007/0007.py | 4 ++-- Mr.Lin/0011/0011.py | 30 +++++++++++++++++++++++++++++ Mr.Lin/0011/filtered_words.txt | 11 +++++++++++ Mr.Lin/0012/0012.py | 35 ++++++++++++++++++++++++++++++++++ Mr.Lin/0012/filtered_words.txt | 11 +++++++++++ 5 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 Mr.Lin/0011/0011.py create mode 100644 Mr.Lin/0011/filtered_words.txt create mode 100644 Mr.Lin/0012/0012.py create mode 100644 Mr.Lin/0012/filtered_words.txt diff --git a/Mr.Lin/0007/0007.py b/Mr.Lin/0007/0007.py index 4e30cbee..261abc71 100644 --- a/Mr.Lin/0007/0007.py +++ b/Mr.Lin/0007/0007.py @@ -3,14 +3,14 @@ # @Author: 30987 # @Date: 2015-01-14 11:07:02 # @Last Modified by: 30987 -# @Last Modified time: 2015-01-14 11:47:11 +# @Last Modified time: 2015-01-14 17:24:03 #第 0007 题:有个目录,里面是你自己写过的程序,统计一下你写过多少行代码。包括空行和注释,但是要分别列出来。 # # """ 此处统计的注释行# 并不会将#!/usr/bin/env python # -*- coding: utf-8 -*- 统计在内,同时if __main__里面的注释也不会进行统计 - +""" def code_count(code_file): total_lines = 0 diff --git a/Mr.Lin/0011/0011.py b/Mr.Lin/0011/0011.py new file mode 100644 index 00000000..75032f05 --- /dev/null +++ b/Mr.Lin/0011/0011.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Author: 30987 +# @Date: 2015-01-15 12:22:00 +# @Last Modified by: 30987 +# @Last Modified time: 2015-01-15 12:37:53 + +#第 0011 题: 敏感词文本文件 filtered_words.txt,里面的内容为以下内容,当用户输入敏感词语时,则打印出 Freedom,否则打印出 Human Rights。 + +def fileter_words(): + file_obj = open('filtered_words.txt','r') + file = file_obj.read() + filt = file.split('\n') + file_obj.close + + while True: + flag = False + input_text = raw_input("please input:") + for x in filt: + if input_text.find(x) != -1 : + flag = True + if flag: + print "Freedom" + else: + print "Human Rights。" + + + +if __name__ == '__main__': + fileter_words() diff --git a/Mr.Lin/0011/filtered_words.txt b/Mr.Lin/0011/filtered_words.txt new file mode 100644 index 00000000..444eb7c6 --- /dev/null +++ b/Mr.Lin/0011/filtered_words.txt @@ -0,0 +1,11 @@ + +Ա +Ա +쵼 +ţ +ţ + + +love +sex +jiangge \ No newline at end of file diff --git a/Mr.Lin/0012/0012.py b/Mr.Lin/0012/0012.py new file mode 100644 index 00000000..49dcd538 --- /dev/null +++ b/Mr.Lin/0012/0012.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Author: 30987 +# @Date: 2015-01-15 18:36:29 +# @Last Modified by: 30987 +# @Last Modified time: 2015-01-16 10:09:01 +# +# 第 0012 题: 敏感词文本文件 filtered_words.txt,里面的内容 和 0011题一样,当用户输入敏感词语,则用 星号 * 替换,例如当用户输入「北京是个好城市」,则变成「**是个好城市」。 +# 发现读取文件的时候中文识别不了。。 +# + + +def filter_words(words): + #从文件中读取过滤单词名单 + file_object = open('filtered_words.txt','r') + filtered_words = [] + for line in file_object: + filtered_words.append(line.strip('\n')) + file_object.close() + #print filtered_words + #判断filtered_words是否在用户输入的words中 + for f_words in filtered_words: + #f_words.decode('gbk') + if f_words in words: + words = words.replace(f_words,'*' * len(f_words)) + + + print(words) + + +if __name__ == '__main__': + input_words = raw_input('Please input some words:') + input_words.decode('gbk') + print "input_words:",input_words + filter_words(input_words) diff --git a/Mr.Lin/0012/filtered_words.txt b/Mr.Lin/0012/filtered_words.txt new file mode 100644 index 00000000..503155b1 --- /dev/null +++ b/Mr.Lin/0012/filtered_words.txt @@ -0,0 +1,11 @@ +北京 +程序员 +公务员 +领导 +牛比 +牛逼 +你娘 +你妈 +love +sex +jiangge \ No newline at end of file From ff632bce55f2fa66d8d6c890ddf7b54bd4f81c8d Mon Sep 17 00:00:00 2001 From: Peterpig <309871271@qq.com> Date: Fri, 16 Jan 2015 10:45:23 +0800 Subject: [PATCH 3/3] 0013 task added --- Mr.Lin/0013/0013.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Mr.Lin/0013/0013.py diff --git a/Mr.Lin/0013/0013.py b/Mr.Lin/0013/0013.py new file mode 100644 index 00000000..d5bad64a --- /dev/null +++ b/Mr.Lin/0013/0013.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Author: 30987 +# @Date: 2015-01-16 10:18:31 +# @Last Modified by: 30987 +# @Last Modified time: 2015-01-16 10:37:52 + +#第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-) +#网址 http://tieba.baidu.com/p/2166231880 +# +#经分析,每张的图片都有类似的格式,其中只有src地址不一样。所有写正则即可 +# +# +#正则如下 +#r'