Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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 3.x 我给出了将参数传递到函数中的方法,但在添加链表时,仍然会给出错误代码缺少参数_Python 3.x_Linked List_Singly Linked List - Fatal编程技术网

Python 3.x 我给出了将参数传递到函数中的方法,但在添加链表时,仍然会给出错误代码缺少参数

Python 3.x 我给出了将参数传递到函数中的方法,但在添加链表时,仍然会给出错误代码缺少参数,python-3.x,linked-list,singly-linked-list,Python 3.x,Linked List,Singly Linked List,我是一个非常初学者,你能帮我理解错误吗 我给参数的错误仍然是必需的1位置参数 输入(l1和l2为链表) 代码 错误代码 TypeError: inttolist() missing 1 required positional argument: 'i' self = Solution.inttolist(int(d)) Line 18 in addTwoNumbers (Solution.py) ret = Solution().addTwoNumbers(param_1, pa

我是一个非常初学者,你能帮我理解错误吗

我给参数的错误仍然是必需的1位置参数

输入(l1和l2为链表)

代码

错误代码

TypeError: inttolist() missing 1 required positional argument: 'i'
    self = Solution.inttolist(int(d))
Line 18 in addTwoNumbers (Solution.py)
    ret = Solution().addTwoNumbers(param_1, param_2)
Line 45 in _driver (Solution.py)
    _driver()
Line 56 in <module> (Solution.py)
TypeError:inttolist()缺少1个必需的位置参数:“i”
self=Solution.inttolist(int(d))
AddTwoNumber(Solution.py)中的第18行
ret=Solution().addTwoNumber(参数1,参数2)
第45行输入驱动程序(Solution.py)
_司机()
第56行输入(Solution.py)

问题在于
self
变量被误用。
self
参数是一个包含实例化的
解决方案
类的变量。这有两个问题:

  • 这意味着:
    Solution.inttolist(int(d))
    应使用以下方法调用:
    • self.inttolist(int(d))
  • 您不应该直接分配给
    self
    值,而是为该值创建一个新变量,因此我们必须更改此值:
    • self=ListNode(i%10,inttolist(int(i/10)))
    下面我添加了一个工作解决方案,以防在应用上述更改后仍然卡住

    输入 输入要求一个ListNode,因此我使用以下方法将您的输入列表转换为其规格:

    class ListNode:
        def __init__(self, val=0, next=None):
            self.val = val
            self.next = next
    
        def generate_link_list(l1: list):
            nodes = []
            for val in l1:
             
    
    def generate_link_list(l1: list):
        nodes = []
        for val in l1:
            nodes.append(ListNode(val))
    
        for index, node in enumerate(nodes[:-1]):
            node.next = nodes[index + 1]
        return nodes[0]
    
    l1 = generate_link_list(l1)
    l2 = generate_link_list(l2)
    
    解决方案 通过上述更改,代码将变为:

    class Solution:
        def inttolist(self, i) -> ListNode:
            ans = 0  # <--- the new variable, instead of `self`
            while (i % 10 != 0):
                ans = ListNode(i % 10, self.inttolist(int(i / 10)))
            return ans
    
        def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
            a, b, c, d = l1, l2, 1, 0
            while (a != None):
                d = d + (a.val + b.val) * c
                a, b = a.next, b.next
                c = c * 10
            print(d)
            ans = self.inttolist(int(d))
            return ans
    

    将得到答案:
    987
    ,这是两个列表的总和,当您反转它们的值并连接它们时。

    您的问题是
    解决方案。inttolist(int(d))
    ,您没有安装类,在任何情况下都是在类之后添加
    ()
    。参数
    int(d)
    现在映射到
    self
    。现在,您可以使用稍微不同的技术删除括号,即使用。这将删除
    self
    参数,并允许在不实例化类的情况下调用方法,在任何情况下都可以使用
    Solution.inttolist(int(d))
    Solution.addTwoNumber(param_1,param_2)
    @Thymen我也尝试过这样做,但仍然会出现相同的错误现在我稍微了解了这个问题,我想使用self作为正则变量是个问题,这消除了我的疑虑谢谢。
    class ListNode:
        def __init__(self, val=0, next=None):
            self.val = val
            self.next = next
    
        def generate_link_list(l1: list):
            nodes = []
            for val in l1:
             
    
    def generate_link_list(l1: list):
        nodes = []
        for val in l1:
            nodes.append(ListNode(val))
    
        for index, node in enumerate(nodes[:-1]):
            node.next = nodes[index + 1]
        return nodes[0]
    
    l1 = generate_link_list(l1)
    l2 = generate_link_list(l2)
    
    class Solution:
        def inttolist(self, i) -> ListNode:
            ans = 0  # <--- the new variable, instead of `self`
            while (i % 10 != 0):
                ans = ListNode(i % 10, self.inttolist(int(i / 10)))
            return ans
    
        def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
            a, b, c, d = l1, l2, 1, 0
            while (a != None):
                d = d + (a.val + b.val) * c
                a, b = a.next, b.next
                c = c * 10
            print(d)
            ans = self.inttolist(int(d))
            return ans
    
    print(Solution().addTwoNumbers(l1, l2))