<p>我将首先考虑一些基本情况:</p>
<pre><code>def current_player_win(dest, move_options):
if dest in move_options:
return True
</code></pre>
<p>这是显而易见的“如果我离胜利只有一步之遥,我就赢了!案例。为了完整起见,我还要补充一点:</p>
<pre><code>def current_player_win(dest, move_options):
if dest in move_options:
return True
if dest == 0:
# Other player must have moved to 0. They won.
return False
</code></pre>
<p>现在,正如你所说,问题的核心是:轮到另一个球员该怎么办。你知道吗</p>
<p>好吧,现在你需要考虑每一个可能的举动:</p>
<pre><code>def current_player_win(dest, move_options):
if dest in move_options:
return True
if dest == 0:
# Other player must have moved to 0. They won.
return False
for my_move in move_options:
if my_move < dest:
other_wins_if_i_do_this = current_player_win(dest - my_move, move_options)
# Now do something with other_wins_if_i_do_this
</code></pre>
<p>因此,通过递归调用函数,您现在有一个变量,即<code>True</code>如果当前玩家移动后另一个玩家赢了<code>my_move</code>,那么这个变量就是<code>False</code>,如果当前玩家移动后另一个玩家输了<code>my_move</code>。你知道吗</p>
<p>那你该怎么办呢?显然,如果<code>other_wins_if_i_do_this</code>对每个移动都给出相同的值,则返回相反的值。但是如果<code>other_wins_if_i_do_this</code>对于某些值是<code>True</code>,但是对于其他值是<code>False</code>,那会怎样呢?你希望你的球员做什么?你知道吗</p>