Реализация метода поиска в списке из объектов класса
import sys
class Students():
studBase = []
def __init__(self):
self.lastName = input('Last Name: ')
self.yearOfBirth = input('Year of birth: ')
self.year = input('Year: ')
self.group = input('Group: ')
self.faculty = input('Faculty: ')
self.__class__.studBase.append(self)
def search(self):
param = input('Last name: ')
for param in Students.studBase:
if param in Students.studBase:
return print(f'{self.lastName} {self.faculty}')
else:
return print('Error')
#def sort(self):
def show(self):
print(f"{student.lastName} {student.year} {student.yearOfBirth} {student.group} {student.faculty}")
while(True):
choice = input('Select from the list'
+ '\n1 - Add student'
+ '\n2 - Search'
+ '\n3 - Sort'
+ '\n4 - Show'
+ '\n5 - Exit'
+ '\n'
)
if choice == '1':
n = int(input('Add:'))
for s in range(n):
student = Students()
elif choice == '2':
student.search()
# elif choice =='3':
#student.sort()
elif choice == '4':
for student in Students.studBase:
student.show()
elif choice == '5':
sys.exit()
При попытке вызова метода search() и поиска по критерию, возвращает только последний элемент списка. Не понимаю в чем проблема.
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
for param in Students.studBase:
if param in Students.studBase:
return print(f'{self.lastName} {self.faculty}')
else:
return print('Error')
Что-то у вас и цикл задвоился и конструкция return print ещё (которая вернёт None). Нужно примерно так:
for param in Students.studBase:
print(f'{param.lastName} {param.faculty}')
return
Если вам всё же обязательно нужно печатать ошибку в случае, если ничего не нашлось, тогда, например, так:
found = False
for param in Students.studBase:
print(f'{param.lastName} {param.faculty}')
found = True
if not found:
print('Error')
return
Автор решения: qwerty
→ Ссылка
Вчера покумекав и обратившись за помощью. Пришла к следующему ответу. Возможно, он не является синтаксически "красивым" и взрослые дяди начнут ругаться, но вот что получилось: Добавила ещё сортировку по фамилии
class Students():
studBase = []
def __init__(self):
self.lastName = input('Last Name: ')
self.yearOfBirth = input('Year of birth: ')
self.year = int(input('Year: '))
self.group = input('Group: ')
self.faculty = input('Faculty: ')
self.__class__.studBase.append(self)
def search(self):
param = input('Last name: ')
for i in Students.studBase:
if i.lastName == param:
print(f'{i.lastName} {i.faculty}')
def show(self):
print(f"{student.lastName} {student.year} {student.yearOfBirth} {student.group} {student.faculty}")
def __repr__(self):
return repr((self.lastName, self.yearOfBirth, self.year,self.group,self.faculty))
def sort(self):
print(Students.studBase)#Сначала вывод состояния списка на момент заполнености
return sorted(Students.studBase, key=lambda self: self.year)#возврат отсортированного
while(True):
choice = input('Select from the list'
+ '\n1 - Add student'
+ '\n2 - Search'
+ '\n3 - Sort'
+ '\n4 - Show'
+ '\n5 - Exit'
+ '\n'
)
if choice == '1':
n = int(input('Add:'))
for s in range(n):
student = Students()
elif choice == '2':
student.search()
elif choice =='3':
print(student.sort())
elif choice == '4':
for student in Students.studBase:
student.show()