2012-06-28 85 views
0

在SO上的第一次海報=)Python 2.7.2函數語法錯誤

我正在用Python編寫一個程序,並且我不斷收到一個隨機語法錯誤。錯誤說的唯一的東西是「SyntaxError: invalid syntax(uppgift2.py, line 16)

這是我正在處理的程序的一部分功能。

def CalculateWordPoints(word, elementValues): 
    points = 0 
    # Calculate basic points and letter bonuses 
    for i in range(0, len(word)): 
    points += int(word[i])*ReturnLetterBonusMultiplier(elementValues[i]) 

    # Add word bonuses 
    for i in range(0, len(word)): 
     points *= ReturnWordBonusMultiplier(elementValues[i]) 
    return points 

第16行是函數的第一行。

+3

看看這一行之前的行。這種類型的錯誤可能是由於較早的一行中缺少括號或類似內容引起的。 – BrenBarn

+0

只有我可以看到沒有你發佈一些更多的代碼是,縮進是錯誤的,以'點'開始的行(從'def'下行4行) –

+0

謝謝BrenBarn。問題在於此函數之前的東西缺少括號。 另外,第4行的縮進錯誤是當我從我的文件複製粘貼代碼時發生的;它不存在於我的本地文件中。 –

回答

0

錯過壓痕位置:

for i in range(0, len(word)): 
    points += int(word[i])*ReturnLetterBonusMultiplier(elementValues[i]) 

這不是一個錯誤,但它也不過更正確的:

range(len(word)) 

而且你可以寫兩行更Python:

points = sum(int(w)*ReturnLetterBonusMultiplier(elementValues[i]) for (i,w) in enumerate(word)) 

和接下來的三行相同:

points *= product(ReturnWordBonusMultiplier(elementValues[i]) for (i,w) in enumerate(word)) 

所以,你可以寫這個功能作爲oneliner:

return sum(int(w)*ReturnLetterBonusMultiplier(elementValues[i]) for (i,w) in enumerate(word)) * product(ReturnWordBonusMultiplier(elementValues[i]) for (i,w) in enumerate(word)) 
0

的問題很可能是由於線路前行16
我猜想,你開括號(或別的東西)並忘記關閉它們。

另外,如Igor Chubin指出的那樣,您的縮進效果不好(但這會導致第20行中的錯誤,而不是第16行)。