2016-09-20 3 views
-1

Привет Я новичок в Python и пытается реализовать рекурсивную функцию, которая заполняет таблицу, но при работе с программой, я получаю следующее исключениеРекурсивный Условный оператор питон

неподдерживаемый тип операнда (ов) для +: '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 для некоторых случаев. Если я правильно понимаю, это может произойти только в том случае, если i или j являются отрицательными. Поскольку это происходит только в случаях 2 или 3, мне кажется, что ваши i или j действительно являются поплавками, которые могут быть больше 0, но меньше 1. Может ли это быть так? Если вы предоставите более подробную информацию о своей программе, у кого-то может быть более подробный ответ !?

Смежные вопросы