我无法解决这个问题。我读了一些相同错误的答案,但他们的解决方案不起作用。我没有想法。为什么会发生错误?错误是: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 :(得分:0)
代码中有一些拼写错误:
我看到的包括:
def __init__(self)
不 def__innit__(self)
特定错误可能来自于未将自身作为参数传递给get_approx
应为get_approx(self, irNum, digitsNum, digitsDivider, cycles)