2013-09-30 2 views
3

Извините, если я случайно продублировал вопрос, я все еще новичок в Python.python меньше, чем ошибка сравнения int и длина массива

Я работаю над школьным проектом, который требует от нас решения классической загадки с помощью поиска графа. Я пишу на Python, потому что это хороший повод для меня, чтобы начать изучать его, но у меня возникают проблемы, которые мне странны.

Для одного раздела, я хочу просмотреть список исследуемых узлов и посмотреть, совпадает ли другой узел с уже существующим в списке исследуемых узлов. Если он еще не изучен, он потенциально может быть следующим узлом для изучения на графике.

Проблема, которую я нахожу, находится в строке, где я создаю цикл for для поиска каждого значения в исследуемом списке. Вот что я писал:

def validate(self, testnode, explored): 
    if((testnode.wolf == testnode.sheep != testnode.farmer) or (testnode.sheep == testnode.cabbage != testnode.farmer)): 
     #return failure 
     return false 
    for i < len(explored): 
     if testnode == explored[i]: 
      #return failure 
      return false 
    else: return true 

и вот моя ошибка

File "AI_Lab1_BFS.py", line 54 
    for i < len(explored): 
     ^
SyntaxError: invalid syntax 

Я прочитал некоторые другие проблемы с пользователями Python на SO, где проблема сравнивал неправильные типы, как сравнение в Int к поплавок. Я не думаю, что это моя проблема, хотя, поскольку len (explored) должен быть int, не так ли? Это то, что я видел, хотя, возможно, я неправильно понял/принял вещи. Если вы можете предложить любую помощь, я буду очень благодарен!

Спасибо всем за ваши быстрые ответы. Рекомендуемые изменения определенно сработали.

+2

Кроме того, не следует использовать для/другое. Он очень редко используется и, вероятно, не делает того, что вы думаете. –

ответ

4

Заменить for i < len(explored):for i in range(0, len(explored)): с

+0

Должно ли быть 'range (0, len (explored))'? Или просто 'range (len (explored))' – dckrooney

+0

@dckrooney: Совершенно верно, спасибо, что поймали это! –

+0

они такие же, не так ли? – justhalf

3

Это не действительный синтаксис Python. На самом деле, это не действительный оператор в любом псевдокоде, потому что вам нужно начальное значение для i. Если предположить, что указанное значение 0, вы хотите:

def validate(self, testnode, explored): 
    if((testnode.wolf == testnode.sheep != testnode.farmer) or (testnode.sheep == testnode.cabbage != testnode.farmer)): 
     #return failure 
     return false 
    for i in range(len(explored)): 
     if testnode == explored[i]: 
      #return failure 
      return false 
    else: return true 

Или еще лучше:

def validate(self, testnode, explored): 
    if((testnode.wolf == testnode.sheep != testnode.farmer) or (testnode.sheep == testnode.cabbage != testnode.farmer)): 
     #return failure 
     return false 
    for node in explored: 
     if testnode == node: 
      #return failure 
      return false 
    else: return true 

Кстати, есть и другие проблемы, связанные с вашим кодом:

  1. заменяющие true и false с True и False
  2. testnode.wolf == testnode.sheep != testnode.farmerне будет вести себя так, как вы думаете, что будет делать, вы должны разорвать, что в двух утверждений, соединенных and
  3. избегать использования else с for: это сложно (не интуитивное)

Мои 2 цента: не изучайте Python с трудом, в Интернете есть много замечательных, интуитивных ресурсов. Мой любимый http://pythonmonk.com/

0

В вашем конкретном случае, вы также можете сделать:

if testnode in explored: 
    return False 
return True 
Смежные вопросы