进入:http://www.pythonchallenge.com/pc/def/ocr.html 页面,图片下方有句提示“recognize the characters. maybe they are in the book,but MAYBE they are in the page source.”,这句话告诉我们要找的字符可能在图片的书上,或者在页面源码中。所以我们想到去查看该页面的源代码。
<!--
find rare characters in the mess below:
-->
<!--
%%$@_$^__#)^)&!_+]!*@&^}@[@%]()%+$&[(_@%+%$*^@$^!+]!&_#)_*}{}}!}_]$[%}@[{_@#_^{*
...
-->
发现源代码中有一大段形如上面被注释掉的字符,现在要做的工作就是从这一大段字符中找出出现次数少的字符。那怎么知道在这些一大段杂乱的字符串中,那些字符是出现次数少的呢?硬办法就是把所以字符出现的次数统计一遍。
代码如下:
data = """..."""
count = {}
for i in data:
if i in count:
count[i] += 1
else:
count[i] = 1
for key, val in count.items():
print "%s: %d" % (key, val)
好了现在统计出所有字符出现的次数了:
: 1219
!: 6079
#: 6115
%: 6104
$: 6046
&: 6043
): 6186
(: 6154
+: 6066
*: 6034
@: 6157
[: 6108
]: 6152
_: 6112
^: 6030
a: 1
e: 1
i: 1
l: 1
q: 1
u: 1
t: 1
y: 1
{: 6046
}: 6105
出现次数最少的有8个字符:a, e, i, l, q, u, t, y。但是这8个字母顺序是按ASCII 码排列的,不是一个具有意义的单词。但做到这里至少我们知道,这堆杂乱的字符串中出现次数最少的几个小写字母。然后,可以用正则表达把这几个字母找出来,并且按字母在字符中先后出现的顺序打印出来。
代码如下:
import re
data = """..."""
print "".join(re.findall("[a-z]", data))
输出结果: equality
这个就是我们要找的字符串了,将它到URL地址中替换成:http://www.pythonchallenge.com/pc/def/equality.html,进入下一题。