2013-03-28 2 views
1

Итак, я пытаюсь спланировать путь по сетке 9x9, поэтому boardSize равно 9. Цикл while должен остановить список путей длиной 81 или более, так почему это возможно, что он может добраться до длина 3531, когда существо составляет 7,5, а цель - 5,2, а отметки - 0? Я ошибаюсь, или вы думаете, что это может быть где-то еще?бесконечный пробел во время цикла

def planPath(self, creature, goal, board): 
     print("in the path")  
     path = [board[creature.x][creature.y]]  
     while goal not in path or len(path) < self.boardSize ** 2: 
      print("path length") 
      print(len(path)) 
      nextPossible = {} 
      for neighbor in path[-1].neighbors: 
       if type(neighbor) is not Land.Water: 
        nextPossible[neighbor] = abs(neighbor.location[0] - goal.location[0]) + abs(neighbor.location[1] - goal.location[1]) + abs(neighbor.elevation - goal.elevation)  
      path.append(min(nextPossible, key=nextPossible.get)) 
     return path 
+5

Думаю, вам просто нужно изменить 'или' на 'и' в своем 'while' сообщении. – Marius

+1

* знак * Я боялся, что это будет что-то немым, спасибо. – EasilyBaffled

+3

@ Marius - почему бы не опубликовать ответ? Вопросы с закрытием лучше, чем вопросы без :) – mgilson

ответ

2

Вы хотели петлю while до конца, когда длина пути достигла количество квадратов на board- используя and вместо or в вашем цикле, пока она закончится, когда либо это выражение:

goal not in path 

или это выражение:

len(path) < self.boardSize ** 2 

вычисляет False. Используя or, пока одно из этих выражений истинно, цикл будет продолжать работать. Таким образом, ваш фиксированный код будет:

def planPath(self, creature, goal, board): 
     print("in the path")  
     path = [board[creature.x][creature.y]]  
     while goal not in path and len(path) < self.boardSize ** 2: 
      print("path length") 
      print(len(path)) 
      nextPossible = {} 
      for neighbor in path[-1].neighbors: 
       if type(neighbor) is not Land.Water: 
        nextPossible[neighbor] = abs(neighbor.location[0] - goal.location[0]) + abs(neighbor.location[1] - goal.location[1]) + abs(neighbor.elevation - goal.elevation)  
      path.append(min(nextPossible, key=nextPossible.get)) 
     return path 
Смежные вопросы