So this is my code, that uses recursion to solve the Tower of Hanoi, and this error comes up whenever I try to run solve()
. The other function works fine (I've tested it), and all of my methods contain self
. I haven't found any similar error on SO, that don't have to do with someone forgetting self
. So, why's this going wrong?
class RODS():
pass
class HANOI():
def __init__(self,rings,start,end):
self.rings=rings
self.start=start
self.end=end
self.rods=RODS()
for i in range(rings):
setattr(self.rods,"rod"+str(i+1),[])
self.rods.rod1=[1,2,3]
def solve(self):
if self.rings == 1:self.pm(self.start,self.end)
else:
other=6-(self.start+self.end)
self.solve(self.rings-1,self.start,other)
self.pm(self.start,self.end)
self.solve(self.rings-1,other,self.end)
def pm(self,start,end):
rod=getattr(self.rods,"rod"+str(start+1))
ring=rod[0]
end_rod=getattr(self.rods,"rod"+str(end+1))
end_rod.append(ring)
rod.remove(ring)
print("Ring:",ring,"-> Rod:",end)
hanoi=HANOI(3,1,3)
hanoi.solve()
This is the error:
Traceback (most recent call last):
File "main.py", line 35, in <module>
hanoi.solve()
File "main.py", line 20, in solve
self.solve(self.rings-1,self.start,other)
TypeError: solve() takes 1 positional argument but 4 were given
question from:
https://stackoverflow.com/questions/65892481/method-takes-1-positional-argument-but-4-were-given 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…