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

2024-10-04 05:27:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: selffalsetrueif错误stageelsenum
1条回答
网友
1楼 · 发布于 2024-10-04 05:27:14

代码中有一些输入错误:

我看到的包括:

def __init__(self)不是def__innit__(self)

具体错误可能是由于在get_approx中没有将self作为参数传递而导致的

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

相关问题 更多 >