Использование классов для распечатки атрибутов экземпляра на основе пользовательского ввода в Python - PullRequest
1 голос
/ 19 февраля 2020

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

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

Как я могу проверить, находится ли пользовательский ввод внутри экземпляра, а затем вернуть атрибуты экземпляра, в которых он содержится?

Спасибо!

class PacketClasses:

    def __init__(self, level, term, song, story, act1, act2):
        self.level = level
        self.term = term
        self.song = song
        self.story = story
        self.act1 = act1
        self.ac2 = act2


class HeadWayClasses:

    def __init__(self, level, term, song, review, expression, gs):
        self.level = level
        self.term = term
        self.song = song
        self.review = review
        self.expression = expression
        self.gs = gs


p1 = Packet("Pink", 1, "heads shoulders knees and toes", "The giant grass-hopper", "bowling", "craft")
p2 = Packet("Pink", 2, "ABC song", "The giant grass-hopper part 2", "shopping", "craft")
g1 = Packet("Green", 1, "ABC song", "Snow White", "Animals", "craft")
g2 = Packet("Green", 2, "ABC song", "Snow White part 2", "At the zoo", "craft")

o1 = HeadWay("Orange", 1, "song 1", "review 1", "expression 1", "gs 1")
o2 = HeadWay("Orange", 2, "song 2", "review 2", "expression 2", "gs 2")
a1 = HeadWay("Aqua", 2, "song 1", "review 1", "expression 1", "gs 1")
a2 = HeadWay("Aqua", 2, "song 2", "review 2", "expression 2", "gs 2")

users_level = input("Please enter the level you wish to check: ")
users_term = int(input("Please enter the term level you wish to check: "))

# if users_level & users_term in a class, print the curriculum

1 Ответ

2 голосов
/ 19 февраля 2020

Это классический 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() вернет только первый результат. Если несколько существует, вы можете вместо этого вернуть список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...