Добавление различной информации в связанный список Python и его печать

Я пытаюсь добавить другую информацию в связанный список Python и распечатать его, но, похоже, произошла ошибка. Я хочу напечатать идентификатор, музыку и имя исполнителя. Это моя ошибка. Traceback (most recent call last): File "d:\DSAG\DSAG coding\tempCodeRunnerFile.py", line 101, in <module> for i in range (0,LinkedList.len_link()): TypeError: len_link() missing 1 required positional argument: 'list'

Это мой код:

class Node :
  def __init__(self, newData=None, nextNode=None):
    self.data = newData
    self.next  = nextNode

  def getData(self):
    return self.data

def setData(self,newData):
    self.data = newData

  def getNext(self):
    return self.next

  def setNext(self,newNode):
    self.next = newNode

class music :
  def __init__(self, ID, musicname, artistname):
    self.ID = ID
    self.musicname = musicname
    self.artistname = artistname

  def printlist(self):
    print("ID : " + format(self.ID))
    print("Music : " + format(self.musicname))
    print("Artist : " + format(self.artistname))

class LinkedList :
  def __init__(self):
    self.head  = None
    self.size=0

  def next(self,newNode):
    self.head = newNode

  def len_link(list):
    temp=list.head
    count=0
    while(temp):
        count+=1
        temp=temp.next
    return count

  def printAll(self):

    node = None

    if self.head is not None:
        node = self.head
        print(node.getData())
        while(node.getNext() is not None):
            node = node.getNext()
            print(node.getData())

  def AddMusicToTheFront(self,data):
    if (self.head==None):
        newnode=Node(data)
        self.head=newnode
    else:
        current=self.head
        while(current.next!=None):
            current=current.next
        current.next=Node(data)
    self.size=self.size+1

  def AddMusicAtPosition (self, data, position):
    if (position==0):
        newnode=Node(data)
        newnode.next=self.head
        self.head=newnode

    elif (position>self.size):
        print("\nOut of Range\n")

    elif (position==self.size):
        self.AddMusicToTheFront(data)

    else:
        current=self.head
        count=0
        while(current!=None):
            if (count==position-2):
                break
            else:
                count+=1
                current=current.next
        newnode=Node(data)
        newnode.next=current.next
        current.next=newnode




list = LinkedList()
list.AddMusicToTheFront(music(1, "Lauv", "Chasing Fire"))
list.AddMusicToTheFront(music(2, "Panic! At The Disco", "High Hopes"))
list.AddMusicToTheFront(music(3, "Bishop Briggs", "River"))
list.AddMusicAtPosition(music(4,"Why Don't We", "Hooked"),2)

for i in range (0,LinkedList.len_link()):
    music.printlist()

Это мой желаемый результат:

ID:1
Artist : Lauv
Music : Chasing Fire

^ Этот код будет таким же для остальной информации, которую я включу позже

не используйте list в качестве имени переменной или параметра функции. взгляните на свою функцию len_link, она ожидает аргумент списка.

Paritosh Singh 27.12.2018 17:17

@ParitoshSingh, хорошо, я понимаю, и мне нужно изменить его, но в настоящее время у меня есть ошибка, указывающая на music.printlist()

Tiffany Lim 30.12.2018 16:46

тогда вы можете задать другой вопрос.

Paritosh Singh 30.12.2018 16:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
100
2

Ответы 2

Вероятно, вам нужно определить len_link следующим образом:

  def len_link(self):
    temp=self.head
    count=0
    while(temp):
        count+=1
        temp=temp.next
    return count

Затем вы можете создать экземпляр объекта LinkedList (ll=LinkedList()), а затем вызвать len_link(), как этот ll.len_link().

Итак, ваш код будет выглядеть так:

ll = LinkedList()
ll.AddMusicToTheFront(music(1, "Lauv", "Chasing Fire"))
ll.AddMusicToTheFront(music(2, "Panic! At The Disco", "High Hopes"))
ll.AddMusicToTheFront(music(3, "Bishop Briggs", "River"))
ll.AddMusicAtPosition(music(4,"Why Don't We", "Hooked"),2)

for i in range (0,ll.len_link()):
    music.printlist()

хорошо, я понимаю, но у меня есть ошибка, которая указывает на (music.printlist ()). Я не совсем уверен, как это исправить.

Tiffany Lim 28.12.2018 09:17
for i in range (0,LinkedList.len_link(list)): music.printlist()    #pass list in the len_link finction

И музыку не ставят. он может получить ошибку, потому что музыка никогда не запускалась и не имеет атрибутов, поэтому при попытке печати произойдет ошибка.

вам нужно извлечь элемент из списка, который является музыкальным объектом, а затем вызвать этот объект printlist()

Мне очень жаль, но я не слишком уверен в извлечении элемента.

Tiffany Lim 28.12.2018 09:13

Другие вопросы по теме