【问题标题】:Other solutions for this name error don't work for my code此名称错误的其他解决方案不适用于我的代码
【发布时间】:2017-03-08 21:34:51
【问题描述】:

我无法解决这个问题。我阅读了相同错误的一些答案,但他们的解决方案不起作用。我没主意了。为什么会发生错误?错误是:NameError: name 'self' is not defined

谢谢。

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)

【问题讨论】:

  • 修正初始化定义中的错字。它应该是 def __init__ 而不是 def __innit__
  • 第二次添加堆栈跟踪,我们想知道错误发生在哪里

标签: python function class self


【解决方案1】:

代码中有一些错别字:

我看到的包括:

def __init__(self) 不是 def__innit__(self)

具体的错误可能来自于在get_approx中没有将self作为参数传递

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多