<p>在<code>one_cycle()</code>函数中,您在某个点<em>分配给<code>x</code>:</p>
<pre><code> if (workingInt%dividor == 0):
workingInt = workingInt/dividor
x = 1
</code></pre>
<p>这使得<code>x</code>成为局部变量。您还可以通过一个测试来引用它:</p>
<pre><code> while x==0:
</code></pre>
<p>但在分配给<em>之前。这就是你例外的原因。你知道吗</p>
<p>要么在函数的开头添加<code>x = 0</code>,要么将其声明为全局(如果这是您的本意)。从外观上看,您没有在函数之外使用<code>x</code>,所以您可能不是有意的。你知道吗</p>
<p>以下工作;<code>workingInt</code>也正在修改,因此需要声明<code>global</code>:</p>
<pre><code>def once_cycle():
global workingInt
x = 0
for dividor in range(1, int(math.floor(math.sqrt(testedInt))+1)):
while x==0:
print "Called"
if (workingInt%dividor == 0):
workingInt = workingInt/dividor
x = 1
if (workingInt > 1):
once_cycle()
return
</code></pre>
<p>或者,简化:</p>
<pre><code>def once_cycle():
global workingInt
for dividor in range(1, int(math.sqrt(testedInt)) + 1):
while True:
if workingInt % dividor == 0:
workingInt = workingInt / dividor
break
if workingInt > 1:
once_cycle()
</code></pre>
<p><code>int(floating_point_number)</code>已经成为浮点参数的基础。你知道吗</p>
<p>请注意,如果<code>workingInt % dividor</code>是<em>而不是</em><code>0</code>,则会得到一个无限循环。第一次<code>testedInt</code>是一个奇数时,这会对您造成影响,例如,您的循环将永远不会退出。你知道吗</p>
<p>以<code>11</code>为例,您将尝试除数<code>1</code>、<code>2</code>和<code>3</code>。当<code>1</code>是一个除数时,<code>workingInt</code>将保持<code>11</code>,循环将中断。下一个<code>for</code>循环,除数是<code>2</code>,而<code>workingInt % 2</code>永远不会给你<code>0</code>,因此循环将永远继续。你知道吗</p>