我处理的是下面的Water Buckets程序,我似乎无法调用该程序,因为它是两个类,第一个类与第二个类一起使用。我只是一个初学者,所以我想知道在调用过程中我做错了什么,像我这样的初学者应该注意哪些规则来避免这些问题。你知道吗
我做了一些研究,但是我发现很难调整解决方案来解决这个问题,因为我不确定当它说“dict”object has no attribute“has \u key”时的错误是什么意思。如果可以用更简单的术语来表达,那就太好了,因为许多人(包括我)对CS和Python都是新手。你知道吗
代码:
class manager:
""" Manage game queue. keep track of states already seen
and who their parent states are"""
def __init__ (self) :
self.queue = []
self.seen = {}
def getState (self) :
"return next state and pop it off the queue"
if not self.queue : return None
state = self.queue[0]
self.queue = self.queue[1:]
return state
def addState (self, parentState, newState) :
"add state if it's new. Remember its parent"
if self.seen.has_key(str(newState)) : return
self.seen[str(newState)] = str(parentState)
self.queue.append (newState)
#print '--- Adding ', newState
def getSolution (self) :
"Return solution from latest state added"
solution = []
state = self.queue[-1]
while state :
solution.append (str(state))
state = self.getParent(state)
solution.reverse()
return solution
def getParent (self, childState) :
"""return parent of state, if it exists"""
try : return self.seen[str(childState)]
except : return None
class bucketPlayer:
def __init__ (self, manager) :
self.manager = manager
def test (self, oldstate, newstate) :
[newA, newB] = newstate
won = (newA == self.goal or newB == self.goal)
self.manager.addState (oldstate, newstate)
return won
def playGame (self, aMax, bMax, goal) :
"grab a state and generate 8 more to submit to the manager"
self.goal = goal
self.manager.addState("", [0,0]) # start with 2 empty buckets
while 1 :
oldstate = self.manager.getState()
[aHas,bHas] = oldstate
if self.test (oldstate, [aMax,bHas]): break # fill A from well
if self.test (oldstate, [0 ,bHas]): break # empty A to well
if self.test (oldstate, [aHas,bMax]): break # fill B from well
if self.test (oldstate, [aHas,0 ]): break # empty B to well
howmuch = min(aHas, bMax-bHas)
if self.test (oldstate, [aHas-howmuch,bHas+howmuch]): break # pour A to B
howmuch = min(bHas, aMax-aHas)
if self.test (oldstate, [aHas+howmuch,bHas-howmuch]): break # pour B to A
print ("Solution is: ")
print (string.join (self.manager.getSolution(), "\n"))
m = manager()
p = bucketPlayer(m)
# A=7 liters, B=11 liters, Want=6
p.playGame(7,11,6)
错误:
Traceback (most recent call last):
File "/Applications/Python 3.4/Portfolio Projects/Project 4.py", line 70, in <module>
p.playGame(7,11,6)
File "/Applications/Python 3.4/Portfolio Projects/Project 4.py", line 51, in playGame
self.manager.addState("", [0,0]) # start with 2 empty buckets
File "/Applications/Python 3.4/Portfolio Projects/Project 4.py", line 18, in addState
if self.seen.has_key(str(newState)) : return
AttributeError: 'dict' object has no attribute 'has_key'
旧的has_key方法在python3.x中已经被除垢和was removed completely
改用in conditional的
if key in dict:
形式:相关问题 更多 >
编程相关推荐