3

抱歉,如果我不小心重复了一个问题,我仍然是 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(explored) 应该是一个 int,对吧?这就是我所看到的,尽管也许我误解/假设了一些事情。如果您能提供任何帮助,我将不胜感激!

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

4

3 回答 3

4

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

于 2013-09-30T21:51:27.650 回答
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和替换和falseTrueFalse
  2. testnode.wolf == testnode.sheep != testnode.farmer 不会以您认为的方式行事,您应该在两个语句中打破它and
  3. 避免使用elsewith for:这很棘手(不直观)

我的 2 美分:不要费力地学习 Python,互联网上有很多很棒的、直观的资源。我最喜欢的是http://pythonmonk.com/

于 2013-09-30T21:53:26.343 回答
0

在您的特定情况下,您还可以执行以下操作:

if testnode in explored:
    return False
return True
于 2013-09-30T21:54:17.623 回答