Python挑战 第3关
问题是:一个小字母,两边各有正好三个大保镖围着它。我写了这个代码并得到了一个答案。我以为这个答案是对的,但它不管用。有人能帮我吗?我的答案是:KWGtIDC
import urllib, sys, string
from string import maketrans
bbb = 0
f = urllib.urlopen("http://www.pythonchallenge.com/pc/def/equality.html")
while 1:
buf = f.read(200000)
if not len(buf):
break
for x in range(len(buf)):
if buf[x] in string.ascii_lowercase:
if buf[x+1] in string.ascii_uppercase:
if buf[x-1] in string.ascii_uppercase:
if buf[x+2] in string.ascii_uppercase:
if buf[x-2] in string.ascii_uppercase:
if buf[x+3] in string.ascii_uppercase:
if buf[x-3] in string.ascii_uppercase:
if buf[x+4] in string.ascii_lowercase:
if buf[x-4] in string.ascii_lowercase:
bbb = x
sys.stdout.write(buf)
print(buf[bbb-3:bbb+4])
2 个回答
4
在你的代码中
if buf[x+4] in string.ascii_lowercase:
只有在有第四个(小写)字符的情况下才会有效,但你有没有考虑到没有第四个字符的情况,比如字符串的结尾(例如:"ABCdEFG")?
为了不破坏这个难题,你有没有尝试过创建一个正则表达式?正则表达式可以避免使用嵌套循环,而且需要的代码行数会少很多。
8
几点说明:
你需要在网页的源代码中操作评论块,而不是整个页面。我不确定页面的其他部分是否会影响结果,但还是建议你这样做。我会把评论块复制到本地的另一个文件里,然后再进行处理。
这个页面的标题是“re”。这让你想起什么吗?
可能会有多个符合你要求的模式,而你的程序每次执行
bbb = x
时都会覆盖之前的结果。你需要的是所有的匹配项,如果我没记错的话。