Объект Int не повторяется - PullRequest
0 голосов
/ 24 февраля 2011

Я столкнулся с проблемой, которую не знаю, как решить с помощью алгоритма Дейкстры - вот мой код:

infinity = 1000000
invalid_node = -1
#startNode = 0

class Node:
    distFromSource = infinity
    previous = invalid_node
    visited = False

def populateNodeTable():
     nodeTable = []
     f = open("twoDArray.txt", "r")
     for line in f.readlines(): #get number of nodes from file
       nodeTable.append(line.split(','))   # Create matrix of weights

     numNodes = len(nodeTable)            # Count nodes 
     print numNodes
     #for all nodes in text file, set visited to false, distFromSource to infinity & predecessor to none
     **for i in numNodes:
         nodeTable.append(Node(i))**
        #nodeTable.append(Node())

     nodeTable[startNode].distFromSource = 0
     print nodeTable

if __name__ == "__main__":
    populateArray()
    populateNodeTable()

Когда я запускаю этот код, я получаю следующую ошибку:

    Traceback (most recent call last):
  File "2dArray.py", line 63, in <module>
    populateNodeTable()
  File "2dArray.py", line 18, in populateNodeTable
    for i in numNodes:
TypeError: 'int' object is not iterable

Я не уверен, как исправить эту ошибку (раздел между звездочками) - я пытаюсь прочитать текстовый файл, представляющий собой последовательность целых чисел, разделенных запятыми, и подсчитать числоузлов в этом текстовом файле Каждому узлу будут назначены значения в классе Node

Ответы [ 3 ]

2 голосов
/ 24 февраля 2011

Попробуйте:

for i in nodeTable:

Почему вы пытаетесь перебрать numNodes?Вы только что определили одну строку выше как длину таблицы.

Но добавление к той же таблице в цикле не имеет смысла.И это не работает вместе с кодом, который читает файл.Также класс Node вообще не пригоден для использования ...

0 голосов
/ 24 февраля 2011

Как насчет for i in range(numNodes) ... numNodes - это просто число, а не массив чисел, к которому вы стремитесь.

0 голосов
/ 24 февраля 2011

Если вы хотите перебрать индексы элементов, используйте for i, _ in enumerate(nodeTable)

Если вы хотите получить доступ к самому элементу, используйте реальное имя вместо _

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...