2013-05-16 47 views
-1
class Factor: 
def __init__(self, a, b, c):           
    self.a = a 
    self.b = b 
    self.c = c 

def commonFactor(self):            
    global cfa              
    cfa = self.a              
    cfb = self.b 
    while cfb:              
     cfa, cfb = cfb, cfa % cfb         
    return cfa              


def simplifyIntegers(self):           
    self.a = int(self.a/cfa)          
    self.b = int(self.b/cfa) 
    self.c = int(self.c/cfa) 
    return self.c             


def coefficients(self):            
    if self.a == 1:             
     coe1 = 1 
     coe2 = 1 
    else:               
     coe1 = self.a 
     coe2 = 1 
    return self.coe1             


def getFactors(self):             
    positivec = abs(self.c) 
    global result             
    result = set() 
    for i in range(1, int(positivec ** 0.5) + 1): 
     div, mod = divmod(positivec, i) 
     if mod == 0: 
      result |= {i, div} 
    return result             


def numbers(self):             
    if self.c < 0:             
     poslist = [int(x) for x in result]       
     neglist = [-(x) for x in poslist] 
     numpos = poslist[0]           
     numneg = neglist[-1]          
     for i in poslist:           
      number = numpos + numneg         
      poslist.remove(numpos)         
      neglist.remove(numneg) 
      if number == self.b:          
       num1 = numpos 
       num2 = numneg 
       return num1           
      elif len(poslist) > 0:         
       numpos = poslist[0] 
       numneg = neglist[-1] 
      else:             
       print("This equation can not be fully factored.") 
    if self.c > 0:             
     poslist1 = [int(x) for x in result]       
     poslist2 = [int(x) for x in result] 
     neglist1 = [-(x) for x in poslist1] 
     neglist2 = [-(x) for x in poslist1] 
     numpos1 = poslist1[0] 
     numpos2 = poslist2[-1] 
     numneg1 = neglist1[0] 
     numneg2 = neglist2[-1] 
     for i in poslist1:           
      number = numpos1 + numpos2 
      poslist1.remove(numpos1) 
      poslist2.remove(numpos2) 
      if number == self.b: 
       num1 = numpos1 
       num2 = numpos2 
       return num1 
      elif len(poslist1) > 0: 
       numpos1 = poslist1[0] 
       numpos2 = poslist2[-1] 
      else: 
       print("This equation can not be factored.")  
     for i in neglist1:           
      number = numneg1 + numneg2 
      neglist1.remove(numneg1) 
      neglist2.remove(numneg2) 
      if number == self.b: 
       num1 = numneg1 
       num2 = numneg2 
       return num1 
      elif len(neglist1) > 0: 
       numpos1 = neglist1[0] 
       numpos2 = neglist2[-1] 
      else: 
       print("This equation can not be factored.") 

def factoredForm(self):            
    cfa = str(cfa) 
    coe1 = str(coe1) 
    num1 = str(num1) 
    coe2 = str(coe2) 
    num2 = str(num2) 
    equation = (cfa,"(",coe1,"x + ",num1,")(",coe2,"x + ",num2,")") 
    return equation 


a = input("What is A?")             
a = int(a) 
b = input("What is B?") 
b = int(b) 
c = input("What is C?") 
c = int(c) 

e = Factor(a,b,c)              
print(e.factoredForm()) 

我不断收到此错误 -UnboundLocalError:分配问题之前引用局部变量

UnboundLocalError: local variable 'cfa' referenced before assignment 

我已经看过了不少的事情谈论如何解决它,但这些都不似乎有提供了一些解决方法。我已经将变量设置为全局变量,但这仍然不起作用,而其他任何变量都无法更好地工作。如果你需要知道它在做什么,这是我的计算程序。感谢任何能够提供帮助的人。

回答

3

这里看起来好像你正在尝试创建一个本地的cfa这是全球cfa的一个str版本。

def factoredForm(self):            
    cfa = str(cfa) 

您不能在同一范围内混合两种类型的访问。您应该为本地变量使用不同的名称。

另外,您可以编写函数这样

def factoredForm(self): 
    return map(str, (cfa, "(", coe1, "x + " ,num1, ")(", coe2, "x + " ,num2 ,")")) 
+0

谢谢,这是很多的帮助。我像你一样写了我的结尾,但是我的打印结果是这样的,<0x0000000002F7BC18>的地图对象,关于如何修复它的任何想法。我从来没有与这些映射功能混淆过。 – user2387637

+0

@ user2387637,为Python3使用'tuple(map(...))' –

0

这些语句:

cfa = str(cfa) 
coe1 = str(coe1) 
num1 = str(num1) 
coe2 = str(coe2) 
num2 = str(num2) 

建议您想让所有这些变量为实例变量(不是全局)的。我认为你已经找到了每个使用方法并改变了你访问它们的方式。

相关问题