Ich habe kürzlich eine sehr interessante Python-Spielfreigabe-Website im Internet gesehen. Es gibt insgesamt 33 Level, bei denen Sie Python-Kenntnisse verwenden müssen, um die Antwort zu finden, und dann das Problem lösen müssen nächste Ebene. Es testet die umfassende Beherrschung von Python. Einige Ebenen erfordern beispielsweise die Verwendung regulärer Ausdrücke, andere erfordern die Verwendung von Crawlern.
Wir lernen Python normalerweise in Kapitelreihenfolge, Paketen oder Modulen, und es ist leicht, es nach dem Lernen zu vergessen. Auf dieser Website können Sie Ihre Python-Kenntnisse umfassend testen und auf etwaige Mängel überprüfen.
Lassen Sie uns darüber sprechen, wie Sie diese Website nutzen.
Dies ist die Hauptseite der Website, nicht wahr? Sie existiert schon seit mehr als zehn Jahren. Aber unterschätzen Sie es nicht, nur weil es wie eine Antiquität aussieht.
Lass uns Spaß haben. Klicken Sie auf „Herausgefordert werden“, um die Herausforderung zu starten.
Stufe 0 ist die Aufwärmsitzung zum Aufwärmen:
Die Anforderung für diese Stufe besteht darin, den URL-Link zu ändern, und die Eingabeaufforderung ist ein mathematischer Ausdruck auf dem Computer: 2 hoch 38. Sie müssen also wahrscheinlich den Wert berechnen und dann die URL ändern, um zur nächsten Ebene zu gelangen.
Diese Stufe ist also ein Test grundlegender numerischer Operationen in Python. Wissen Sie, wie man rechnet?
Öffnen Sie das Python-Terminal und Sie können das Ergebnis mit einer Codezeile berechnen:
Ersetzen Sie die 0 im ursprünglichen Link durch 274877906944 und drücken Sie die Eingabetaste, um Betreten Sie die nächste Seite Level 1:
Das Spiel beginnt offiziell. Das Notizbuch im Bild zeigt drei Gruppen von Buchstaben, und das Muster ist leicht zu finden: Die Buchstaben vorne werden um zwei Stellen nach hinten verschoben, um zu den Buchstaben hinten zu werden.
Dann müssen Sie die folgende Eingabeaufforderungszeichenfolge gemäß dieser Regel entschlüsseln und eine Verschiebungsentschlüsselung durchführen, um die tatsächliche Satzbedeutung zu erhalten:
Diese Frage testet das Wissen im Zusammenhang mit der Zeichenfolgencodierung und for-Schleife, Code Die Implementierung ist wie folgt:
text = '''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.''' text_translate = '' for i in text: if str.isalpha(i): n = ord(i) if i >= 'y': n = ord(i) + 2 - 26 else: n = ord(i) + 2 text_translate += chr(n) else: text_translate += i print(text_translate)
Das Ergebnis ist:
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.
Der Autor ist natürlich sehr interessant. Es wird empfohlen, die Berechnung nicht durchzuführen string.maketrans(), um das Problem zu lösen, ist direkter. Die offizielle Methode bietet eine schlankere Methode:
import string l = string.lowercase t = string.maketrans(l, l[2:] + l[:2]) print (text.translate(t))
Ändern Sie dann die Karte in der URL und drücken Sie die Eingabetaste, um zu gelangen zweite Ebene:
Der Autor sagte weiter , dass der relevante Hinweis möglicherweise im Buch enthalten ist (das ist natürlich unmöglich) oder in der Quelle Code der Webseite. Klicken Sie dann mit der rechten Maustaste, um den Quellcode anzuzeigen, und scrollen Sie nach unten, um den grünen Bereich zu sehen. Tatsächlich ist das Problem gefunden:
Es bedeutet: Finden Sie die wenigsten Zeichen im Folgende Zeichenfolge Zeichen
untersuchte mehrere Wissenspunkte:
String zur Extraktion regulärer Ausdrücke
Listenanzahl
bedingte Anweisung
Was würdest du an deiner Stelle tun?
Lassen Sie uns einen Blick darauf werfen, zehn Codezeilen zur schnellen Implementierung:
import requests url = 'http://www.pythonchallenge.com/pc/def/ocr.html' res = requests.get(url).text text = re.findall('.*?<!--.*-->.*<!--(.*)-->',res,re.S) # list转为str便于遍历字符 str = ''.join(text) lst = [] key=[] #遍历字符 for i in str: #将字符存到list中 lst.append(i) #如果字符是唯一的,则添加进key if i not in key: key.append(i) # 将list列表中的字符出现字数统计出来 for items in key: print(items,lst.count(items))
Verwenden Sie zunächst Requests, um die Webseite anzufordern, verwenden Sie dann reguläre Ausdrücke, um die Zeichenfolge zu extrahieren, und verwenden Sie dann ein for Schleife, um die Anzahl der Vorkommen jedes Zeichens zu zählen.
% 6104 $ 6046 @ 6157 _ 6112 ^ 6030 # 6115 ) 6186 & 6043 ! 6079 + 6066 ] 6152 * 6034 } 6105 [ 6108 ( 6154 { 6046 e 1 q 1 u 1 a 1 l 1 i 1 t 1 y 1
Sie können sehen, dass die letzten paar Zeichen am wenigsten erscheinen, die zusammen „Gleichheit“ sind. Durch Ersetzen der URL-Zeichen können Sie die zweite Ebene bestehen und zur nächsten Ebene wechseln, um die Herausforderung fortzusetzen. Ist es nicht interessant?
Jedes nachfolgende Level erfordert den Einsatz relevanter Python-Fähigkeiten, um es zu lösen. Zum Beispiel Level 4:
Der Autor dieses Levels hat einen kleinen Streich gemacht. Sie müssen den Wert manuell in die URL eingeben und die Eingabetaste drücken. Glauben Sie, dass das das Ende ist? Es werden Ihnen nicht ständig scheinbar endlos neue Werte angezeigt, die Sie eingeben können.
所以,这一关肯定不能采取手动输入的方法闯关,自然要用到 Python 了。要实现自动填充修改 url 回车跳转到新 url,循环直到网页再也无法跳转为止这一功能。
如果是你,你会怎么做?
其实,一段简单的爬虫加正则就能搞定。思路很简单,把每次网页中的数值提取出来替换成新的 url 再请求网页,循环下去,代码实现如下:
import requests import re import os # 首页url resp = requests.get( 'http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=12345').text url = 'http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=' # 计数器 count = 0 while True: try: # 提取下一页动态数值 nextid = re.search('\d+', resp).group() count = count + 1 nextid = int(nextid) except: print('最后一个url为:%s' % nexturl) break # 获取下一页url nexturl = url + str(nextid) print('url %s:%s' % (count, nexturl)) # 重复请求 resp = requests.get(nexturl).text
输出结果如下:
可以看到,最终循环了 85 次找到了最后一个数字16044,输入到 url 中就闯关成功。
如果遇到不会做的题,可以在这里找到参考答案:
中参考文教程:
https://www.cnblogs.com/jimnox/archive/2009/12/08/tips-to-python-challenge.html
官方参考教程:
http://garethrees.org/2007/05/07/python-challenge/
Das obige ist der detaillierte Inhalt vonTesten Sie Ihre Python-Kenntnisse im Spiel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!