我解决不了这个问题。我读了一些关于同一个错误的答案,但是他们的解决方案不起作用。我没有主意了。为什么会发生错误?错误为: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)
代码中有一些输入错误:
我看到的包括:
def __init__(self)
不是def__innit__(self)
具体错误可能是由于在
get_approx
中没有将self作为参数传递而导致的应该是
get_approx(self, irNum, digitsNum, digitsDivider, cycles)
相关问题 更多 >
编程相关推荐