<p>我认为您需要的是如何重新生成内部生成器,而无需将创建它的调用与<code>for</code>循环放在同一行中。我认为最简单的方法是将定义<code>generator2</code>的行移到外循环中:</p>
<pre><code>generator1 = whatever() # this could be a long generator expression
for i in generator1:
generator2 = whatever2()
for j in generator2:
...
</code></pre>
<p>由于许多原因,您当前的代码无法工作。其中,<code>next</code>没有<code>return</code>一个<code>StopIteration</code>,它提出了一个例外。但是没有理由尝试在内部循环中调用<code>next</code>,您只需要在外部循环的每次迭代中重新创建耗尽的生成器。你知道吗</p>
<p>但是正如jasonharper评论的那样,这个问题实际上不需要两个嵌套循环。首先,让我们尝试一个循环。你所需要做的就是计算鸡和鸡腿的数量,这样你就可以计算出给定数量的兔子的总数(当你循环计算这个数字时)。然后检查腿是否是双头的。如果是这样,你已经找到了解决办法。你知道吗</p>
<pre><code>for rabbits in range(heads+1):
r_legs = rabbits * 4
chickens = heads - rabbits
c_legs = legs - r_legs
if c_legs == chickens * 2:
return {"Rabbits": rabbits, "Chickens": chickens}
</code></pre>
<p>但是你可以更进一步,不用外环。首先假设所有的头都是鸡的。每只鸡有一对腿。我们可以很容易地计算出多了多少对腿。每多出一对,其中一个头就属于兔子而不是鸡。你知道吗</p>
<pre><code>def Chinese_puzzle(heads,legs):
rabbits = legs // 2 - heads
chickens = heads - rabbits
return {"Rabbits": rabbits, "Chickens": chickens}
</code></pre>
<p>我没有做任何精神检查,但你可能只需要检查腿的奇数,或鸡或兔子的负数。我建议在这些情况下引发异常,而不是返回错误消息字符串。你知道吗</p>