2009-12-29 102 views
1

問題是:一個小小的字母,每邊都有三個大型保鏢包圍。 我寫了這段代碼並得到了答案。我認爲這是正確的,但它不起作用。有誰能夠幫助我?我的回答:KWGtIDC蟒蛇挑戰3級

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]) 

回答

7

幾個要點:

  • 您需要在HTML頁面,而不是整個頁面本身的源註釋塊進行操作。我不確定頁面的其餘部分是否有所作爲,但仍然如此。我會將註釋塊複製到本地的另一個文件,並從那裏開始。

  • 頁面的標題是「re」。那響鈴嗎?

  • 可能有不止一次出現的模式符合您的要求,並且您的程序每次都會覆蓋它bbb = x。你需要所有這些,IIRC。

4

在您的代碼

如果有fouth(小寫)字符
if buf[x+4] in string.ascii_lowercase: 

只會工作,但你考慮的情況下,有沒有第四個字符,例如作爲sring的結尾(例如:「ABCdEFG」)?

沒有破壞謎題,你有沒有嘗試創建一個正則表達式?正則表達式避免了嵌套循環,並且需要更少的線。