2016-11-03 66 views
-2

我試圖找到如果圖中的節點之間的路由是否可能。出於某種原因,我的代碼繼續返回「TypeError:列表索引必須是整數,而不是str」。該錯誤是在線31和17,(如果len(N)== numberOfEdges(N):)(用於nextEdge在列表[vertexIndex] :)Python 3:「TypeError:列表索引必須是整數,而不是str」當試圖執行代碼

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值,你必須明確其類型強制轉換爲int,而assinging vals爲:

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

該死的,我留下了一條評論,發現從'vals = [line.strip()for line in]開始的問題',然後迷失了自己所以刪除了它。好去處:) – roganjosh

+0

回溯(最近通話最後一個): 文件 「/Users/jamesball/Documents/workspace/Workspace/Test.py」 36行,在 探路者(文件) 文件「/用戶/ jamesball/(n)== 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) 

按照計算機的順序執行代碼。

相關問題