首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Python中创建主题和评分系统

在Python中创建主题和评分系统
EN

Stack Overflow用户
提问于 2019-03-09 20:08:39
回答 2查看 322关注 0票数 1

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

代码语言:javascript
运行
复制
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),我就无法将它放到正确的主题中,因为它只是保存在第一个没有等级的主题上。

希望任何人都能帮助我,在这里发疯!

到目前为止,我有以下代码:

代码语言:javascript
运行
复制
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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-09 20:28:16

您可以将Karakterer设为字典,以便可以在Emner中迭代主题,并使用in运算符高效地查找主题是否在Karakterer中:

代码语言:javascript
运行
复制
Karakterer = dict(Karakterer)
for subject in Emner:
    print(*([subject] + ([Karakterer[subject]] if subject in Karakterer else [])))

这将输出以下内容:

代码语言:javascript
运行
复制
INFO100 C
INFO104 B
INFO110 E
INFO150
INFO125
票数 1
EN

Stack Overflow用户

发布于 2019-03-09 20:41:03

这是一个更新的GradeHandler类演示。我尝试允许更新成绩、删除科目等:

代码语言:javascript
运行
复制
__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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55077190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档