Python挑战 第3关

2 投票
2 回答
7610 浏览
提问于 2025-04-15 17:26

问题是:一个小字母,两边各有正好三个大保镖围着它。我写了这个代码并得到了一个答案。我以为这个答案是对的,但它不管用。有人能帮我吗?我的答案是: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 时都会覆盖之前的结果。你需要的是所有的匹配项,如果我没记错的话。

撰写回答