2013-09-30 24 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 

我已经阅读那么,这个问题是在比较错误的类型,像int比较与Python用户其他一些问题浮动。我不认为这是我的问题,因为len(探索)应该是一个int,对吗?这就是我所看到的,虽然也许我误解/假设了事情。如果你能提供任何帮助,我将非常感激!

感谢大家的快速回复。建议的更改肯定有效。

+2

另外,/否则不要使用。这是很少使用,可能不会做你认为它会。 –

回答

4

更换for i < len(explored):for i in range(0, len(explored)):

+0

应该是'范围(0,len(探索))'?或者只是'范围(len(探索))' – 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. 更换truefalseTrueFalse
  2. testnode.wolf == testnode.sheep != testnode.farmer在你认为它会做什么,你应该打破,在使用elseand
  3. 避免与for加入两条语句的方式不会表现:它的棘手(非直观)

我的2美分:不要以困难的方式学习Python,因特网上有很多非常直观的资源。我最喜欢的是http://pythonmonk.com/

0

你的具体情况,你也可以这样做:

if testnode in explored: 
    return False 
return True