Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python method()接受1个位置参数,但给出了4个?_Python_Arguments - Fatal编程技术网

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
还有一个带有默认值的参数。请确保提供您运行的确切代码。