Python Challenge第一关

学习一门编程语言最好的方法,就是动手写代码。

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()方法。

,

2 Responses to Python Challenge第一关

  1. lyoe | #1

    spam……

  2. Very interesting article. Keep writing dude !

Leave a Reply