Python新手在这里尝试为煎饼搜索算法编写A*搜索算法。但是,我的构造函数抛出了一个"煎饼"对象,该对象在某些函数中没有属性"numPancakes",而其他函数也使用它。出了什么问题? 下面的打印功能不会引发问题。
class Pancakes:
def __init__(self, stack, backwardCost):
print("Constructor called")
self.backwardCost = backwardCost
self.forwardCost = self.calculateForwardCost()
self.numPancakes = len(stack) - 1
self.pancakeStack = stack
self.total = self.calculateForwardCost() + self.backwardCost
def print(self):
stackState = "Stack: "
for i in range((self.numPancakes)):
stackState += str(self.pancakeStack[i]) + " "
print(stackState)
一旦我尝试使用
def calculateForwardCost(self):
forwardCost = 0
for i in range(self.numPancakes):
gap = self.pancakeStack[index] - self.pancakeStack[index + 1]
if gap < -1 or gap > 1:
forwardCost += 1
return forwardCost
节目说
File "aStar.py", line 8, in __init__
self.forwardCost = self.calculateForwardCost()
File "aStar.py", line 22, in calculateForwardCost
for i in range(self.numPancakes):
AttributeError: 'Pancakes' object has no attribute 'numPancakes'
查看构造函数中内容的顺序:
self.forwardCost = self.calculateForwardCost() # Requires self.numPancakes
self.numPancakes = len(stack) - 1 # But self.numPancakes isn't set until here
您正在尝试在分配之前使用self.numPancakes
。只需交换这些行以确保首先设置numPancakes
:
self.numPancakes = len(stack) - 1
self.forwardCost = self.calculateForwardCost()
实际上,我正在再次阅读您的代码,并且在分配之前也正在使用pancakeStack
代码。在调用该函数之前,需要分配calculateForwardCost
内部所需的每个属性。