Я получаю ошибку отсутствующего позиционного аргумента. (Связанный список в python) - PullRequest
0 голосов
/ 04 мая 2020

код:

class node:
    def __init__(self,data):
        self.data=data
        self.next=None

class linkedlist:
    def __init__(self):
        self.head=None

def printlist(self):
    temp=self.head
    while(temp):
        print(temp.data,end=" ")
        temp=temp.next

def insert_at_start(self,new_data):
    new_node=node(new_data)
    if self.head==None:
        new_node=self.head
    else:
        new_node.next=self.head
        self.head=new_node

l1=linkedlist()
insert_at_start(1)
insert_at_start(5)
insert_at_start(1)
insert_at_start(7)
insert_at_start(5)

l1.printlist()

ошибка: обратная трассировка (последний вызов был последним): файл "connectedlist.py", строка 65, в insert_at_start (1) Ошибка типа: insert_at_start () отсутствует 1 обязательный позиционный аргумент: 'new_data'

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Во-первых, у вас есть проблема с отступом в том, что эти две функции (printlist и insert_at_start) должны быть методами, поэтому сделайте отступ в l ie в классе linkedlist. Также еще две ошибки: во-первых, вам нужен вызов

l1.insert_at_start(..)

, т.е. вызов метода в экземпляре. А другая - логическая ошибка, заключающаяся в следующих строках:

if self.head == None:
    new_node = self.head

Когда .head еще не существует, вы не думаете, что .head должен быть тем, который назначен на new_node ?

Также обратите внимание, что l1, вероятно, является одним из самых запутанных имен переменных, когда-либо существовавших, пожалуйста, измените его; и PascalCase имена ваших классов.

0 голосов
/ 04 мая 2020

У вас проблема с отступом: insert_at_start не является методом класса linkedlist, поскольку он определен вне области действия класса, и поэтому для него требуется 2 аргумента.

Попробуйте вместо этого:

class linkedlist:
    def __init__(self):
        self.head=None

    def printlist(self):
        temp=self.head
        while(temp):
            print(temp.data,end=" ")
            temp=temp.next

    def insert_at_start(self,new_data):
        new_node=node(new_data)
        if self.head==None:
            new_node=self.head
        else:
            new_node.next=self.head
            self.head=new_node

l1=linkedlist()
l1.insert_at_start(1)
l1.insert_at_start(5)
l1.insert_at_start(1)
l1.insert_at_start(7)
l1.insert_at_start(5)
l1.printlist()
...