使用 类 根据 Python 中的用户输入打印出实例属性

Using classes to print out instance attributes based on user input in Python

我是编程新手,想通过使用 Python 创建一个小应用程序来练习。 该应用要求用户输入一个级别和一个学期,该应用将 return 所述级别和学期的课程。

我之前尝试过不使用 类 并且只使用嵌套词典,但是由于某些 类 有不同的课程,所以很快就变得非常混乱。

我如何检查用户输入是否在一个实例中然后 return 它包含的实例属性?

谢谢!

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

这是一个class典型的例子,说明了继承和面向对象编程如何真正帮助您。我们将创建一个父 class Classes 并扩展它。这样会减少很多代码。

class Classes:

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

现在,我们将使用您已有的 classes 对其进行扩展:

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,它们总是有级别、术语和歌曲。

现在只需在 class 中搜索级别和术语即可。对于非常大量的数据,您实际上想要使用真实的数据库。但是,对于像这样的小数据,简单地循环就足够了。

将 classes 放入数组中:

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")
]

现在我们可以遍历它们了。让我们把逻辑放到一个小函数中:

def findByLevelAndTerm(classes, level, term):
    for c in classes:
        if c.level == level and c.term == term:
            return c
    return None

大功告成!现在您可以按级别和术语搜索 classes:

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() 将 return 仅显示第一个结果。如果存在多个,您可能希望它成为 return 列表。