Объект 'int' не повторяется, когда я не пытаюсь повторять - PullRequest
1 голос
/ 20 апреля 2011

Следующий фрагмент кода пытается создать карту, которая показывает минимальное количество ходов, которое потребуется, чтобы добраться от каждого квадрата на этой карте до указанного местоположения.Функция в целом не имеет отношения к проблеме, но я подумал, что должен представить свою проблему в контексте.Я также импортировал deque из коллекций.Странная часть появляется в строке 7. Я получаю объект TypeError: 'int' не повторяемый.Но утверждение «distance_from_loc, f_loc = squares_to_check.popleft ()» не должно пытаться повторить что-либо в меру своих знаний.Любая помощь будет принята с благодарностью.

    def complex_distance(self, loc):
        row, col = loc
        squares_to_check = deque((0, loc))
        self.complex_distance_map = zeros((self.height, self.width), int) + 999
        self.complex_distance_map[row][col] = 0
        while squares_to_check:
            distance_from_loc, f_loc = squares_to_check.popleft()
            distance_from_loc += 1
            for d in AIM:
                n_loc = self.destination(f_loc, d)
                n_row, n_col = n_loc
                if distance_from_loc < self.complex_distance_map[n_row][n_col] and not self.map[n_row][n_col] == -4:
                    squares_to_check.append((distance_from_loc, n_loc))
                    self.complex_distance_map[n_row][n_col] = distance_from_loc

1 Ответ

6 голосов
/ 20 апреля 2011

Строка делает пытается повторить:

>>> a, b = 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable

Линия

squares_to_check = deque((0, loc))

инициализирует деку двумя элементами 0 и loc, а не одним элементом (0, loc). Используйте

squares_to_check = deque([(0, loc)])

чтобы получить желаемый результат.

...