2012-06-07 94 views
2

您好我正在學習python通過做開放課程的練習題MIT 6.00 Intro to Computer Science學習Python其他語法錯誤

我試圖做練習題1第2部分創建一個遞歸函數來計算目標中的鍵的實例。到目前爲止我的代碼...

from string import * 
def countSubStringMatchRecursive (target, key,x,s): 
    if (find(target,key)==find(target,key,s)) and (find(target,key)==find(target,key,(find(target,key)))):#if first and last 
     return (1) 
    elif (find(target,key)==find(target,key,s))and (find(target,key)!=find(target,key,(find(target,key)))):#if first but not last 
     x=1 
     s= find(target,key) 
     return (countSubStringMatchRecursive(target,key,s,x) 
    elif (find(target,key,s))==-1 and (find(target,key)!=find(target,key,s)):#if last but not first 
     return (x+1) 
    elif:(find(target,key,s))!=-1 and (find(target,key)!=find(target,key,s)):#if not last and not first 
     x=x+1 
     s= find(target,key,s) 
     return (countSubStringMatchRecursive(target,key,s,x) 

我在第8行得到一個語法錯誤,我只是想知道我做錯了什麼在那裏。不要擔心我應該能夠理清其他錯誤。我只是堅持這一點。謝謝。

+3

您的上一個'elif'在表達式之前有一個冒號。也可能是一個問題。 – rodion

+1

如果您遵循[PEP 8](http://www.python.org/dev/peps/pep-0008/)中的指導原則,其他人會發現閱讀Python代碼更容易。你會發現它更容易閱讀! – dawg

回答

2

您在第8行和最後一行缺少右括號。實際上,相應的開括號是不必要的,你還不如重寫這些行這樣的:

return countSubStringMatchRecursive(target,key,s,x) 

而且,在評論中指出的@rodion,最後elif有錯位的:,對之前取出一個左括號。

談到括號:在Python中,您不必將if ... elif ... else語句的條件放在括號內,您應該刪除它們。

+0

感謝您的評論這是非常有益的。自從我解決了這些問題之後,我發現了更多的問題,並且工作得很好:) – user1441016

0

你有一個不匹配的括號。在行首附近刪除(或添加)到最後。

+0

感謝您的評論這是非常有幫助的。自從我解決了這些問題之後,我發現了更多的問題,並且工作得很好:) – user1441016

1

你有8行無與倫比的括號添加另一個接近括號末

return (countSubStringMatchRecursive(target,key,s,x))

同樣適用於你的最後return語句。

+0

感謝您的評論這是非常有益的。自從我解決了這些問題之後,我發現了更多的問題,並且工作得很好:) – user1441016

0

有幾個問題:

  1. 你在網上8
  2. 缺少一個右括號需要你的函數的身體縮進。 (更新:已修復)
  3. 而且,你最後elif有後馬上一個:,需要被 刪除。即,

    elif: expression: 
    

    應該

    elif expression: 
    
  4. 你的最後一條語句還缺少一個右括號

    return (countSubStringMatchRecursive(target,key,s,x) 
    

    應該

    return (countSubStringMatchRecursive(target,key,s,x)) 
    

最後@ drewk關於看看PEP 8的建議是一個不錯的選擇。我會定期回顧並親自查看。

此外,你有一些不必要的() s ..他們沒有任何傷害,但他們並不需要,可能會降低您的代碼的可讀性。

+0

感謝您的評論這是非常有益的。自從我解決了這些問題之後,我發現了更多的問題,並且工作得很好:) – user1441016

0
return (countSubStringMatchRecursive(target,key,s,x) 

你缺少一個右)。但是你也不需要開場的人。 return語句的語法是return <expr>,因此任何有效表達式都可以直接跟隨return。任何有效的表達式仍然是一個有效表達式,如果用圓括號括起來,它的含義完全相同,但大多數情況下,這些表達式在不需要時會增加噪聲。

+0

感謝您的評論這是非常有益的。自從我解決了這些問題之後,我發現了更多的問題,並且工作得很好:) – user1441016