递归if语句蟒蛇
问题描述:
您好我是新来的蟒蛇,并试图实现一个递归函数,它填补了一个表,而是通过程序运行时,我得到以下异常递归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。
答
显然,在某些情况下,您的cost()
函数返回None
。如果我理解正确,那么只有当我或j是负面时才会发生这种情况。由于这只发生在情况2或3中,在我看来,你的i或j确实是可以大于0但小于1的浮点数。情况可能如此吗?如果你提供了关于你的程序的更多细节,有人可能会有更详细的答案!
修复您的缩进以及什么是'gapCost'? max()'如何写入? – depperm
你不会在任何分支中返回任何东西。像'return v1' ...'return v2'等 –
正确测试'None'是:'if table [i] [j] is None:'。这是因为'=='可能导致意外的评估为零或False。我怀疑这是你的问题的原因。 – cdarke