【问题标题】:I am giving passing the argument into function still it gives error code missing argument while adding linked list我正在将参数传递给函数,但它在添加链表时仍然给出错误代码缺少参数
【发布时间】:2020-12-18 05:59:12
【问题描述】:

我是编码的初学者,你能帮我理解错误

我给参数仍然错误说需要 1 个位置参数

输入(l1和l2是链表)

l1=[2,4,3]
l2=[5,4,6]

代码

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def inttolist(self, i) -> ListNode:
        while(i%10!=0):
            self = ListNode(i%10, inttolist(int(i/10)))
        return self
    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)
        self = Solution.inttolist(int(d))
        return self

错误代码

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)

【问题讨论】:

  • 你的问题是Solution.inttolist(int(d)),你没有设置类,无论如何在课后添加()。参数int(d) 现在映射到self。现在您可以使用稍微不同的技术来删除括号,即使用staticmethod。这将删除self 参数并允许在不实例化类的情况下调用方法,在任何情况下都使用Solution.inttolist(int(d))Solution.addTwoNumbers(param_1, param_2)
  • @Thymen 我也尝试过,但仍然弹出相同的错误

标签: python-3.x linked-list singly-linked-list


【解决方案1】:

问题在于self 变量的滥用。 self 参数是一个包含实例化 Solution 类的变量。这样做有两个问题:

  1. 这意味着:Solution.inttolist(int(d)),应该使用:
  • self.inttolist(int(d))
  1. 您不应该直接分配给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

跑步:

print(Solution().addTwoNumbers(l1, l2))

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

【讨论】:

  • 现在我对这个问题有点了解了,我想使用 self 作为常规变量是问题,这消除了我的疑问,谢谢。
猜你喜欢
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2019-05-28
  • 2011-12-08
  • 1970-01-01
  • 2020-08-28
  • 2013-01-27
相关资源
最近更新 更多