2
我的代码工作,如果喜欢这样做使用addConstraint变量产生错误的答案,但没有使用变量工作正常
from constraint import *
import itertools
def main():
problem = Problem()
x = [0,1,2,3]
f = list(itertools.product(x,x,x,x))
problem.addVariable("a", f)
problem.addConstraint(lambda a: a[0] == a.count(0), "a",)
problem.addConstraint(lambda a: a[1] == a.count(1), "a",)
problem.addConstraint(lambda a: a[2] == a.count(2), "a",)
problem.addConstraint(lambda a: a[3] == a.count(3), "a",)
solutions = problem.getSolutions()
print "Found %d solutions!" % len(solutions)
答案是[{'a': (2, 0, 2, 0)}, {'a': (1, 2, 1, 0)}]
但如果我使用变量它进入疯狂
from constraint import *
import itertools
def main():
problem = Problem()
x = [0,1,2,3]
f = list(itertools.product(x,x,x,x))
problem.addVariable("a", f)
x = 0
problem.addConstraint(lambda a: a[x] == a.count(0), "a",)
x = 1
problem.addConstraint(lambda a: a[x] == a.count(1), "a",)
x = 2
problem.addConstraint(lambda a: a[x] == a.count(2), "a",)
problem.addConstraint(lambda a: a[3] == a.count(3), "a",)
solutions = problem.getSolutions()
print "Found %d solutions!" % len(solutions)
其结果为空列表。我想能够把它放在一个循环中,但我不知道发生了什么。我可能只是错过了一些非常基本的东西,但它只适用于我使用实际数字