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)