method() 采用 1 个位置参数,但给出了 4 个?
method() takes 1 positional argument, but 4 were given?
这是我的代码,它使用递归来解决汉诺塔问题,每当我尝试 运行 solve()
时都会出现此错误。另一个函数工作正常 (我已经测试过了),我的所有方法都包含 self
。我没有在 SO 上发现任何类似的错误,这与忘记 self
的人无关。那么,为什么会出错?
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()
这是错误:
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
因为您的方法没有接收任何参数,并且您正在使用 3 个参数再次调用它,并且该方法只需要参数 self。
def solve(self):
else:
self.solve(self.rings-1,self.start,other) # 3 arguments + self argument = 4 arguments
您需要 solve
的参数,但您可能对顶级调用的默认值没有问题:
def solve(self, start=1, stop=3, other=2):
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)
这是我的代码,它使用递归来解决汉诺塔问题,每当我尝试 运行 solve()
时都会出现此错误。另一个函数工作正常 (我已经测试过了),我的所有方法都包含 self
。我没有在 SO 上发现任何类似的错误,这与忘记 self
的人无关。那么,为什么会出错?
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()
这是错误:
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
因为您的方法没有接收任何参数,并且您正在使用 3 个参数再次调用它,并且该方法只需要参数 self。
def solve(self):
else:
self.solve(self.rings-1,self.start,other) # 3 arguments + self argument = 4 arguments
您需要 solve
的参数,但您可能对顶级调用的默认值没有问题:
def solve(self, start=1, stop=3, other=2):
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)