From 4a0e5afeee8616cb119f6463d77bbe605384e4c9 Mon Sep 17 00:00:00 2001 From: darcy Date: Fri, 7 Jul 2017 10:53:31 +0800 Subject: [PATCH 01/19] =?UTF-8?q?0000=E9=A2=98=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- darcycool/0000/0000.py | 10 ++++++++++ darcycool/0000/dog.jpg | Bin 0 -> 2022 bytes darcycool/0000/photo.jpg | Bin 0 -> 3083 bytes 3 files changed, 10 insertions(+) create mode 100644 darcycool/0000/0000.py create mode 100644 darcycool/0000/dog.jpg create mode 100644 darcycool/0000/photo.jpg diff --git a/darcycool/0000/0000.py b/darcycool/0000/0000.py new file mode 100644 index 00000000..0964692f --- /dev/null +++ b/darcycool/0000/0000.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# 第 0000 题: 将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果。 类似于图中效果 + +from PIL import Image, ImageDraw, ImageFont + +dogIm = Image.open('photo.jpg') +width, high = dogIm.size +draw = ImageDraw.Draw(dogIm) +draw.text((width - 10, 0), '4', fill='red', font=ImageFont.truetype('Avenir.ttc', 10)) +dogIm.save('dog.jpg') diff --git a/darcycool/0000/dog.jpg b/darcycool/0000/dog.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f899717d1028b86cd5682d55a68218f47ea0089d GIT binary patch literal 2022 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 F`5y{BSGoWI literal 0 HcmV?d00001 From e4b42738f5e3e49f2f84502b64a13467cc8a7deb Mon Sep 17 00:00:00 2001 From: darcy Date: Fri, 7 Jul 2017 11:14:07 +0800 Subject: [PATCH 02/19] =?UTF-8?q?=E6=8F=90=E4=BA=A40001=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- darcycool/0001/0001.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 darcycool/0001/0001.py diff --git a/darcycool/0001/0001.py b/darcycool/0001/0001.py new file mode 100644 index 00000000..f27d2fdc --- /dev/null +++ b/darcycool/0001/0001.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# 第 0001 题: 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? +import string +import random + + +def id_generator(size=20, chars=string.ascii_uppercase + string.digits): + return ''.join(random.choice(chars) for _ in range(size)) + + +def get_activation_code(size=200): + activation_code = set() + for i in range(size): + activation_code.add(id_generator()) + return activation_code + +print(get_activation_code()) From 23dbc2434358689ce90a9e516a748c23cfdcc554 Mon Sep 17 00:00:00 2001 From: darcy Date: Fri, 7 Jul 2017 15:05:32 +0800 Subject: [PATCH 03/19] commit 0002 --- darcycool/0000/{0000.py => add_digits.py} | 0 .../{0001.py => generator_activation_code.py} | 0 darcycool/0002/store_into_mysql.py | 35 +++++++++++++++++++ 3 files changed, 35 insertions(+) rename darcycool/0000/{0000.py => add_digits.py} (100%) rename darcycool/0001/{0001.py => generator_activation_code.py} (100%) create mode 100644 darcycool/0002/store_into_mysql.py diff --git a/darcycool/0000/0000.py b/darcycool/0000/add_digits.py similarity index 100% rename from darcycool/0000/0000.py rename to darcycool/0000/add_digits.py diff --git a/darcycool/0001/0001.py b/darcycool/0001/generator_activation_code.py similarity index 100% rename from darcycool/0001/0001.py rename to darcycool/0001/generator_activation_code.py diff --git a/darcycool/0002/store_into_mysql.py b/darcycool/0002/store_into_mysql.py new file mode 100644 index 00000000..919c8bc9 --- /dev/null +++ b/darcycool/0002/store_into_mysql.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# 第 0002 题: 将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中。 +import random +import string + +import pymysql + + +def id_generator(size=20, chars=string.ascii_uppercase + string.digits): + return ''.join(random.choice(chars) for _ in range(size)) + + +def get_activation_code(size=200, len=20): + activation_code = set() + for i in range(size): + activation_code.add(id_generator(len)) + return activation_code + + +conn = pymysql.connect(host='127.0.0.1', + port=3306, + user='root', + passwd='1234', + db='darcy') +cursor = conn.cursor() +sql = 'insert into activation_code (code) VALUE (%s)' + +try: + cursor.executemany(sql, get_activation_code()) +except Exception as e: + print('执行Mysql: %s时出错: % s' % (sql, e)) +finally: + cursor.close() + conn.commit() + conn.close() From b4e216e78c34ca93fb845be5f42f4e333b634faa Mon Sep 17 00:00:00 2001 From: darcy Date: Fri, 7 Jul 2017 16:02:01 +0800 Subject: [PATCH 04/19] commit 0003 --- darcycool/0003/store_into_redis.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 darcycool/0003/store_into_redis.py diff --git a/darcycool/0003/store_into_redis.py b/darcycool/0003/store_into_redis.py new file mode 100644 index 00000000..86513d06 --- /dev/null +++ b/darcycool/0003/store_into_redis.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# 第 0003 题: 将 0001 题生成的 200 个激活码(或者优惠券)保存到 Redis 非关系型数据库中。 +import random +import string +import redis + + +def id_generator(size=20, chars=string.ascii_uppercase + string.digits): + return ''.join(random.choice(chars) for _ in range(size)) + + +def get_activation_code(size=200, len=20): + activation_code = set() + for i in range(size): + activation_code.add(id_generator(len)) + return activation_code + + +def save_codes(codes): + r = redis.Redis(host='127.0.0.1', + port=6379, + db=0) + pipeline = r.pipeline() + for c in codes: + pipeline.sadd('code', c) + pipeline.execute() + return r.scard('code') + + +save_codes(get_activation_code(200, 20)) From bd2fecf7a5b333b583774f98e206d67bca54f5d9 Mon Sep 17 00:00:00 2001 From: darcy Date: Mon, 7 Aug 2017 13:17:10 +0800 Subject: [PATCH 05/19] commit0004 --- darcycool/0004/count_words.py | 20 ++++++++++++++++++++ darcycool/0004/words.txt | 1 + 2 files changed, 21 insertions(+) create mode 100644 darcycool/0004/count_words.py create mode 100644 darcycool/0004/words.txt diff --git a/darcycool/0004/count_words.py b/darcycool/0004/count_words.py new file mode 100644 index 00000000..00a2f338 --- /dev/null +++ b/darcycool/0004/count_words.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# 第 0004 题: 任一个英文的纯文本文件,统计其中的单词出现的个数。 +import re + +file = open('words.txt', 'r') +str = file.read() + +reObj = re.compile('\b?(\w+)\b?') +words = reObj.findall(str) + +wordDict = dict() + +for word in words: + if word.lower() in wordDict: + wordDict[word.lower()] += 1 + else: + wordDict[word.lower()] = 1 + +for key, value in wordDict.items(): + print('%s: %s' % (key, value)) diff --git a/darcycool/0004/words.txt b/darcycool/0004/words.txt new file mode 100644 index 00000000..44e2c81c --- /dev/null +++ b/darcycool/0004/words.txt @@ -0,0 +1 @@ +The amount of stupidity in this story warrants that this is going to be somewhat long, so I start at the end: as the title says, an 18 year old guy was arrested two days ago for 'hacking' the new Budapest public transport e-Ticket system a week before, even though he immediately reported the vulnerability he found. From ff4411c57cfe49003e968001daf4fa975262761f Mon Sep 17 00:00:00 2001 From: darcy Date: Mon, 7 Aug 2017 13:52:04 +0800 Subject: [PATCH 06/19] commit 0005 --- darcycool/0005/change_images_size.py | 49 +++++++++++++++++++++++++++ darcycool/0005/imgs/photo.jpg | Bin 0 -> 3083 bytes 2 files changed, 49 insertions(+) create mode 100644 darcycool/0005/change_images_size.py create mode 100644 darcycool/0005/imgs/photo.jpg diff --git a/darcycool/0005/change_images_size.py b/darcycool/0005/change_images_size.py new file mode 100644 index 00000000..7f1f7cf1 --- /dev/null +++ b/darcycool/0005/change_images_size.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# 第 0005 题: 你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小。 +import os + +from PIL import Image + +rootDir = 'imgs/' + + +def judge_size(img): + imgSize = img.size + return max(imgSize) > 1136 + + +def return_size(img): + max, min = img.size + if max > min: + return max, min + else: + return min, max + + +def change_size(img, max, min): + value = max / 1136 + min = int(min / value) + newImg = img.resize((1136, min), Image.ANTIALIAS) + return newImg + + +for parent, dirnames, filenames in os.walk(rootDir): + for filename in filenames: + fName = filename + print(filename) + filename = parent + os.sep + filename + fPostfix = os.path.splitext(filename)[1] + try: + img = Image.open(filename) + except: + print(filename) + continue + # img.load() + print(filename) + print(fPostfix) + if (fPostfix == '.jpg' or fPostfix == '.png' or fPostfix == '.JPG' or fPostfix != '.PNG'): + print(judge_size(img)) + if (judge_size(img) == True): + max, min = return_size(img) + newimg = change_size(img, max, min) + newimg.save(rootDir + os.sep + fName) diff --git a/darcycool/0005/imgs/photo.jpg b/darcycool/0005/imgs/photo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2adb08f999f5b98c01d26b3da5f211f2a2e7912c GIT binary patch literal 3083 zcmXv~2{@E(7k+0mW^6N)rEJN*M3FGEXPdEPj46pv_Dpu6J{0qt%9h=bX+p-5tf8T- z$wZ|rW#2{0@}q=`e_Y@H-RC^db)IwXbFOng`@{Rw019u8GY3E*0040e*q;HE&93`; z0{{-E3~&PnX>|}7fO8^I&N+ZZV4#nm7l%6r!~qa6_`o@Uava7DgF&INLvT13H@^Ts zFAtK3hff%T;^RNWk3ymO`S}GH?< zITf5%(9Y=-0|A_&2fy_%U|gI=IOt%g8k#c{0tH|Y2<)Ho0UL@w2E(Wua~+a)3)UdS z3Z}IS+ZWW#?2iJxob|wH2pTX1G>eb=#~4P1&$7&Dg>HejKBv$=t%PqI_R1o2$jdnq z>nQ=vqaxBr3~ly-G4!(uleQU)kFtk@6O-!h&>QiX=W$t){;fZCKHr~8Q1I+x-2N0e z_{~+HI#}n*+qP}`gZ7*yG9A4#`Xiyg=#|$;g=}V#Vtz{I&fzZ(LWYk^Jg3G%dm?A5 zivOHGJNpF#XIm}GFx8+!3KvBXE%T9MVlPJ}>gZ2|wVJC-pkmuo=yAcVthe1C`qQyo zdf8i-RKq3=#DR4GwPoY6UTl_YyiY$liIm?YlRB*dUUFzTTJq7?G}BYdm?8k(2avW@ zny0sL|FZd-_|NEeCS>!ETF}csgp!=7h3??374Tke6=uiQt9kd&;FIOXa|KGR_pI6W z23`fCsH*DCz?Pw{!{$%c#|vK7n7Q>S^<=cC3I9i>TR-OM^!zrKlHHh8BYnu~+{zPO z@%mp9vbR>@>^adT$CwZ)11kj?F1-Gr!K35#vO#)6>+=WRDXkS3+9Zbsc4toftt5Sz zmpgB1*NmvQSfXT=KEE!noG_(4SX#opR_Hq0emu71mM~<-pTx;VmXYxRX1&TK$wjwMPRr*?hAf6W+PHxF z$jGJV?vSIEO|`KB17Fj20t!qa?hz)hQr?bcr+7VBQOa4wRcn2F-OM{~lXdHKu+#Cl zwny_lla3*c@^~3`yg?DB=VxutHL{95G4zcEVHp{jZ1>^qK*-qX^E-1v-90sg;!m_3BUJ;d#47}_Bf9B`PTamlx*yP?P z8_Xa2?mccOmp^WlAVbfIw|HBWtjiu}>;r+j?QA=ZPh{OunycakHp!y*g;Z}H*?DSU zad7FLy6D-!kfCK_WoPlU;1s^1^gDwcrg};ytgWZ=V!V`#?=0=5-o%;sq|en87mL4~ zh)3LXZoiI0>i&h#2r{z!!o5m#CpN+!td_S34@>Rlzj#OF9XLXJoA+{-Gga)HuqpVviQUU9vT^?x1L6pnBjyvFooFsA>AL2ejeZ|nFf zKx!*NZJzS2{i$_f!xID=^ z7ELL4rrX+Jj!F*3UA5#_lq?U>K2v(5zN)$F{RwYlSKisz5yZK_qTc?{en9f-a*Zyk zot4o-31?<0LdJg*T3hMPjxD34lGq<#$FK!27Jk=nDy_+NonPGbm7=2H&)fngPm0zO zj(}clR3<-fSBQJJ59F-V)aX|QO#DZwlUB)k4s-csW`DBZMo!72cKP3KX!+` zjkni3BEfQYaTIcmRYyeU9`F7S+O2R7$)B0r-9!k%fOhUab63;W8G{ELZE7++E}kT{ zcvuO`T%57n_NdHX-;(UQk?og0S{@{PkR@5=GM~20~iEHSmq(7F!t?T6?7lJ{UK!V%9eAOii~U(UZ=({g%FZ~_ zZ51ruNv#~U&$p?B#fvPlYURsh<}z1A^!89Lw&(g%12MfAIT(KMv2qI`uY;r4ul zz1@;!D4r3f7A9xPph5y_q9ZXa!*qm3x~SRO5PL@6FWicn)#Qq3bqulAJ-+DSP`2bw zw5`89700aZV`-b54s#q2yakyc%0yp^&`#McjjZtAi1!Oxz2|Mg_)cT1>T|mdl)*1* z+u78Ip_|&Z&IRTPRa?UD!&=av2(03kT$}@MBbdi>qSP%tadbksxnUnj`Ao6#Wg#}C z#SU-rI9eqO^zhW)yK^v`=;#9E{U7@Ef^YG=u zuW#Hg5P4a?aj7plxys|J+kHM0ELY&IIRAR}l}4}cno@4F7 zZT304CUAAA5)UbFFr1~PD7)3MQ1^=t%4C*y_R!XJI_d^Dl7;2MVdiGi_&1Mr$^N>G z#EaE}_u4^tn@XEl^DPT}T5fMlP1m%`2`!zC4#e-W1RuUak{n6do9vN;xaoIiUJfCk z>XRDB^r=lxO{b(kxJN!w;63d^Nl*D(Z^_&k%~_C% zLk}fA`)+f>d)stlQ5>>4R;zlnW82(KjGA!mQjujAZ?n*#>J`#JnLa!6GTmPrUPRaj zY|?SxGVa_^YbH>B;GaWIEWkD8M2ol{e4bi@*TxPz5AOxtr zf{3Wwo~K<(o|L|#3rhrBk7o*H=8=^e*g-bc#(e{=8Salgn37+0PlfjX${_b{GFh4p zLpPnG_M+G6*?-i7>UbtsEnM-{4+R$BLxgQ%Xa9ytv!;i}vSmuLF$jp|)CHGzVIA1x z=0{gl_=x{asvFJH4bQpj|D!X<`R{X@n-h2k;4A{-MWN_Zkb_1|$+WibEAR>4s||Ir zqsM|eu4WF~m->d;i7{L1u+rx#vgu;|^(x=^VUS@7ypzpZDXt}PWqE2$g(RD2+eh6W F`5y{BSGoWI literal 0 HcmV?d00001 From 3e244dcd1fd7867bee798df147e50f1500286e63 Mon Sep 17 00:00:00 2001 From: darcy Date: Mon, 7 Aug 2017 14:48:00 +0800 Subject: [PATCH 07/19] commit 0006 --- darcycool/0006/diary/01.txt | 6 ++++++ darcycool/0006/diary/02.txt | 8 ++++++++ darcycool/0006/diary/03.txt | 9 +++++++++ darcycool/0006/important_word.py | 26 ++++++++++++++++++++++++++ 4 files changed, 49 insertions(+) create mode 100644 darcycool/0006/diary/01.txt create mode 100644 darcycool/0006/diary/02.txt create mode 100644 darcycool/0006/diary/03.txt create mode 100644 darcycool/0006/important_word.py diff --git a/darcycool/0006/diary/01.txt b/darcycool/0006/diary/01.txt new file mode 100644 index 00000000..298696ee --- /dev/null +++ b/darcycool/0006/diary/01.txt @@ -0,0 +1,6 @@ +Our goal is to generate for you a complete and modern Web app or microservice architecture, unifying: + +A high-performance and robust Java stack on the server side with Spring Boot +A sleek, modern, mobile-first front-end with Angular and Bootstrap +A robust microservice architecture with JHipster Registry, Netflix OSS, ELK stack and Docker +A powerful workflow to build your application with Yeoman, Webpack/Gulp and Maven/Gradle diff --git a/darcycool/0006/diary/02.txt b/darcycool/0006/diary/02.txt new file mode 100644 index 00000000..0f16ee12 --- /dev/null +++ b/darcycool/0006/diary/02.txt @@ -0,0 +1,8 @@ +You can checkout a sample generated AngularJS 1 application here. + +You can checkout a sample generated Angular 4 application here. + +JHipster is Open Source, and all development is done on GitHub + +If you want to code with us, feel free to join! +If you like the project, please give us a star on GitHub diff --git a/darcycool/0006/diary/03.txt b/darcycool/0006/diary/03.txt new file mode 100644 index 00000000..3dbd3b72 --- /dev/null +++ b/darcycool/0006/diary/03.txt @@ -0,0 +1,9 @@ +Install JHipster yarn global add generator-jhipster + +Create a new directory and go into it mkdir myApp && cd myApp + +Run JHipster and follow instructions on screen jhipster + +Model your entities with JDL Studio and download the resulting jhipster-jdl.jh file + +Generate your entities with jhipster import-jdl jhipster-jdl.jh diff --git a/darcycool/0006/important_word.py b/darcycool/0006/important_word.py new file mode 100644 index 00000000..c9664aae --- /dev/null +++ b/darcycool/0006/important_word.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# 第 0006 题: 你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词。 +import operator +import os +import re + +rootDir = 'diary/' + + +def count_words(filename, words): + wordDict = dict() + for word in words: + if word.lower() in wordDict: + wordDict[word.lower()] += 1 + else: + wordDict[word.lower()] = 1 + print('%s word:%s' % (filename, max(wordDict.items(), key=operator.itemgetter(1))[0])) + + +for top, dirnames, filenames in os.walk(rootDir): + for filename in filenames: + file = open(rootDir + filename, 'r') + str = file.read() + reObj = re.compile('\b?(\w+)\b?') + words = reObj.findall(str) + count_words(filename, words) From f1eec249a0b9b0118934a342dac3b9dacdfe78c6 Mon Sep 17 00:00:00 2001 From: darcy Date: Mon, 7 Aug 2017 15:25:21 +0800 Subject: [PATCH 08/19] commit 0006 --- darcycool/0007/analysis_file.py | 17 +++++++ darcycool/0007/source/change_images_size.py | 49 +++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 darcycool/0007/analysis_file.py create mode 100644 darcycool/0007/source/change_images_size.py diff --git a/darcycool/0007/analysis_file.py b/darcycool/0007/analysis_file.py new file mode 100644 index 00000000..b35fc55e --- /dev/null +++ b/darcycool/0007/analysis_file.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# 第 0007 题: 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码。包括空行和注释,但是要分别列出来。 +import linecache + +file = open('source/change_images_size.py', 'r') + +fileLines = len(file.readlines()) + +print('代码行数:%s' % fileLines) + +blankLines = 0 + +for line in range(fileLines): + if len((linecache.getline('source/change_images_size.py', line).split())) == 0: + blankLines += 1 + +print(blankLines) diff --git a/darcycool/0007/source/change_images_size.py b/darcycool/0007/source/change_images_size.py new file mode 100644 index 00000000..7f1f7cf1 --- /dev/null +++ b/darcycool/0007/source/change_images_size.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# 第 0005 题: 你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小。 +import os + +from PIL import Image + +rootDir = 'imgs/' + + +def judge_size(img): + imgSize = img.size + return max(imgSize) > 1136 + + +def return_size(img): + max, min = img.size + if max > min: + return max, min + else: + return min, max + + +def change_size(img, max, min): + value = max / 1136 + min = int(min / value) + newImg = img.resize((1136, min), Image.ANTIALIAS) + return newImg + + +for parent, dirnames, filenames in os.walk(rootDir): + for filename in filenames: + fName = filename + print(filename) + filename = parent + os.sep + filename + fPostfix = os.path.splitext(filename)[1] + try: + img = Image.open(filename) + except: + print(filename) + continue + # img.load() + print(filename) + print(fPostfix) + if (fPostfix == '.jpg' or fPostfix == '.png' or fPostfix == '.JPG' or fPostfix != '.PNG'): + print(judge_size(img)) + if (judge_size(img) == True): + max, min = return_size(img) + newimg = change_size(img, max, min) + newimg.save(rootDir + os.sep + fName) From 41643381124777c839f9f014f902b116b59c2b81 Mon Sep 17 00:00:00 2001 From: darcy Date: Mon, 7 Aug 2017 15:49:00 +0800 Subject: [PATCH 09/19] commit 0008 --- darcycool/0008/find_html_body.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 darcycool/0008/find_html_body.py diff --git a/darcycool/0008/find_html_body.py b/darcycool/0008/find_html_body.py new file mode 100644 index 00000000..e2ea0733 --- /dev/null +++ b/darcycool/0008/find_html_body.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# 第 0008 题: 一个HTML文件,找出里面的正文。 +import requests +from bs4 import BeautifulSoup + +r = 'https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html' +headers = { + 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'} +url = requests.get(r, headers=headers) +soup = BeautifulSoup(url.text, 'html.parser') +print(soup.get_text()) From fa4a2edbf864a9019499bdc6f5e12dea588a1fb2 Mon Sep 17 00:00:00 2001 From: darcy Date: Thu, 10 Aug 2017 09:55:27 +0800 Subject: [PATCH 10/19] commit 0009 --- darcycool/0009/find_link.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 darcycool/0009/find_link.py diff --git a/darcycool/0009/find_link.py b/darcycool/0009/find_link.py new file mode 100644 index 00000000..ba1790bf --- /dev/null +++ b/darcycool/0009/find_link.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# 第 0009 题: 一个HTML文件,找出里面的链接。 + +import requests +from bs4 import BeautifulSoup + +url = r'https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html' +response = requests.get(url) +soup = BeautifulSoup(response.text) +for link in soup.find_all('a'): + print(link.get('href')) From bc0efa18591d3e8d139886c53fcb657cb872befe Mon Sep 17 00:00:00 2001 From: darcy Date: Thu, 10 Aug 2017 10:44:35 +0800 Subject: [PATCH 11/19] commit 0010 --- darcycool/0010/generator_verification_code.py | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 darcycool/0010/generator_verification_code.py diff --git a/darcycool/0010/generator_verification_code.py b/darcycool/0010/generator_verification_code.py new file mode 100644 index 00000000..d9c9a97f --- /dev/null +++ b/darcycool/0010/generator_verification_code.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# 第 0010 题: 使用 Python 生成类似于下图中的字母验证码图片 +import random +import string + +from PIL import ImageDraw, Image, ImageFont, ImageFilter + + +def get_code(): + return [random.choice(string.ascii_letters) for _ in range(4)] + + +def get_point_color(): + return (random.randint(65, 90), random.randint(65, 90), random.randint(65, 90)) + + +def get_color(): + return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127)) + + +def get_picture(): + width = 230 + height = 60 + # 画布 + im = Image.new('RGB', (width, height), (255, 255, 255)) + font = ImageFont.truetype('Avenir.ttc', 40) + draw = ImageDraw.Draw(im) + code = get_code() + + for t in range(4): + draw.text((60 * t + 10, 0), code[t], font=font, fill=get_color()) + + # 噪点 + for _ in range(random.randint(2000, 3000)): + draw.point((random.randint(0, width), random.randint(0, height)), fill=get_point_color()) + + # 模糊 + im = im.filter(ImageFilter.BLUR) + + im.save("".join(code) + '.jpg', 'jpeg') + + +if __name__ == '__main__': + get_picture() From 167dfa6473ce6fb3e1de777129d3a6974d6ad967 Mon Sep 17 00:00:00 2001 From: darcy Date: Thu, 10 Aug 2017 14:04:09 +0800 Subject: [PATCH 12/19] commit 0011,0012 --- darcycool/0011/filter_words.py | 71 +++++++++++++++++++++++++++++++ darcycool/0011/filtered_words.txt | 11 +++++ darcycool/0012/filter_words.py | 69 ++++++++++++++++++++++++++++++ darcycool/0012/filtered_words.txt | 11 +++++ 4 files changed, 162 insertions(+) create mode 100644 darcycool/0011/filter_words.py create mode 100644 darcycool/0011/filtered_words.txt create mode 100644 darcycool/0012/filter_words.py create mode 100644 darcycool/0012/filtered_words.txt diff --git a/darcycool/0011/filter_words.py b/darcycool/0011/filter_words.py new file mode 100644 index 00000000..2614fc89 --- /dev/null +++ b/darcycool/0011/filter_words.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +# 第 0011 题: 敏感词文本文件 filtered_words.txt,里面的内容为以下内容,当用户输入敏感词语时,则打印出 Freedom,否则打印出 Human Rights。 + + +class DFAFilter: + def __init__(self): + self.keyword_chains = {} + self.delimit = '\x00' + + def add(self, keyword): + keyword = keyword.lower() + chars = keyword.strip() + if not chars: + return + level = self.keyword_chains + for i in range(len(chars)): + if chars[i] in level: + level = level[chars[i]] + else: + if not isinstance(level, dict): + break + for j in range(i, len(chars)): + level[chars[j]] = {} + last_level, last_char = level, chars[j] + level = level[chars[j]] + last_level[last_char] = {self.delimit: 0} + break + if i == len(chars) - 1: + level[self.delimit] = 0 + + def parse(self, path): + with open(path) as f: + for keyword in f: + self.add(keyword.strip()) + + def filter(self, message, repl="*"): + message = message.lower() + ret = [] + start = 0 + while start < len(message): + level = self.keyword_chains + step_ins = 0 + for char in message[start:]: + if char in level: + step_ins += 1 + if self.delimit not in level[char]: + level = level[char] + else: + print('Freedom') + return + else: + ret.append(message[start]) + break + else: + ret.append(message[start]) + start += 1 + + print('Human Rights') + return + + +if __name__ == "__main__": + + dfa = DFAFilter() + + file = open('filtered_words.txt', 'r') + for w in file.readlines(): + dfa.add(w) + + dfa.filter("你好北京北京京") + dfa.filter("你好") diff --git a/darcycool/0011/filtered_words.txt b/darcycool/0011/filtered_words.txt new file mode 100644 index 00000000..1b4f2244 --- /dev/null +++ b/darcycool/0011/filtered_words.txt @@ -0,0 +1,11 @@ +北京 +程序员 +公务员 +领导 +牛比 +牛逼 +你娘 +你妈 +love +sex +jiangge diff --git a/darcycool/0012/filter_words.py b/darcycool/0012/filter_words.py new file mode 100644 index 00000000..ed14cd66 --- /dev/null +++ b/darcycool/0012/filter_words.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +# 第 0012 题: 敏感词文本文件 filtered_words.txt,里面的内容 和 0011题一样,当用户输入敏感词语,则用 星号 * 替换,例如当用户输入「北京是个好城市」,则变成「**是个好城市」。 + + +class DFAFilter: + def __init__(self): + self.keyword_chains = {} + self.delimit = '\x00' + + def add(self, keyword): + keyword = keyword.lower() + chars = keyword.strip() + if not chars: + return + level = self.keyword_chains + for i in range(len(chars)): + if chars[i] in level: + level = level[chars[i]] + else: + if not isinstance(level, dict): + break + for j in range(i, len(chars)): + level[chars[j]] = {} + last_level, last_char = level, chars[j] + level = level[chars[j]] + last_level[last_char] = {self.delimit: 0} + break + if i == len(chars) - 1: + level[self.delimit] = 0 + + def parse(self, path): + with open(path) as f: + for keyword in f: + self.add(keyword.strip()) + + def filter(self, message, repl="*"): + message = message.lower() + ret = [] + start = 0 + while start < len(message): + level = self.keyword_chains + step_ins = 0 + for char in message[start:]: + if char in level: + step_ins += 1 + if self.delimit not in level[char]: + level = level[char] + else: + ret.append(repl * step_ins) + start += step_ins - 1 + break + else: + ret.append(message[start]) + break + else: + ret.append(message[start]) + start += 1 + + return ''.join(ret) + +if __name__ == "__main__": + + dfa = DFAFilter() + + file = open('filtered_words.txt', 'r') + for w in file.readlines(): + dfa.add(w) + + print(dfa.filter("你好北京北京京")) diff --git a/darcycool/0012/filtered_words.txt b/darcycool/0012/filtered_words.txt new file mode 100644 index 00000000..1b4f2244 --- /dev/null +++ b/darcycool/0012/filtered_words.txt @@ -0,0 +1,11 @@ +北京 +程序员 +公务员 +领导 +牛比 +牛逼 +你娘 +你妈 +love +sex +jiangge From f5e5f0256259d916751ee2db6997720d80826109 Mon Sep 17 00:00:00 2001 From: darcy Date: Thu, 10 Aug 2017 15:06:45 +0800 Subject: [PATCH 13/19] commit 0014 --- darcycool/0014/student.txt | 5 +++++ darcycool/0014/write_into_excel.py | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 darcycool/0014/student.txt create mode 100644 darcycool/0014/write_into_excel.py diff --git a/darcycool/0014/student.txt b/darcycool/0014/student.txt new file mode 100644 index 00000000..6851d593 --- /dev/null +++ b/darcycool/0014/student.txt @@ -0,0 +1,5 @@ +{ + "1":["张三",150,120,100], + "2":["李四",90,99,95], + "3":["王五",60,66,68] +} diff --git a/darcycool/0014/write_into_excel.py b/darcycool/0014/write_into_excel.py new file mode 100644 index 00000000..6dda213b --- /dev/null +++ b/darcycool/0014/write_into_excel.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# 第 0014 题: 纯文本文件 student.txt为学生信息,请将上述内容写到 student.xls 文件中 + +import json +from collections import OrderedDict + +import xlwt + +file = open('student.txt', 'r') + +students = json.loads(file.read()) + +wb = xlwt.Workbook() +ws = wb.add_sheet('学生信息') + +json.dumps(OrderedDict(students)) + +for index, items in enumerate(students.items()): + ws.write(index, 0, items[0]) + for j, v in enumerate(items[1]): + ws.write(index, j + 1, v) + +wb.save('学生信息.xls') From 33d37b435ccb6b81b47e1e4473e8fd562e3bcc1b Mon Sep 17 00:00:00 2001 From: darcy Date: Fri, 25 Aug 2017 16:29:59 +0800 Subject: [PATCH 14/19] commit 0015 --- darcycool/0006/important_word.py | 11 +++++++++ darcycool/0014/write_into_excel.py | 4 +-- ...6\347\224\237\344\277\241\346\201\257.xls" | Bin 0 -> 5632 bytes darcycool/0015/city.txt | 5 ++++ darcycool/0015/city.xls | Bin 0 -> 5632 bytes darcycool/0015/write_into_excel.py | 23 ++++++++++++++++++ 6 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 "darcycool/0014/\345\255\246\347\224\237\344\277\241\346\201\257.xls" create mode 100644 darcycool/0015/city.txt create mode 100644 darcycool/0015/city.xls create mode 100644 darcycool/0015/write_into_excel.py diff --git a/darcycool/0006/important_word.py b/darcycool/0006/important_word.py index c9664aae..b92127a2 100644 --- a/darcycool/0006/important_word.py +++ b/darcycool/0006/important_word.py @@ -24,3 +24,14 @@ def count_words(filename, words): reObj = re.compile('\b?(\w+)\b?') words = reObj.findall(str) count_words(filename, words) + +from collections import Counter + +for top, dirnames, filenames in os.walk(rootDir): + for filename in filenames: + file = open(rootDir + filename, 'r') + str = file.read() + reObj = re.compile('\b?(\w+)\b?') + words = reObj.findall(str) + words = map(lambda w: w.lower(), words) + print(filename, Counter(words).most_common(1)) diff --git a/darcycool/0014/write_into_excel.py b/darcycool/0014/write_into_excel.py index 6dda213b..8a87f5ca 100644 --- a/darcycool/0014/write_into_excel.py +++ b/darcycool/0014/write_into_excel.py @@ -8,13 +8,11 @@ file = open('student.txt', 'r') -students = json.loads(file.read()) +students = json.loads(file.read(), object_pairs_hook=OrderedDict) wb = xlwt.Workbook() ws = wb.add_sheet('学生信息') -json.dumps(OrderedDict(students)) - for index, items in enumerate(students.items()): ws.write(index, 0, items[0]) for j, v in enumerate(items[1]): diff --git "a/darcycool/0014/\345\255\246\347\224\237\344\277\241\346\201\257.xls" "b/darcycool/0014/\345\255\246\347\224\237\344\277\241\346\201\257.xls" new file mode 100644 index 0000000000000000000000000000000000000000..96d1f5e0249c1a7cbbb8b9370b1c433c820b8282 GIT binary patch literal 5632 zcmeHLO-NKx6#njWMrXvId6PyN*dSzSZbqTp=vYv$nyf{I1v;ihDH>BPYEhO6K@?GK ziWUiO+L&$np@Q1A2$Wm|Mc~-7RZ&o&y}omv6VotA5=cMqJl=QDJ?GqW&pr3v_wIX> z6ZZ7T-HH^ls2O?q<^++SAvffM>3Rs%JC0P-Wq>?I9{oib2nINj`F=bqeo-KEDf69z zg>m0AA~3^yAC8DTTEC%wV`F4#XtTzUFcL!((cmT}C0MCZg%$TJE>patmX8%%RB})cUb0c_`8MXDTXvMHmI= zt+l7WCzP%NVj_ilAt`8>0ANNvukwwnDkC{4xIX7KCC55M2>pmO+KtcLtpYwBd#*sItG zs`%#VW*>45q0ZEq8`p&%#?qzXPM4>}TSfOdk@T5_h&Qk=fKk zqm=yGv~lCI)YnI~C{$lz_0?>JaZeheMPQ!XF{W!?>1DvnfR_O;16~Ha40svvGVniV zfX7CjCEatqoHgZyDIXm2GeG|9%<-1eqkl64J2AlP7$Vq$ewIm`;LQIzEr;KvGb3wh zAsYXB>wIU$lu7?D6x-eGJ&9g)X&k)^HP5NzH{Xx`C61g%xrFY=U@pyKWsB}VbNq|# KEQkGX_5U3^$I!n3 literal 0 HcmV?d00001 diff --git a/darcycool/0015/city.txt b/darcycool/0015/city.txt new file mode 100644 index 00000000..b5a6874d --- /dev/null +++ b/darcycool/0015/city.txt @@ -0,0 +1,5 @@ +{ + "1" : "上海", + "2" : "北京", + "3" : "成都" +} diff --git a/darcycool/0015/city.xls b/darcycool/0015/city.xls new file mode 100644 index 0000000000000000000000000000000000000000..b020435b2949421ce0a19350dde0f784fe6daaf5 GIT binary patch literal 5632 zcmeHLO=uHQ5dLOy-M9N{ zJziXX&{;wa4WkL)-7uOf^cLl?-;aTI*Oji{hA2~I=pRBL9AY7xgLvAu)*`i(dY541 ze&7W;@PX$UTtIp@mrZRU9nu`eEy-bs+`?^YqS&cfC6rGn-=_SYdOlM=qMGZJC(*8Q zTxWU=A#B|F{Q78S%sH!?1!{zNQS6q);Npsm;NYkj_(l+t71^hJpYp5XgIy|jDo=9N z(5q*xV^cV?s6N-!+QT@5N^hJ!74lxng-^#GcNIQ5y_8o+OP7+XZ=Gdy^Q|+<7;-G4 z-|Dw+-4uG__^riNE_uCI?mZ(apAI3LPdSp!ds4F6QHEd!#FcwJi#@r2@t3yNUvwUR z;xGBc6&3N9__h9`i?f{2Xo6FmkO0GW0uRNA5n-F;<>U8EYY;F97z7Lg1_6VBLBJqj z5cu;5c)MJ0Z!h~)*`3M Date: Fri, 25 Aug 2017 16:38:07 +0800 Subject: [PATCH 15/19] commit 0016 --- darcycool/0016/numbers.txt | 5 +++++ darcycool/0016/numbers.xls | Bin 0 -> 5632 bytes darcycool/0016/write_into_excel.py | 20 ++++++++++++++++++++ 3 files changed, 25 insertions(+) create mode 100644 darcycool/0016/numbers.txt create mode 100644 darcycool/0016/numbers.xls create mode 100644 darcycool/0016/write_into_excel.py diff --git a/darcycool/0016/numbers.txt b/darcycool/0016/numbers.txt new file mode 100644 index 00000000..6b378693 --- /dev/null +++ b/darcycool/0016/numbers.txt @@ -0,0 +1,5 @@ +[ + [1, 82, 65535], + [20, 90, 13], + [26, 809, 1024] +] diff --git a/darcycool/0016/numbers.xls b/darcycool/0016/numbers.xls new file mode 100644 index 0000000000000000000000000000000000000000..0c199c0f414260f369c07e12888e77f47f011468 GIT binary patch literal 5632 zcmeHLO=uHA6#h1UO(adTF%_*?LcyxFmsY5~w5fs?1f}+(h)|O@2iqDY=s`iO)*J=F zlj5aN1P@ld_=5`d=0T{~gP;hB9z6*P9;)m2-X;=5CuJ90-;lYgh7)fdJr zn76@9Hj_(D77%BmX7Slc0H0(4Lh}iuUs)V1B!DjxQ^>`?fqALcU-9^WDL6-Tg6BEC zZ+WFg0NGQ=(wW>6WJ`5v6$^K1}jH2hz94z4|Hgat;#Qm57w*PqCC!J!G+mA)LasFPpi*GwYD?PHl@Yn zrV4p8<@|^J4_fo@lUpdy4HnPD=Uyde(8kxw7-PsajZUl6x^`9QVX|CWT*k5$yjAXQ z0+q`@=;1a-@^VZ{Rui6Jt%^4B1Z?c#z-_*)ylg}K1&3;X(b*VQKCb>flwE&`U+phC z8{^7vghiH)c+l^O;hq>VAgn}^Lqi4ugMdN6AYc$M2p9wm0tSIUh=3e;-GeP4p9Fs1 za$J_50rFqxD{mO#Af!``4BXemvn$Nu%J-cDiD*rDO w-vf-E!vxaWkBQ}~*R=7o@JD> Date: Mon, 28 Aug 2017 10:55:50 +0800 Subject: [PATCH 16/19] commit 0017 --- darcycool/0017/excel2xml.py | 35 +++++++++++++++++++ {NKUCodingCat => darcycool}/0017/student.xls | Bin 5632 -> 5632 bytes darcycool/0017/student.xml | 21 +++++++++++ darcycool/0017/student1.xml | 23 ++++++++++++ 4 files changed, 79 insertions(+) create mode 100644 darcycool/0017/excel2xml.py rename {NKUCodingCat => darcycool}/0017/student.xls (83%) create mode 100644 darcycool/0017/student.xml create mode 100644 darcycool/0017/student1.xml diff --git a/darcycool/0017/excel2xml.py b/darcycool/0017/excel2xml.py new file mode 100644 index 00000000..22387c3d --- /dev/null +++ b/darcycool/0017/excel2xml.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# 第 0017 题: 将 第 0014 题中的 student.xls 文件中的内容写到 student.xml 文件中 +import json +import xml.etree.cElementTree as ET +from collections import OrderedDict +from xml.dom import minidom + +import xlrd + +root = ET.Element("root") +student = ET.SubElement(root, "students") + +wb = xlrd.open_workbook('student.xls') +sheet = wb.sheet_by_index(0) +number_of_rows = sheet.nrows +number_of_columns = sheet.ncols + +student_dict = OrderedDict() + +for row in range(number_of_rows): + items = [sheet.cell(row, col).value for col in range(1, number_of_columns)] + student_dict[sheet.cell(row, 0).value] = items +print(student_dict) + +json_str = json.dumps(student_dict, ensure_ascii=False, indent=4) +print(json_str) + +student.text = json_str + +tree = ET.ElementTree(root) +tree.write('student.xml', encoding='utf-8', xml_declaration=True) + +xmlstr = minidom.parseString(ET.tostring(root)).toprettyxml() +with open('student1.xml', 'w') as f: + f.write(xmlstr) diff --git a/NKUCodingCat/0017/student.xls b/darcycool/0017/student.xls similarity index 83% rename from NKUCodingCat/0017/student.xls rename to darcycool/0017/student.xls index 8329865c42d8bf81b80ec5dd09706775d756c3e8..ea1fc44e6f2ae0c9fa44bdaebfb524a5ff11e991 100644 GIT binary patch delta 132 zcmZqBY0%lA!NkeNz+h-(W@K(L*^w!HasZRS<{3<1nS=xwE-*6y0SjYVw0!A9|NMl> z^H`;XjhGl1{nBrTF)}b11DV~$Q~WlcW?jO_n*|gRWatBvb(3q@?Rh@|bqg|ZfklKi apI|rV+9Z_2#O^Rn{nH}(%bSZudKm#KpCE1k delta 134 zcmZqBY0%lA!NkwQz~GgcmtK;Xui%`Km^aywDRJ`*rmswb{0!%r8GwMDp}3?pB{i>P z@_be)VPhr+#_r-NevAwZMnI-t`t7jIXIPgo@_qs;6=dK7iVHFbO|E6P=gk7M`@m$~ c=9BE^T$}$3<}$G-aPkUAxL?>@EYiye04Y8p)&Kwi diff --git a/darcycool/0017/student.xml b/darcycool/0017/student.xml new file mode 100644 index 00000000..6bdca54e --- /dev/null +++ b/darcycool/0017/student.xml @@ -0,0 +1,21 @@ + +{ + "1": [ + "张三", + 150.0, + 120.0, + 100.0 + ], + "2": [ + "李四", + 90.0, + 99.0, + 95.0 + ], + "3": [ + "王五", + 60.0, + 66.0, + 68.0 + ] +} \ No newline at end of file diff --git a/darcycool/0017/student1.xml b/darcycool/0017/student1.xml new file mode 100644 index 00000000..2042335a --- /dev/null +++ b/darcycool/0017/student1.xml @@ -0,0 +1,23 @@ + + + { + "1": [ + "张三", + 150.0, + 120.0, + 100.0 + ], + "2": [ + "李四", + 90.0, + 99.0, + 95.0 + ], + "3": [ + "王五", + 60.0, + 66.0, + 68.0 + ] +} + From d9d9b76773e2a9630164b48069d1c0654af496d8 Mon Sep 17 00:00:00 2001 From: darcy Date: Mon, 28 Aug 2017 13:12:44 +0800 Subject: [PATCH 17/19] commit 0018 --- darcycool/0018/city.xls | Bin 0 -> 5632 bytes darcycool/0018/city.xml | 6 ++++++ darcycool/0018/excel2xml.py | 29 +++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 darcycool/0018/city.xls create mode 100644 darcycool/0018/city.xml create mode 100644 darcycool/0018/excel2xml.py diff --git a/darcycool/0018/city.xls b/darcycool/0018/city.xls new file mode 100644 index 0000000000000000000000000000000000000000..157d37d6539a450889f9d50083a4766385e8278e GIT binary patch literal 5632 zcmeHLO-NKx6#niw>Wqxz%rq7m*dSzSZbqTp=vYv$8mtyY1vTTi5Y1u`!Zukp%Rp#V zv=Q70VYTUpTGXzEpyVP5f|;UKtDvBT_WI6wPE5lfNg);YJl?tIo^$Ry=Y8ki_wIX3 zi{bptgQfz?s25fE=J-)lqBoTN#eN91JC1aVt&cKQmi{3G{5}@4rW#M{7iy)JQttvh zxbJ;I4!q-e1{Xyi@7&k9zdN=$bWn3h8OfoC+~5v1L2TEoBFYDqZ&7|vJ)bG>Q_T(K zJ%}K0PGK>TZ13i^z$=~fw5TmeZtzIQyirXYjd)2P=gPE9c3P`(AUm8I{W}fK-T-F7 zy7do@4P{fKc|=*LS$uI~z-PGuq31EH-&`CFV!&64Ddgf`%es{7Z+g7IB%E_P!E*>; zp-M)0F*rOvv4S>Pc6xF)#yMH*l9$d??4-Eu_}wJME{dV_>U13)-L)M0X)V|591oCZ z(4cZyXL<-etjv9SbtFBIIIEgTYJ_-E?2^Rb;Hr$^;Gh`zMi7z}*{*!A@@wLQ9V#~| zk8;(}t977pO*lNIKG)US$~aw0%Zc43@*c{$k4GOj=iVpUD9`s7E=T8ICuY#Xw@!vJ z4n7Z`awHG$Ny#)|6@nQMR_^u;dvgEcFKxNM z=v@57U-AhnD&jBk%l$WH4Hfn&J9V;nIY!Wi2uCRq7jr>&?q zMPy_ytw&3zGau%5E}P>2Lh(Jp=vj;)t$B>BH@u>a-+e#gOCA-SDkNXs| O^!_&*tb+e<#s3aPV8?p^ literal 0 HcmV?d00001 diff --git a/darcycool/0018/city.xml b/darcycool/0018/city.xml new file mode 100644 index 00000000..05b4ac3d --- /dev/null +++ b/darcycool/0018/city.xml @@ -0,0 +1,6 @@ + +{ + "1": "上海", + "2": "北京", + "3": "成都" +} \ No newline at end of file diff --git a/darcycool/0018/excel2xml.py b/darcycool/0018/excel2xml.py new file mode 100644 index 00000000..ae39bb81 --- /dev/null +++ b/darcycool/0018/excel2xml.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# 第 0018 题: 将 第 0015 题中的 city.xls 文件中的内容写到 city.xml 文件中 +import xlrd +from collections import OrderedDict +import json + +import xml.etree.cElementTree as ET + +wb = xlrd.open_workbook('city.xls') +sheet = wb.sheet_by_index(0) +number_of_row = sheet.nrows +number_of_col = sheet.ncols + +city = OrderedDict() + +for row in range(number_of_row): + city[sheet.cell(row, 0).value] = sheet.cell(row, 1).value + +print(city) +json_str = json.dumps(city, ensure_ascii=False, indent=4) +print(json_str) + +root = ET.Element('root') +cities = ET.SubElement(root, 'citys') + +cities.text = json_str + +tree = ET.ElementTree(root) +tree.write('city.xml', encoding='utf8', xml_declaration=True) From ae98d0bea6b880098ca15778e53e195e91e7188e Mon Sep 17 00:00:00 2001 From: darcy Date: Mon, 28 Aug 2017 13:50:03 +0800 Subject: [PATCH 18/19] commit 0019 --- darcycool/0019/numbers.xls | Bin 0 -> 5632 bytes darcycool/0019/numbers.xml | 2 ++ darcycool/0019/xls2xml.py | 24 ++++++++++++++++++++++++ 3 files changed, 26 insertions(+) create mode 100644 darcycool/0019/numbers.xls create mode 100644 darcycool/0019/numbers.xml create mode 100644 darcycool/0019/xls2xml.py diff --git a/darcycool/0019/numbers.xls b/darcycool/0019/numbers.xls new file mode 100644 index 0000000000000000000000000000000000000000..3e606af7078095afaad1455bc6607c7665d085ee GIT binary patch literal 5632 zcmeHLO=uHA6#h0pZ6ax!jj3pb8VXjey`)0zrA-yIASksLMT9o7IoQ@HK@as}wdPn5 zJSkoZMetzNi$C~--aH5udk_R6(W56p!9#WZ-rGcC2*n`OALcFl=IwiL=FNO>W_EU8 zF4~2;JFP`jQ9r!+<^<7Dp|>ap%g+(e?l|&TE(4UQGV~825DYMp4SqaqdeJDklzbQA z!EN6&a^M~Bqc|n{M0Zd3&ffUy&~EKR%91|xkz2S%O&A-rS5f81l&@8OOFbVcA5hJ# z@;*dSu#R9cd7!hGZGkNv_Oz=lOm5+x)_J3v1X}Q%KF+yIGTCYMV^{8YYVz+iwE04q z2lFeS-PVhXZ z_f4ZFt(?iJ-)l8RK zlbO9)BE!LXslm!&4Whxh@dKS&W4rPT;)9JUwmiY)BOdg7qPQzY3sVAG3tn&Xt x@jb-oIZPm}{g_y(dQBTY3xC9ye$;fTrF6d+Ygy{m)g8Zb{PhN_;s0ClzXN>$!s!42 literal 0 HcmV?d00001 diff --git a/darcycool/0019/numbers.xml b/darcycool/0019/numbers.xml new file mode 100644 index 00000000..56a909a0 --- /dev/null +++ b/darcycool/0019/numbers.xml @@ -0,0 +1,2 @@ + +[[1.0, 82.0, 65535.0], [20.0, 90.0, 13.0], [26.0, 809.0, 1024.0]] \ No newline at end of file diff --git a/darcycool/0019/xls2xml.py b/darcycool/0019/xls2xml.py new file mode 100644 index 00000000..d7dc04a5 --- /dev/null +++ b/darcycool/0019/xls2xml.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# 第 0019 题: 将 第 0016 题中的 numbers.xls 文件中的内容写到 numbers.xml 文件中 +import xlrd +import xml.etree.cElementTree as ET + +wb = xlrd.open_workbook('numbers.xls') +sheet = wb.sheet_by_index(0) +number_of_row = sheet.nrows +number_of_col = sheet.ncols + +numbers = [] + +for row in range(number_of_row): + number = [sheet.cell(row, col).value for col in range(number_of_col)] + numbers.append(number) + +print(numbers) +print(isinstance(numbers, list)) +root = ET.Element('root') +numbers_element = ET.SubElement(root, 'numbers') +numbers_element.text = str(numbers) + +tree = ET.ElementTree(root) +tree.write('numbers.xml', xml_declaration=True, encoding='utf-8') From 8f29cbc2fa534ced9a39389f0d448b92a13ea3d5 Mon Sep 17 00:00:00 2001 From: darcy Date: Mon, 28 Aug 2017 14:54:51 +0800 Subject: [PATCH 19/19] commit 0021 --- darcycool/0021/hashpassword.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 darcycool/0021/hashpassword.py diff --git a/darcycool/0021/hashpassword.py b/darcycool/0021/hashpassword.py new file mode 100644 index 00000000..7c5912a8 --- /dev/null +++ b/darcycool/0021/hashpassword.py @@ -0,0 +1,16 @@ +import uuid +from hashlib import sha256 + + +def encrypt_password(password, salt=None): + if salt is None: + salt = uuid.uuid4().hex + + return sha256(salt.encode() + password.encode()).hexdigest() + ':' + salt + + +def check_password(hashed_password, user_password): + password, salt = hashed_password.split(':') + return password == sha256(salt.encode() + user_password.encode()).hexdigest() + +print(encrypt_password('123456', '666'))