-1
こんにちは私のpythonに新しいですし、テーブルをいっぱいに再帰関数を実装しようとしているが、プログラムによって実行されているとき、私は次の例外に再帰if文の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]
再帰呼び出しが何らかの形で失敗したかのような問題は、私ケース2とケース3をocours、しかし、私は理由を見つけることができません。
テーブルが「なし」で始まり、gabCostがintであると、getSubCostMatrixValueもintを返します。
あなたのインデントを修正し、 'gapCost'は何ですか? 'max()'はどのように書かれていますか? – depperm
あなたはあなたのブランチの何物かを*返すわけではありません。 'return v1' ...' return v2'などと同じです。 –
'None'の正しいテストは' 'table [i] [j]がNoneの場合' 'です。これは、 '=='が予期しない評価を0またはFalseにする可能性があるためです。私はそれがあなたの問題の原因だとは思わない。 – cdarke