2016-05-13 7 views
-2

Мне нужно реализовать список ссылок для поиска и добавления учащихся к существующей группе студентов. Студенты данных включают идентификатор и имя ученика. напримерPython Список ссылок со многими данными

studentList = [ 
student = ("11", "John"), 
student = ("12", "Cindy"), 
student = ("13", "Tracy"), 
] 

У меня есть следующий код до сих пор, но он может использоваться только для отдельных данных, как включить несколько данных? Как успешно найти студента?

class Node(object): 

    def __init__ (self, code, name, n = None): 
     self.data = code 
     self.data = name 
     self.next_node = n 

    def get_next (self): 
     return self.next_node 

    def set_next (self, n): 
     self.next_node = n 

    def get_data (self): 
     return self.data 

    def set_data (self, d): 
     self.data = d 


class LinkedList (object): 

    def __init__(self, r = None): 
     self.root = r 
     self.size = 0 

    def get_size (self): 
     return self.size 

    def add (self, d): 
     new_node = Node (d, self.root) 
     self.root = new_node 
     self.size += 1 

    def find (self, d): 
     this_node = self.root 
     while this_node: 
      if this_node.get_data() == d: 
      return d 
     else: 
      this_node = this_node.get_next() 
     return None 

myList = LinkedList() 
myList.add(5, "Trevor") 
myList.add(10, "Trevor") 
print("size="+str(myList.get_size())) 
print(myList.find(10)) 
+0

Я утверждаю, что на самом деле вам не нужно выполнять список ссылок, чтобы это сделать. Просто используйте 'list'. –

+0

Я также предлагаю использовать 'namedtuple' для вашего объекта' node': 'из коллекции import namedtuple как nt',' node = nt ('node', 'code name') ' –

ответ

0

Ниже приведены мои модификации. Вам не был указан параметр строки. Кроме того, в вашем исходном коде были две переменные данных.

class Node(object): 

def __init__ (self, code, name, n = None): #here you have code and name 
    self.data1 = code #you need to change this to data 1 
    self.data2 = name #you need to change this to data 2 --> they can't have the same name 
    self.next_node = n 

def get_next (self): 
    return self.next_node 

def set_next (self, n): 
    self.next_node = n 

def get_data (self): 
    return self.data1 # update this to data1 to reflect the code 

def set_data (self, d): 
    self.data1 = d 

class LinkedList (object): 

def __init__(self, r = None): 
    self.root = r 
    self.size = 0 

def get_size (self): 
    return self.size 

def add (self, d, s): # have this accept d and s (string) 
    new_node = Node (d, s, self.root) #include a string parameter 
    self.root = new_node 
    self.size += 1 

def find (self, d): 
    this_node = self.root 
    while this_node: 
     if this_node.get_data() == d: 
      return d 
    else: 
     this_node = this_node.get_next() 
    return None 
0

В этом коде есть несколько ошибок (отступ, параметры не передаются). См. Комментарии:

class Node(object): 

    def __init__ (self, code, name, n = None): 
     self.data = code 
     self.data2 = name # using same variable twice 
     self.next_node = n 

    def get_next (self): 
     return self.next_node 

    def set_next (self, n): 
     self.next_node = n 

    def get_data (self): 
     return self.data 

    def set_data (self, d): 
     self.data = d 

class LinkedList (object): 

    def __init__(self, r = None): 
     self.root = r 
     self.size = 0 

    def get_size (self): 
     return self.size 

    def add (self, d, name): 
     new_node = Node (d, name, self.root) # you didn't pass name which is a required argument 
     self.root = new_node 
     self.size += 1 

    def find (self, d): 
     this_node = self.root 
     while this_node: 
      if this_node.get_data() == d: 
       return this_node # indentation off, don't you want the node, instead of d? 
      else: 
       this_node = this_node.get_next() 
     return None 

myList = LinkedList() 
myList.add(5, "Trevor") 
myList.add(10, "Trevor") 
print("size="+str(myList.get_size())) 
print(myList.find(10)) 

В будущем, пожалуйста, разместите любые сообщения об ошибках, которые у вас есть. Кажется, что при запуске кода ваш код сбросил ошибку с отступом.

+0

Спасибо trans1st0r, но как я могу получить функция «find» возвращает мне читаемые данные, такие как Code = 10, Name = Trevor. Все, что я получаю, это «<__ main __. Объект узла в 0x02DA7CF0>». Еще раз спасибо за вашу помощь –

+0

просто измените оператор return в функции find, чтобы вернуть нужную строку. довольно простой. – trans1st0r

Смежные вопросы