我正在尝试编写一个练习来解决Python上的Queen Puzzle(是的,很典型,我知道)。我为董事会状态制作了一个名为Queens
的类,该类吸收了每一边的长度和皇后区列表(如果有)。
在主程序中,我有一个名为list
的{{1}}的{{1}},然后逐个弹出。但是,我从弹出窗口得到的结果似乎是Queens
类型,而不是预期的frontier
类型!
是什么原因造成的,该如何解决?
代码段:
list
预期输出:
Queens
实际输出:
from queens import Queens
def search(n, debug=False, max=6):
frontier = [Queens(n, [])] # queue of states to explore
while frontier != []:
check = frontier.pop()
print(type(check))
if debug:
print(str(numSolutions) + " | Checking:")
print(check)
v = check.validate()
# EDIT: added more of the code; problem seems to arise here
if v == 0:
if debug:
print("Solution!")
numSolutions += 1
if n <= max:
solutions.append(check)
elif v > 0:
if debug:
print(str(v) + " more")
frontier.append(check.branch())
else:
if debug:
print("Invalid state")
pass
(是的,一种类型的语句打印了两行)
编辑:由于主要代码似乎没有问题,因此这是我定义类的文件:
<class 'queens.Queens'>
答案 0 :(得分:1)
我知道了。该问题仅在frontier.append(check.branch())
之后发生。 branch()
返回list
中的queens
。我以为我要在queens
上附加几个frontier
,但实际上是在list
上附加queens
的{{1}}。将frontier
更改为append
解决了该问题。
答案 1 :(得分:0)
当您将frontier
的结果附加到.branch(..)
上并再次重复时,您将得到一个数组(列表)。循环后继续进行下一步的打印内容。
def branch(self):
out = []
for x in range(self.n):
if x not in self.qlist:
qlist = copy.deepcopy(self.qlist)
qlist.append(x)
out.append(Queens(self.n, qlist))
return out