Python Challenge - 2

python

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-8

import 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

回到顶部