<p>你能做的最简单的改变就是使这些变量“全局化”</p>
<p>例如:</p>
<pre><code>a = 5
def myfunc():
print a
a = 7
myfunc()
</code></pre>
<p>将不起作用,因为在<code>myfunc()</code>中对<code>a</code>的赋值使Python认为您正在函数中声明第二个局部变量<code>a</code>。您可以通过执行以下操作来使用全局变量:</p>
^{pr2}$
<p>这显式声明您希望函数中对<code>a</code>的所有引用都引用全局定义的<code>a</code>。在</p>
<p>令人困惑的是,如果不在函数中赋值给<code>a</code>,那么它将把在函数外部定义的变量视为在函数范围内:</p>
<pre><code>a = 5
def myfunc():
print a
myfunc()
</code></pre>
<p>(这将打印数字5。)</p>
<p>编辑:建议使用类的另一个答案是一个提供许多好处的解决方案。在复杂的程序中使用许多全局变量会降低可维护性,因为强制这些变量共享一个名称空间,并且使一个函数可能对另一个函数可能产生的副作用不太明确,因为对于许多全局变量,您可能无法轻易地分辨出某个特定变量在哪里被更改。在</p>
<p>但是,如果您打算采用基于类的方法来解决您的问题,那么最好花点时间熟悉面向对象编程和设计的语言,因为您将要编写的代码的某些行为在您了解概念之前可能还不清楚。在</p>
<p>在您的代码中,将这些变量设为全局变量会改变这一部分:</p>
<pre><code>def play_game():
# Variables
acard = int()
bcard = int()
apoints = int()
bpoints = int()
</code></pre>
<p>为此:</p>
<pre><code>acard = int()
bcard = int()
apoints = int()
bpoints = int()
def play_game():
# Variables
global acard
global bcard
global apoints
global bpoints
# etc.
</code></pre>
<p>还有一个想法:使用</p>
<pre><code>apoints = int()
</code></pre>
<p>因为您希望将变量“声明”为整数,可能并没有您认为的效果。在Python中可以这样做:</p>
<pre><code>apoints = int()
print(apoints)
apoints = 5.0
print(apoints)
apoints = "My string"
print(apoints)
</code></pre>
<p>因此,将<code>apoints</code>设为整型并不能使变量永远都是整数。最好给变量指定一个显式值:</p>
<pre><code>apoints = 0
</code></pre>
<p>Python变量类型的这个属性称为“duck typing”</p>
<p><a href="http://en.wikipedia.org/wiki/Duck_typing" rel="nofollow">http://en.wikipedia.org/wiki/Duck_typing</a></p>