Python Challenge - 2
http://www.pythonchallenge.com/pc/def/ocr.html
提示看源文件,一大堆字符,说要找到出现次数最少的字符,
使用字符串的count方法可以做到,首先想到的办法是把那堆字符串保存到文本文档里面
通过读取文本文档来使用count方法判断出现次数少于10次的字符
>>> text = open('data.txt','r').read()>>> for a in text:
l=text.count(a)
if l<10:
print a,':',l
e : 1
q : 1
u : 1
a : 1
l : 1
i : 1
t : 1
y : 1
得到下一关的地址
http://www.pythonchallenge.com/pc/def/equality.html
另外一个简单的方法 直接使用urllib获取页面源代码 使用正则表达式来提取需要的字段
针对例子说的 提取前后都为非字母 中间一个是字母的所有元素 即可得到答案 有点幸运的成分在里面
#coding:utf-8import urllib,re
# 获取HTML源代码
ocr = urllib.urlopen\
('http://www.pythonchallenge.com/pc/def/ocr.html').read()
# 查找[a-z]范围的2边有5个非字幕的情况
pat = re.compile(r"[^a-z]{5}([a-z])[^a-z]{5}")
print ''.join(re.findall(pat,text))
之前写的确实有点撞大运的色彩...评论的很中肯... 做了下改进 这样解这个题目算是比较靠谱的办法了
>>> import re>>> import urllib
>>> ocr = urllib.urlopen(
'http://www.pythonchallenge.com/pc/def/ocr.html').read()
# 匹配注释中的内容
# re.S 匹配任意字符包括换行符
# .*? 加?避免贪婪模式 尽量少的匹配
>>> data = re.findall(r'<!--(.*?)-->',ocr,re.S)
# 剔除说明注释
>>> data = data[1]
>>> for i in set(data):
print i,':',data.count(i)
: 1221
! : 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
# 得到最少的字符是'aeilquty'
# 现在需要按照他们在字符串中出现的位置进行下排序
>>> for i in data:
if i in 'aeilquty': print i,
e q u a l i t y
# 得到下一关的地址
以上是 Python Challenge - 2 的全部内容, 来源链接: utcz.com/z/388548.html