【问题标题】:Creating a subject and grading system in Python在 Python 中创建学科和评分系统
【发布时间】:2019-03-09 12:08:38
【问题描述】:

我正在尝试为 UNI 项目创建分级系统。 我们被告知有 3 个全局列表:

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

通过这些列表,我们应该创建一种查看科目 (Emner) 的方法,其中包含来自 Karakterer 的成绩,但我们也应该能够查看没有成绩的科目。它应该像这样显示:

我们还应该能够在 (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()

【问题讨论】:

  • 显示您尝试过的代码尝试。

标签: python list


【解决方案1】:

您可以将 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

【讨论】:

    【解决方案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()
    

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 2014-07-12
      • 2016-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多