很抱歉,如果我不小心重复了一个问题,我仍然是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,对吗?这就是我所看到的,虽然也许我误解/假设的东西。如果您能提供任何帮助,我将非常感激!
感谢大家的快速回复。建议的更改肯定有效。
答案 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
顺便提一下,您的代码还存在其他一些问题:
true
和false
替换为True
和False
testnode.wolf == testnode.sheep != testnode.farmer
不会以您认为的方式行事,您应该在and
else
与for
一起使用:这很棘手(非直观)我的2美分:不要以艰难的方式学习Python,互联网上有很多优秀,直观的资源。我最喜欢的是http://pythonmonk.com/
答案 2 :(得分:0)
在您的特定情况下,您也可以这样做:
if testnode in explored:
return False
return True