此名称错误的其他解决方案不适用于我的代码

时间:2017-03-08 21:34:51

标签: python function class self

我无法解决这个问题。我读了一些相同错误的答案,但他们的解决方案不起作用。我没有想法。为什么会发生错误?错误是: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)

1 个答案:

答案 0 :(得分:0)

代码中有一些拼写错误:

我看到的包括:

def __init__(self) def__innit__(self)

特定错误可能来自于未将自身作为参数传递给get_approx

应为get_approx(self, irNum, digitsNum, digitsDivider, cycles)