【Python challenge】通關程式碼及攻略(0-7)
阿新 • • 發佈:2020-03-12
前言:
>最近找到一個有關python的遊戲闖關,這是遊戲中的思考及通關攻略
最開始位於:http://www.pythonchallenge.com/pc/def/0.html
## 第0關
![](https://img2020.cnblogs.com/blog/1713629/202003/1713629-20200312160040155-1690782093.png)
### 題目分析
提示hint告訴我們是要嘗試更改URL地址,圖中是2^38,猜測地址是該結果。
### 考察知識點
- 這是才開始,提示我們網站怎麼闖關,以及瞭解到python中int永遠不會溢位,存在機制自動擴容。
### 程式碼及結果
```python
print(2**38)
```
輸出:274877906944
下一關:http://www.pythonchallenge.com/pc/def/274877906944.html
## 第1關
![](https://img2020.cnblogs.com/blog/1713629/202003/1713629-20200312170937178-483264311.png)
### 題目分析
注意到字母替換,且K、M、E都是從字母表往後移了2位。學過的就會知道這即是凱撒密碼。
最開始我用的是線上破解網站。破解後,發現可以使用string.maketrans()解決,先用maketrans建立一個對映table,然後使用translate函式
### 考察知識點
- 字串的處理,涉及string庫
當然也可以不用string,使用`[chr(i) for i in range(97,122)]`來產生字母a-z。
### 程式碼及結果
```python
import string
src = '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.'
for i in range(1,26):
mapping = ''.maketrans(string.ascii_lowercase,string.ascii_lowercase[i:]+string.ascii_lowercase[:i])
print(src.translate(mapping))
```
輸出: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.
這句話的意思即是將 map->ocr
下一關:http://www.pythonchallenge.com/pc/def/ocr.html
## 第2關
![](https://img2020.cnblogs.com/blog/1713629/202003/1713629-20200312171518186-1700105306.png)
### 題目分析
注意到,左下的資訊就是告訴你如何檢視上一關的官方答案。
![](https://img2020.cnblogs.com/blog/1713629/202003/1713629-20200312172418509-216865835.png)
根據紅色提示文字,獲得資訊:識別字符,可能在書中,可能在page source(網頁原始碼)中
F12檢視原始碼,可以看到在 body > font > font中看到資訊
![](https://img2020.cnblogs.com/blog/1713629/202003/1713629-20200312171542790-1687564584.png)
find rare characters in the mess below,即是要做資料清洗
將需清洗內容複製放入檔案‘src/ocr.txt’中,我這是相對路徑,你可以隨便設定,只要自己能開啟即可
### 考察知識點
- 簡單資料清洗,涉及re庫
### 程式碼及結果
```python
import re
with open('src/ocr.txt','r') as f:
s = f.read()
rs = re.findall(r'[a-zA-Z0-9]+',s)
print(''.join(rs))
```
輸出:equality
下一關:http://www.pythonchallenge.com/pc/def/equality.html
## 第3關
![](https://img2020.cnblogs.com/blog/1713629/202003/1713629-20200312172036211-1291733596.png)
### 題目分析
F12檢視原始碼,在body > font看到:
![](https://img2020.cnblogs.com/blog/1713629/202003/1713629-20200312171830100-1406968393.png)
### 考察知識點
- 簡單資料清洗,與上一題類似涉及re庫
- 注意到hint,一個小寫字母,兩邊精確的存在3個大寫字母,即是xXXXxXXXx形式,僅取中間一個小寫字母。
也可以使用request爬取網頁原始碼。我儲存在‘src/equality.txt’中
### 程式碼及結果
```python
import re
with open('src/equality.txt','r') as f:
s = f.read()
rs = re.findall(r'[a-z][A-Z]{3}([a-z])[A-Z]{3}[a-z]',s,re.S)
print(''.join(rs))
```
輸出:linkedlist
下一關:http://www.pythonchallenge.com/pc/def/linkedlist.html
## 第4關
![](https://img2020.cnblogs.com/blog/1713629/202003/1713629-20200312172446877-816498287.png)
### 題目分析
- 網頁中只有簡單的文字,linkedlist.php,很自然將其輸入url中跳轉
![](https://img2020.cnblogs.com/blog/1713629/202003/1713629-20200312172506890-1514067639.png)
- F12網頁title為:follow the chain,提示我們urllib可能還有幫助,且大概要迴圈400次,下面發現一個可疑的連結,開啟連結:出現下一個數字,一環扣一環如chain,我採用requests爬取,應為網頁簡單隻有一個數字,所以不用解析
![](https://img2020.cnblogs.com/blog/1713629/202003/1713629-20200312172523523-1242825443.png)
### 考察知識點
- requests或者其他爬取庫,re
### 程式碼及結果
```python
import requests,re
def get_src(url):
respon = requests.get(url)
if respon.status_code == 200:
return re.findall(r'\d+',str(respon.content))[0]
url = 'http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing='
add = '12345'
count = 0
for i in range(400):
count += 1
add = get_src(url+add)
print(f'{count}:{add}',end = ' ')
```
異常後,我自需要修改add便可。
輸出:
16044處異常:Yes. Divide by two and keep going.
82683處異常:You've been misleaded to here. Go to previous one and check.
82682處異常:There maybe misleading numbers in the text. One example is 82683. Look only for the next nothing and the next nothing is 63579
66831處異常:peak.html ,其實是進入下一關
下一關:http://www.pythonchallenge.com/pc/def/peak.html
## 第5關
![](https://img2020.cnblogs.com/blog/1713629/202003/1713629-20200312172649589-1160664981.png)
### 題目分析
- pronounce it,直翻讀它,F12發現:
![](https://img2020.cnblogs.com/blog/1713629/202003/1713629-20200312172814532-178961141.png)
banner.p可疑,開啟
驚了亂碼,經過學習百度,發現要使用pickle模組——python物件序列化
save file 字尾為.p
報錯:TypeError: a bytes-like object is required, not 'str'
解釋:由於當前操作的字串是bytes型別的字串物件,並對該bytes型別的字串物件進行按照str型別的操作
解決:open(file,'rb')
pickle.load(file)可以解碼出一個二位列表
是真的鬼,最開始我都沒想到這是字元圖案。。。。。。
最後分析得出:列表中是元組,(字元,個數),分析資料,不難qwq得出解析後得到答案channel
### 考察知識點
- python的pickle庫
### 程式碼及結果
```python
import pickle
with open('src/banner.p','rb') as f:
data = pickle.load(f)
s = ''
for i in data:
for j in i:
s += j[0]*j[1]
s+='\n'
print(s)
```
輸出:
![](https://img2020.cnblogs.com/blog/1713629/202003/1713629-20200312173235193-1652495646.png)
下一關:http://www.pythonchallenge.com/pc/def/channel.html
## 第6關
### 題目分析
- 嘿嘿,有一個pay,有時候這圖會裂開,有錢人。。。。
- F12檢視原始碼發現
![](https://img2020.cnblogs.com/blog/1713629/202003/1713629-20200312173644784-38916085.png)
即是存在zip檔案,下載檔案。
我是經過了兩個階段首先沒有使用zipfile。
![](https://img2020.cnblogs.com/blog/1713629/202003/1713629-20200312173920168-2141247817.png)
- 需要收集壓縮檔案的註釋 =_=# , 經過一波精彩的操作之後,我知道可以通過zipfile模組中的z.getinfo('90052.txt').comment得到註釋
最後收集註釋,注意編碼問題,open 只能r/w,
### 考察知識點
- 檔案處理,zizpfile庫
### 程式碼及結果
```python
import zipfile,re
z = zipfile.ZipFile('src/channel.zip')
val = '90052'
count = 0
s = []
try:
while True:
count += 1
print(f'{count}:{val}')
file = f'{val}.txt'
with z.open(file,'r') as f:
s.append(z.getinfo(file).comment)
text = str(f.read(), encoding='UTF-8')
val = re.findall(r'\d+',text)[-1]
except:
s.append(z.getinfo(f'{val}.txt').comment)
print(val)
d = ''
for i in s:
d += str(i,encoding = 'utf-8')
print(d)
```
輸出:
![](https://img2020.cnblogs.com/blog/1713629/202003/1713629-20200312174221514-1046676213.png)
下一關:http://www.pythonchallenge.com/pc/def/hockey.html
## 第7關
![](https://img2020.cnblogs.com/blog/1713629/202003/1713629-20200312174357066-245890699.png)
### 題目分析
- 我是實在不懂這是什麼意思,F12原始碼,請求資源,都沒有資訊。最後認真讀這段話後,哈哈哈。TM是氧氣oxygen,強行解釋look air。。。。。
### 考察知識點
- 腦洞?鬼
### 程式碼及結果
輸出:oxygen
下一關:http://www.pythonchallenge.com/pc/def/oxygen.html
後面還有很多關卡,後續更新。。。