Python 3.x 我给出了将参数传递到函数中的方法,但在添加链表时,仍然会给出错误代码缺少参数
我是一个非常初学者,你能帮我理解错误吗 我给参数的错误仍然是必需的1位置参数 输入(l1和l2为链表) 代码 错误代码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
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)))
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))