2016-09-20 155 views
-1

您好我是新來的蟒蛇,並試圖實現一個遞歸函數,它填補了一個表,而是通過程序運行時,我得到以下異常遞歸if語句蟒蛇

不支持的操作類型爲+:'NoneType'和'int'。

def cost(i, j): 
    if table[i][j] == None: 
     v1 = v2 = v3 = v4 = None 
     if i > 0 and j > 0: 
      print "case1" 
      v1 = cost(i-1, j-1) + getSubCostMatrixValue(options[string1[i]], options[string2[j]]) 
     if i > 0 and j >= 0: 
      print "case2" 
      v2 = cost(i-1, j) + gapCost 
     if i >= 0 and j > 0: 
      print "case3" 
      v3 = cost(i, j-1) + gapCost 
     if i == 0 and j == 0: 
      print "case4" 
      v4 = 0 
     print "Max:" 
     print max(v1,v2,v3,v4) 
     table[i][j] = max(v1,v2,v3,v4) 
     return table[i][j] 

問題ocours我的情況下2和3的情況下,彷彿遞歸調用莫名其妙失敗,但我不能找出原因。我覺得這是明顯的東西

表是從開始填充無,gabCost是一個int,getSubCostMatrixValue也返回一個int。

+0

修復您的縮進以及什麼是'gapCost'? max()'如何寫入? – depperm

+1

你不會在任何分支中返回任何東西。像'return v1' ...'return v2'等 –

+0

正確測試'None'是:'if table [i] [j] is None:'。這是因爲'=='可能導致意外的評估爲零或False。我懷疑這是你的問題的原因。 – cdarke

回答

0

顯然,在某些情況下,您的cost()函數返回None。如果我理解正確,那麼只有當我或j是負面時纔會發生這種情況。由於這隻發生在情況2或3中,在我看來,你的i或j確實是可以大於0但小於1的浮點數。情況可能如此嗎?如果你提供了關於你的程序的更多細節,有人可能會有更詳細的答案!