UnboundLocalError:在函数中赋值之前引用了局部变量“ n”

问题描述

我必须创建一个函数,该函数将找到最小的m,其中n是整数。 n=(r/(R-r))*m

我不断收到错误消息:local variable 'n' referenced before assignment.我在函数开始时尝试使用全局n,但随后出现错误消息:name 'n' is not defined我们将不胜感激。谢谢。这是我的代码

def courbeFerme(R,r):
    global n
    if (R in range(0,1000)) and (r in range(0,1000)):
        m=0
        while ((r/(R-r))*m).is_integer()==False: 
            m+=1
            n=(r/(R-r))*m           
        return n

解决方法

如果您的while循环的条件在第一次测试中失败,则您永远不会分配给n,但是您仍然尝试return。您需要:

  1. 确保分配总是至少发生一次,或者
  2. 赋予n一个全局范围内的默认值,因此即使您未在函数中为其分配值,它也需要读取。

如果不是global,则可以使用相同的解决方案,但是在输入函数时必须给它提供默认值。