2017-03-08 33 views
-1

我无法解决这个问题。我阅读了同样的错误的一些答案,但他们的解决方案不起作用。我没有想法。为什么发生错误?错误是:NameError:name'self'未定义此名称错误的其他解决方案不适用于我的代码

谢谢。

class irNum: 
    def __innit__(self): 
     pass 

    def approx(irNum, digitsNum, digitsDivider, cycles): 
     self.approximate(irNum, digitsNum, digitsDivider, cycles) 

    def approximate(self): 
     divider = 2 
     bestDecimalPlaces = None 
     stage = 0 
     for i in range(0, cycles): 
      for stage in range(0,2): 
       if divider <= int("9" * digitsDivider): 
        if stage == 0: 
         num = int(round(divider * irNum, 0)) 
        elif stage == 1: 
         num = (int(round(divider * irNum, 0))) - 1 
        elif stage == 2: 
         num = int(round(divider * irNum, 0)) + 1 
        else: 
         raise ValueError 

        if num <= int("9" * digitsNum): 
         approx = num/divider 
         difference = irNum - approx 
        else: 
         break 

        sIrNum = str(irNum) 
        sApprox = str(approx) 

        if len(sIrNum) >= len(sApprox): 
         smallest = sApprox 
        else: 
         smallest = sIrNum 

        decimalPlaces = 0 
        go = False 
        passed = True 
        a = 0 
        while a < len(smallest): 
         if go == False: 
          if sIrNum[a] != sApprox[a]: 
           passed = False 

          if sIrNum[a] == ".": 
           go = True 
           a += 1 

         if passed == False: 
          break 

         if go == True: 
          if sIrNum[a] == sApprox[a]: 
           decimalPlaces += 1 
          else: 
           break 

         a += 1 

        if bestDecimalPlaces == None: 
         checksOut = True 
        elif decimalPlaces > bestDecimalPlaces: 
         checksOut = True 
        else: 
         checksOut = False 

        if checksOut == True: 
         bestDecimalPlaces = decimalPlaces 
         bestNum = num 
         bestDivider = divider 
         bestDifference = difference 
         bestApprox = approx 

        if stage > 2: 
         raise ValueError 
        else: 
         stage += 1 

      divider += 1 

     return [bestNum, bestDivider, bestDecimalPlaces, bestDifference, bestApprox] 

pi = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679 

piApprox = irNum.approx(pi, 2, 2, 10 ** 3) 

print(piApprox) 
+0

修复init定义中的拼写错误。它应该是'def __init__'而不是'def __innit__' – putonspectacles

+0

第二次添加堆栈跟踪,我们想知道错误发生的位置 – putonspectacles

回答

0

有AA几个错字代码:

那些我看到包括:

def __init__(self)def__innit__(self)

特定的错误是可能从没有通过自身来作为参数get_approx

应该是get_approx(self, irNum, digitsNum, digitsDivider, cycles)

相关问题