Python method()接受1个位置参数,但给出了4个?
这是我的代码,它使用递归来求解河内塔,每当我试图运行Python method()接受1个位置参数,但给出了4个?,python,arguments,Python,Arguments,这是我的代码,它使用递归来求解河内塔,每当我试图运行solve()时,就会出现这个错误。另一个函数运行良好(我已经测试过了),我的所有方法都包含self。我在SO上没有发现任何类似的错误,这与某人忘记了自己无关。那么,为什么会出问题呢 class RODS(): pass class HANOI(): def __init__(self,rings,start,end): self.rings=rings self.start=start sel
solve()
时,就会出现这个错误。另一个函数运行良好(我已经测试过了),我的所有方法都包含self
。我在SO上没有发现任何类似的错误,这与某人忘记了自己无关。那么,为什么会出问题呢
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
回溯(最近一次呼叫最后一次):
文件“main.py”,第35行,在
河内
文件“main.py”,第20行,在solve中
self.solve(self.rings-1、self.start、other)
TypeError:solve()接受1个位置参数,但给出了4个
因为您的方法没有接收任何参数,并且您正在使用3个参数再次调用它,而该方法只需要参数本身
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.solve(self.rings-1,self.start,other)
,它将3个参数传递给solve()
函数,该函数与solve()
所采用的参数不匹配。请编辑您的问题并添加完整的回溯。完成,很抱歉。顺便说一句,你使用的是什么版本的Python?“solve()从1位置到2位置”对我来说似乎不正确,当我在上运行它时,我得到了预期的TypeError:solve()接受1个位置参数,但给出了4个
,错误消息似乎来自不同版本的代码,其中solve
还有一个带有默认值的参数。请确保提供您运行的确切代码。