python小于错误比较int和数组长度

时间:2013-09-30 21:49:12

标签: python python-2.7 comparison syntax-error

很抱歉,如果我不小心重复了一个问题,我仍然是Python的新手。

我正在开展一个学校项目,要求我们使用图表搜索解决一个经典的谜语。我用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

我已经在SO上阅读了Python用户的一些其他问题,其中问题是比较错误的类型,比如将int与float进行比较。我不认为这是我的问题,因为len(探索过)应该是一个int,对吗?这就是我所看到的,虽然也许我误解/假设的东西。如果您能提供任何帮助,我将非常感激!

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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. truefalse替换为TrueFalse
  2. testnode.wolf == testnode.sheep != testnode.farmer 不会以您认为的方式行事,您应该在and
  3. 加入的两个语句中将其打破
  4. 避免将elsefor一起使用:这很棘手(非直观)
  5. 我的2美分:不要以艰难的方式学习Python,互联网上有很多优秀,直观的资源。我最喜欢的是http://pythonmonk.com/

答案 2 :(得分:0)

在您的特定情况下,您也可以这样做:

if testnode in explored:
    return False
return True