<p>此处:</p>
<pre><code>while keep_playing == 'y':
huts = occupy_huts()
</code></pre>
<p>您的<code>occupy_huts()</code>函数不返回任何内容(它填充了一个全局变量<code>huts</code>,但不返回它),因此<code>huts = occupy_huts()</code>语句<code>huts</code>后面的现在是<code>None</code>(如果您不显式返回某些内容,则为默认函数返回值)。然后将这个(现在是<code>None</code>)<code>huts</code>变量传递给<code>reveal_occupants()</code>:</p>
<pre><code> reveal_occcupants(index,huts,dotted_line)
</code></pre>
<p>解决方案很简单:修改<code>occupy_huts</code>,因此它不处理全局变量(这几乎总是一个非常糟糕的主意)并返回<code>None</code>,而是处理局部变量并返回它:</p>
<pre><code>def occupy_huts():
huts = []
while len(huts) < 5:
random_choice = random.choice(occupants)
huts.append(random_choice)
return huts
</code></pre>
<p>当我们使用它时,您也在使用<code>global</code>来表示<code>occupants</code>,这是脆弱的(<code>occupy_huts()</code>如果在创建此变量之前调用,则会中断),而您可以将其作为参数传递:</p>
<pre><code>def occupy_huts(occupants):
huts = []
while len(huts) < 5:
random_choice = random.choice(occupants)
huts.append(random_choice)
return huts
</code></pre>
<p>然后在<code>run()</code>:</p>
<pre><code>def run():
keep_playing = 'y'
occupants = ['clones','friend','Jedi Hideout']
# ...
while keep_playing == 'y':
huts = occupy_huts(occupants)
</code></pre>
<p>有趣的是,你传递的参数通常是常量,对程序的逻辑没有影响(即<code>dotted_lines</code>),但是对重要的事情使用全局变量-实际上应该是相反的方式(在你的模块开始时声明虚线为伪常量,不用麻烦把它传递给函数);)你知道吗</p>
<p>另外,请注意,这里的<code>process_user_choice()</code>也有类似的问题:</p>
<pre><code>while keep_playing == 'y':
huts = occupy_huts()
index = process_user_choice()
</code></pre>
<p>因为<code>process_user_choice()</code>函数也不返回任何内容。您应该修改它,使它返回其局部变量<code>index</code>。你知道吗</p>