2014-02-27 50 views
1

以下代碼不起作用。Palindrome?使用不變編程

def isPal(s): 
    def checkPal(s, acc): 
     if len(s) <= 1: 
      return acc 
     else: 
      return checkPal(s[1:-1] (acc and (s[0] == s[-1]))) 
    return checkPal(s, True) 

TypeError: 'str' object is not callable

你能告訴我請,有什麼不好呢?我找不到錯誤。

回答

3

的錯誤是在這裏:

return checkPal(s[1:-1] (acc and (s[0] == s[-1]))) 

s[1:-1]是一個字符串,它後面是(...)這被解釋爲一個函數調用。

也許,你想添加一個逗號,更改爲:

return checkPal(s[1:-1], (acc and (s[0] == s[-1]))) 

您也可以跳過括號:

return checkPal(s[1:-1], acc and (s[0] == s[-1])) 
+0

哈哈,這就是當你用幾種語言並行工作,會發生什麼 - 搞砸Python與OZ。謝謝! – Ina

1

您在第二個checkPalreturn聲明中缺少逗號。下面是固定的版本:

checkPal(s[1:-1], (acc and (s[0] == s[-1]))) 

沒有逗號,你試圖調用字符串s[1:-1]因爲這是造成你的錯誤的功能。