def solve(numLegs, numHeads):
for numSpiders in range(0, numHeads + 1):
for numChicks in range(0, numHeads - numSpiders + 1):
numPigs = numHeads - numChicks - numSpiders
totLegs = 4*numPigs + 2*numChicks + 6*numSpiders
if totLegs == numLegs:
return [numPigs, numChicks, numSpiders]
return [None, None, None]
def barnYard(heads, legs):
pigs, chickens, spiders = solve(legs, heads)
if pigs == None:
print "There is no solution."
else:
print 'Number of pigs: ', pigs
print 'Number of Chickens: ', chickens
print 'Number of Spider: ', spiders
barnYard(20,56) # 8 pigs - 12 chickens
barnYard(21,62) # 10 pig - 11 chickens
Run Code Online (Sandbox Code Playgroud)
20头和56腿返回8头猪和12头鸡,所以我做了21和62添加一只蜘蛛,但它仍然返回猪和鸡,代码中有什么不对?
谢谢!
你的代码是正确的 - 在最外层for循环的第一次迭代中,numChicks是0.由于solve一旦找到有效匹配就返回,则不会尝试另一个可能的有效匹配.
您可以将return语句更改为yield语句并迭代solve结果以获得所有可能的组合.
例如:
def solve(numLegs, numHeads):
for numBees in range(0, numHeads + 1):
for numChicks in range(0, numHeads - numBees + 1):
numPigs = numHeads - numChicks - numBees
totLegs = 4*numPigs + 2*numChicks + 6*numBees
if totLegs == numLegs:
yield [numPigs, numChicks, numBees]
def barnYard(heads, legs):
for pigs, chickens, bees in solve(legs, heads):
print 'Number of pigs: ', pigs
print 'Number of chickens: ', chickens
print 'Number of bees: ', bees
barnYard(20,56)
Run Code Online (Sandbox Code Playgroud)
将输出:
Number of pigs: 8
Number of chickens: 12
Number of bees: 0
Number of pigs: 6
Number of chickens: 13
Number of bees: 1
Number of pigs: 4
Number of chickens: 14
Number of bees: 2
Number of pigs: 2
Number of chickens: 15
Number of bees: 3
Number of pigs: 0
Number of chickens: 16
Number of bees: 4
Run Code Online (Sandbox Code Playgroud)