2016-11-03 6 views
-2

ノード間のルートが可能かどうかを調べようとしています。何らかの理由で、私のコードは "TypeError:リストインデックスは整数でなくてはならず、strでなければならない"という結果を返し続けます。エラーは、ライン31及び17上にある(LEN場合(N)== numberOfEdges(N):)、(nextEdgeためのリストで[vertexIndex] :)Python 3:コードを実行しようとすると "TypeError:リストインデックスが整数でなければならない"コードを実行しようとしたとき

lists = [] 
lists.append([]) 
lists.append([]) 
lists.append([]) 
lists.append([]) 
lists.append([]) 
lists[0] = [False,True,False,False,True] 
lists[1] = [True,False,True,True,False] 
lists[2] = [False,True,False,True,True] 
lists[3] = [False,True,True,False,True] 
lists[4] = [True,False,True,True,False] 

document = "/Users/jamesball/Documents/workspace/Workspace/testExercise.txt" 

def numberOfEdges(vertexIndex): 
    totalCount = 0 #Set a counter to 0 
    for nextEdge in lists[vertexIndex]: 
     if nextEdge == True: 
       totalCount = totalCount + 1 
    return totalCount 

def pathfinder(file): 
    file_document = open(file, 'r') 
    lists2 = [] 
    with file_document as f: 
     vals = [line.strip() for line in f] 
    for value in vals: 
     lists2.append(value) 
    for n in lists2: 
     print n 
     if len(n) == numberOfEdges(n): 
      print "True" 
     else: 
      print "false" 

pathfinder(document) 
+0

どの行にエラーがありますか? – ODiogoSilva

+0

私は最後のコメントを削除しましたが、私はエラーを正確に突き止めました。あなたが私の知らないエラーを見つけようとするためにあなたのコードフロー全体に従わなければならないので、エラーを引き起こしている行を示すために質問を更新してください – roganjosh

+0

問題が 'for nextEdge in lists [ vertexIndex]: '。 'vertexIndex'は整数ですか? – ODiogoSilva

答えて

1

あなたはvals = [line.strip() for line in f]のファイルからコンテンツを読みますvalsは、文字列のlistの値を保持します。次に、これらの文字列値をnumberOfEdges()の関数if len(n) == numberOfEdges(n)に渡します。しかし、numberOfEdges()関数で反復している間は、for nextEdge in lists[vertexIndex]を実行します。この時点で、その文字列(ファイルから読み取ったもの)をインデックスとしてlists[vertexIndex]に渡していますが、インデックスは常にintの値にする必要があります。

ここではファイルの内容を入力すると役立つ場合があります。ファイルがint値が含まれている場合は、明示的に型キャストすることをintvalsをassingingながらとして持つ:

vals = [int(line.strip()) for line in f] 
# Not sure if I am right about this 
+1

くそー、 'vals = [line.strip()for line in f]'で始まる問題を見つけてコメントを残しました。良い点:) – roganjosh

+0

ファイル「/Users/jamesball/Documents/workspace/Workspace/Test.py」 パスファインダー ファイル「/ Users/jamesball/len()== numberOfEdges(n): TypeError: 'int'型のオブジェクトにlen()がありません –

+0

これは私が私はそれを行う –

0

のコメントを読んで!

lists = [] 
lists.append([]) 
lists.append([]) 
lists.append([]) 
lists.append([]) 
lists.append([]) 
lists[0] = [False,True,False,False,True] 
lists[1] = [True,False,True,True,False] 
lists[2] = [False,True,False,True,True] 
lists[3] = [False,True,True,False,True] 
lists[4] = [True,False,True,True,False] 

document = "/Users/jamesball/Documents/workspace/Workspace/testExercise.txt" 

def numberOfEdges(vertexIndex): # vertexIndex is a STRING 
    totalCount = 0 #Set a counter to 0 
    for nextEdge in lists[vertexIndex]: #PROBLEM! vertexIndex is a STRING!!! 
     if nextEdge == True: 
       totalCount = totalCount + 1 
    return totalCount 

def pathfinder(file): 
    file_document = open(file, 'r') 
    lists2 = [] 
    with file_document as f: 
     vals = [line.strip() for line in f] # puts STRINGS into vals 
    for value in vals: 
     lists2.append(value) # puts vals's STRINGS into lists2 
    for n in lists2: # iterates through each STRING 
     print n 
     if len(n) == numberOfEdges(n): # feeds numberOfEdges a STRING!!! 
      print "True" 
     else: 
      print "false" 

pathfinder(document) 

コンピュータの順序でコードを実行してください。

関連する問題