Это классический c пример того, как наследование и объектно-ориентированное программирование действительно могут вам помочь. Мы собираемся создать родительский класс Classes
и расширить его. Это уменьшит объем кода.
class Classes:
def __init__(self, level, term, song):
self.level = level
self.term = term
self.song = song
Теперь мы собираемся расширить его с помощью классов, которые у вас уже есть:
class Packet(Classes):
def __init__(self, level, term, song, story, act1, act2):
super().__init__(level, term, song)
self.story = story
self.act1 = act1
self.ac2 = act2
class HeadWay(Classes):
def __init__(self, level, term, song, review, expression, gs):
super().__init__(level, term, song)
self.review = review
self.expression = expression
self.gs = gs
Не так много изменилось, но теперь вы Вы можете быть уверены, что в любое время, когда вы используете взаимозаменяемо PacketClasses или HeadWayClasses, у них всегда будут уровень, термин и песня.
Теперь просто выполнить поиск по классам по уровню и термину. Для действительно большого объема данных вы бы хотели использовать реальную базу данных. Тем не менее, для небольших данных, подобных этому, достаточно просто пройтись по циклу.
Поместить классы в массив:
classes = [
Packet("Pink", 1, "heads shoulders knees and toes", "The giant grass-hopper", "bowling", "craft"),
Packet("Pink", 2, "ABC song", "The giant grass-hopper part 2", "shopping", "craft"),
Packet("Green", 1, "ABC song", "Snow White", "Animals", "craft"),
Packet("Green", 2, "ABC song", "Snow White part 2", "At the zoo", "craft"),
HeadWay("Orange", 1, "song 1", "review 1", "expression 1", "gs 1"),
HeadWay("Orange", 2, "song 2", "review 2", "expression 2", "gs 2"),
HeadWay("Aqua", 2, "song 1", "review 1", "expression 1", "gs 1"),
HeadWay("Aqua", 2, "song 2", "review 2", "expression 2", "gs 2")
]
Теперь мы можем l oop поверх них. Давайте поместим логику c в небольшую функцию:
def findByLevelAndTerm(classes, level, term):
for c in classes:
if c.level == level and c.term == term:
return c
return None
И все! Теперь вы можете искать классы по уровню и термину:
users_level = input("Please enter the level you wish to check: ")
users_term = int(input("Please enter the term you wish to check: "))
found_class = findByLevelAndTerm( classes, users_level, users_term )
if found_class is None: print("Unable to find the class!")
Важно отметить, что findByLevelAndTerm()
вернет только первый результат. Если несколько существует, вы можете вместо этого вернуть список.