用Python创建主题和评分系统

2024-03-29 00:00:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个统一的项目放坡系统。 我们被告知有3个全球名单:

Emner = ["INFO100","INFO104","INFO110","INFO150","INFO125"]
FagKoder = [["Informasjonsvitenskap","INF"],["Kognitiv vitenskap","KVT"] 
Karakterer=[["INFO100","C"],["INFO104","B"],["INFO110","E"]]

通过这些列表,我们可以创建一种查看科目(Emner)的方法,使用Karakterer的成绩,但是我们也可以查看没有成绩的科目。它应该这样显示:

View of how to print subjects with and without grades 我们还应该能够在(Emner)中添加新科目,在(Karakterer)中添加新成绩。所有这些都应如上图所示显示。你知道吗

我一直在尝试各种各样的方法来做这件事,但我总是回到两个问题之一。要么我不能打印一个没有成绩的科目,要么如果我添加了一个新科目(Emne),并想添加一个成绩(Karakter),我不能把它放在正确的科目,因为它只是保存在第一个没有成绩的科目。你知道吗

希望有人能帮我,快疯了!你知道吗

到目前为止我掌握的代码:

def emneliste():
global Emner
global Karakterer
emne,kar = zip(*Karakterer)
ans = [list(filter(None, i)) for i in itertools.zip_longest(Emner,kar)]

def LeggTilEmne():
global Karakterer
global Emner
nyttEmne = input("Skriv ny emnekode (4Bokstaver + 3 tall): ")
if nyttEmne not in Emner:
    while re.match('^[A-Å]{3,4}[0-9]{3}$',nyttEmne):
            Emner.append(nyttEmne)
            print(nyttEmne + " Er lagt til!")
            start()
            print("Feil format")
            LeggTilEmne()

else:
    print("Dette Emnet er allerede i listen din")
    start()

def SettKarakter():
global Karakterer
global Emner
VelgEmne = input("Hvilke emne? ")

Emne,Karakter = zip(*Karakterer)
if str(VelgEmne)  not in str(Emner):
    print("Dette faget er ikke i din liste")
    feil = input("om du heller ønsket å opprette fag trykk 2, ellers trykk enter ")
    if feil == str(2):
      LeggTilEmne()
    else:
      start()

else:
      if str(VelgEmne) in str(Karakterer):
        index = Karakterer.index([VelgEmne,"C"])
        Karakterer.pop(index)
        SettKar = input("Karakter? ")
        Emner.append([VelgEmne,SettKar])
        print("Karakter " + SettKar + " Er Lagt til i " + VelgEmne)
        start()
      else:
        SettKar = input("Karakter? ")
        if str(VelgEmne) in str(Emner):
          index = Emner.index(VelgEmne)
          print(index)
          Emner.pop(index)
          Emner.insert(index,[VelgEmne,SettKar])
          print("Karakter " + SettKar + " Er Lagt til i " + VelgEmne)
          start()
        else:
          print("Virker Ikke")
          start()

Tags: ininputindexglobalstartprintstr成绩
2条回答

这是一个更新的GradeHandler类演示。我试图考虑更新成绩、删除科目等:

__name__ = 'DEMO'

class GradeHandler(object):

    EMNER = ["INFO100","INFO104","INFO110","INFO150","INFO125"]
    FAGKODER= [["Informasjonsvitenskap","INF"],["Kognitiv vitenskap","KVT"]]
    KARAKTERER = [["INFO100","C"],["INFO104","B"],["INFO110","E"]]

    def __init__(self):
        self.Emner = self.EMNER
        self.FagKoder = self.FAGKODER
        self.Karakterer = self.KARAKTERER
        self.__create_grade_dict()



    def remove_subject(self, subject_name):
        """
        Remove a subject ot the classes class list variable.
        """
        try:
            self.Emner = [i for i in self.EMNER if i != subject_name]
            self.__create_grade_dict()
        except ValueError:
            pass


    def add_subject(self, subject_name):
        """
        Append a subject ot the classes class list variable.
        """
        if not subject_name in Emner:
            self.Emner.append(subject_name)
            self.__create_grade_dict()



    def __create_grade_dict(self, grade_dict=None):
        """
        Split grades matrix into separate parts; Create and set a dictionary of values.
        """
        if grade_dict is None:
            self.grade_dict = dict()

        sub, grade = zip(*self.Karakterer)
        karakterer_dict = {k:v for k, v in list(zip(sub, grade))}

        for i in self.Emner:
            if i in karakterer_dict.keys():
                self.grade_dict[i] = karakterer_dict[i]
            else:
                self.grade_dict[i] = ''



    def update_grade(self, subject_name, grade='A'):
        """
        Update a grade in the grade dictionary.
        Will also add a subject if not alrady in the dictionary.
        """
        try:
            self.grade_dict[subject_name] = grade
        except (KeyError, ValueError):
            pass




    def print_grades(self, subject_name=None):
        """
        Print dictionary results.
        """
        if subject_name is None:
            for k, v in self.grade_dict.items():
                print('{} {}'.format(k, v))

        else:
            if subject_name in self.grade_dict.keys():
                print('{} {}'.format(subject_name, self.grade_dict[subject_name]))




if __name__ == 'DEMO':

    ### Create an instance of the GradeHandler and print initial grades.
    gh = GradeHandler()
    gh.print_grades()


    ### Append a class
    gh.add_subject('GE0124')
    gh.print_grades()


    ### Add grade 
    gh.update_grade('GE0124', 'B+')
    gh.print_grades()


    ### Update grades
    gh.update_grade('GE0124', 'A-')
    gh.print_grades()


    ### Remove subject (will also remove grade.
    gh.remove_subject('GE0124')
    gh.print_grades()

您可以将Karakterer改为dict,这样就可以遍历Emner中的主题,并使用in运算符有效地查找主题是否在Karakterer

Karakterer = dict(Karakterer)
for subject in Emner:
    print(*([subject] + ([Karakterer[subject]] if subject in Karakterer else [])))

这将输出:

INFO100 C
INFO104 B
INFO110 E
INFO150
INFO125

相关问题 更多 >