<p>你的字典,<code>monsters</code>,是由怪物的名字,而不是数字键。在</p>
<p>但是您传递的是一个数字<code>num</code>,作为一个键。在</p>
<p>解决这个问题的一种方法是使用<code>list</code>(name,level)元组(我只是猜测dict中的值是levels…),而不是<code>dict</code>。在</p>
<p>但更好的解决方案是使用<code>random.choice</code>而不是{<cd6>}:</p>
<pre><code>def spawnMonster():
global output
enemy = random.choice(list(monsters))
print(enemy)
output = "A " + monster + " comes out of the bushes."
</code></pre>
<p>或者,当然,把两者结合起来:</p>
^{pr2}$
<h2></h2>
<pre><code>enemy, level = random.choice(monsters)
</code></pre>
<hr/>
<p>在我们讨论的时候,您的代码中还有几个其他错误:</p>
<ul>
<li>你把怪物的名字放在一个名为<code>enemy</code>的变量中,但是你试图使用一个名为<code>monster</code>的变量。在</li>
<li><code>randint(0, monsterNum)</code>给你一个从0到<code>monsterNum</code><em>的数字,包括<code>monsterNum</code></em>。但这将是1太多,而且,即使你有一个列表,你也会得到一个<code>IndexError</code>每次它选择最后一个数字。索引使用<code>randrange</code>,而不是<code>randint</code>。在</li>
<li>当<code>monsterNum = 0</code>然后<code>for monster in monsters: monsterNum += 1</code>工作时,只做<code>monsterNum = len(monsters)</code>就简单多了。在</li>
<li>虽然使用<code>global output</code>作为从函数返回信息的一种方式,但是更好的方法是仅使用<code>return output</code>,并让外部代码执行<code>print(spawnMonster())</code>。在</li>
</ul>