简单示例中的意外结果(Unexpected result in a simple example)

编程入门 行业动态 更新时间:2024-10-27 14:25:40
简单示例中的意外结果(Unexpected result in a simple example) 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

20头和56腿返回8头猪和12头鸡,所以我做了21和62添加一只蜘蛛,但它仍然返回猪和鸡,代码中有什么错误?

谢谢!

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

20 heads and 56 legs returns 8 pigs and 12 chickens, so I made it 21 and 62 to add a spider, but it still returns pigs and chickens, whats wrong in the code?

Thanks!

最满意答案

您的代码是正确的 - 在最外层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)

将输出:

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

Your code is correct - in the first iteration of the outermost for loop, numChicks is 0. Since solve returns as soon as it finds a valid match, another possible valid match won't be attempted.

You could change the return statement into a yield statement and iterate over solve's results to get all possible combinations.

For instance:

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)

will output:

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

更多推荐

本文发布于:2023-08-04 01:19:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1405217.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:示例   意外   简单   simple   result

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!