<p>首先:</p>
<pre><code>visited_caves = []
</code></pre>
<p>然后:</p>
<pre><code>link_caves()
</code></pre>
<p>然后:</p>
<pre><code>this_cave = choose_cave(visited_caves)
</code></pre>
<p>然后:</p>
<pre><code>cave_number = choice(cave_list)
</code></pre>
<p>您正在向<code>random.choice()</code>发送一个空的<code>list</code>,但失败了。你知道吗</p>
<p>将<code>link_caves()</code>更改为仅处理非空的<code>list</code>:</p>
<pre><code>def link_caves():
""" make sure all of the caves are connected with two way tunnels"""
if not (visited_caves and unvisited_caves):
return
this_cave = choose_cave(visited_caves)
next_cave = choose_cave(unvisited_caves)
create_tunnel(this_cave, next_cave)
visit_cave(next_cave)
</code></pre>
<p>注意,如果这个函数没有向<code>random.choice()</code>传递一个无效的参数,它就会陷入困境,因为它使用了一个<code>while</code>循环,在这个循环中条件永远不会改变。我注意到您也在<code>choose_cave()</code>中使用<code>while len(caves) >= 3: cave_number = choice(cave_list)</code>执行此操作。这个特定的片段将检查<code>caves</code>的长度,如果是<code>>= 3</code>,则从<code>cave_list</code>中随机选择一个洞穴。然后它将检查<code>caves</code>的长度,发现它和以前一样,选择一个随机的洞穴,等等,直到永远。也许您希望<code>random.choice()</code>从传递的序列中删除它所选的项。它不这样做。如果需要,可以通过多种方式删除它,例如在随机选取<code>cave_number</code>之后执行<code>caves.remove(cave_number)</code>。你知道吗</p>
<p>请记住,除了提示您的问题和我指出的其他错误之外,您的代码中可能还有其他错误。你知道吗</p>