学习一门编程语言最好的方法,就是动手写代码。
Python Challenge可以算是一个很有‘恶趣味’的网站,一共33关,每一关都是一道题,解对了就能得知下一道题的地址。
level 0:Click here to get challenged
计算2的38次方。
2**38
274877906944L
ok,进入Level 1:http://www.pythonchallenge.com/pc/def/274877906944.html
跳转到http://www.pythonchallenge.com/pc/def/map.html
一幅图:K->M,O-Q,E-G;
一段乱码:g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr’q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.
略微思考了下,就写出如下代码:
lines = r'''g fmnc wms bgblr rpylqjyrc gr zw fylb.
rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle.
sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.'''
step = ord('M') - ord('K')
new_lines = ''
for s in lines:
if ord(s) >= ord('a') and ord(s) <= ord('z'):
new_lines+=chr(ord('a') + (ord(s)+step-ord('a'))%26)
elif ord(s)>=ord('A') and ord(s) <= ord('Z'):
new_lines+=chr(ord('A') + (ord(s)+step-ord('A'))%26)
else:
new_lines+=s
print new_lines
输出为:i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and that’s why this text is so long. using string.maketrans() is recommended. now apply on the url.
于是有如下代码:
import string trans = string.maketrans(string.ascii_lowercase, string.ascii_lowercase[2:]+string.ascii_lowercase[:2]) print 'map'.translate(trans)
输出:ocr
level 2的地址得到了:http://www.pythonchallenge.com/pc/def/ocr.html
本次学习到的内容有:ord和chr的使用,已经string.maketrans()、string.ascii_lowercase以及字符的translate()方法。
spam……
Very interesting article. Keep writing dude !