The Python Challenge Level 0-1 Solutions

The Python Challenge Level 0-1 Solutions

前兩天聽說了有The Python Chanllenge這麼一個遊戲,於是自己也想來嘗試一下。感覺還是一個挺有意思的。

附上我在Github上存放的代碼倉庫: The Python Challenge

Challenge 0

第0關只是一個讓你大概清楚怎麼玩的一個關卡,只要按照圖片上的意思,計算2的38次方即可。這個就無所謂是用Python還是別的什麼方式來計算了,能夠得到結果就行,所以代碼就不貼出來了。

算出結果之後,將結果複製到網頁的url欄,將.html前面的單詞替換掉就好

Challenge 1

根據圖片給的提示我們可以發現,從K到M,O到Q,以及E到G,都是把單詞給推後了兩個。所以,我們只需要把他底下給我們的一大串字符串給統一推後兩個字母就行了。另外要注意y要對應a,z則對應b。下面是我的初版代碼:

#! /usr/bin/env python3
# -*- coding: utf-8 -*-

code = ("g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dm"
        "p. 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.")
addr = ""

for alpha in code:
    if alpha!=' ' and alpha!='.' and alpha!='\'' and alpha!='(' and alpha!=')':
        if alpha == 'y':
            alpha = 'a'
        elif alpha == 'z':
            alpha = 'b'
        else:
            alpha = chr(ord(alpha)+2)
    addr += alpha 

print(addr)

還是比較簡單直接的。提取到的結果如下:

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.

這裏提示我們可以用string.maketrans()來提高效率。所以,我們再碼一遍代碼,利用maketrans()使代碼變得更加簡潔和美觀。

#! /usr/bin/env python3
# -*- coding: utf-8 -*-

code = ("g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dm"
        "p. 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.")

intab = "abcdefghijklmnopqrstuvwxyz"
outtab = "cdefghijklmnopqrstuvwxyzab"
transtab = "".maketrans(intab,outtab)

print(code.translate(transtab))

需要注意的是,maketrans()到了python3中就直接包含在str類的方法中了,如果是Python2的話記得import對應的模塊。

最後只要按照提示,把關卡1url裏的‘map’也對應向後推兩個字母,變成’ocr’就好了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章