Python实现大学课程评分系统的功能实现问题求助
解决你的大学评分系统代码问题
首先,你的代码核心问题是混淆了Emner和Karakterer的职责:Emner应该只存纯粹的课程代码,而Karakterer负责存储课程与成绩的映射关系,但你的SettKarakter函数错误地修改了Emner列表,同时emneliste的展示逻辑也没正确关联课程和成绩。下面是具体的解决思路和修正后的代码:
核心修复思路
1. 修复课程列表展示功能
需要遍历Emner中的每一门课程,单独匹配Karakterer里的对应成绩,确保无成绩的课程也能正常显示:
- 对每个课程代码,在
Karakterer中查找是否存在对应条目 - 找到则显示课程+成绩,未找到则显示课程+“Ingen karakter”(无成绩)
2. 修复新增成绩功能
绝对不要修改Emner列表!所有成绩相关操作都应该针对Karakterer:
- 先验证课程是否在
Emner中,不在则引导用户新增课程 - 检查该课程是否已有成绩:有则更新,无则新增条目到
Karakterer
3. 修正新增课程的格式验证逻辑
原代码的while循环逻辑错误,应该先验证输入格式,正确才添加课程,否则重新提示输入
修正后的完整代码
import re # 全局列表初始化 Emner = ["INFO100","INFO104","INFO110","INFO150","INFO125"] FagKoder = [["Informasjonsvitenskap","INF"],["Kognitiv vitenskap","KVT"]] Karakterer=[["INFO100","C"],["INFO104","B"],["INFO110","E"]] def emneliste(): """展示所有课程(含已有成绩和无成绩的课程)""" print("\n=== Din emneliste ===") for emne in Emner: # 查找当前课程的成绩 karakter = "Ingen karakter" for entry in Karakterer: if entry[0] == emne: karakter = entry[1] break print(f"{emne}: {karakter}") start() def LeggTilEmne(): """新增课程到Emner列表""" global Emner nyttEmne = input("\nSkriv ny emnekode (3-4 bokstaver + 3 tall): ") # 先验证格式是否正确,支持大小写输入 if re.match('^[A-Åa-å]{3,4}[0-9]{3}$', nyttEmne): nyttEmne = nyttEmne.upper() # 统一转为大写,避免大小写重复问题 if nyttEmne not in Emner: Emner.append(nyttEmne) print(f"{nyttEmne} er lagt til!") else: print("Dette emnet er allerede i listen din") else: print("Feil format! Prøv igjen (f.eks. INFO100)") LeggTilEmne() start() def SettKarakter(): """新增/更新课程成绩""" global Karakterer, Emner VelgEmne = input("\nHvilke emne? ").upper() # 检查课程是否在Emner中 if VelgEmne not in Emner: print("Dette faget er ikke i din liste") feil = input("Hvis du vil opprette faget, trykk 2, ellers trykk enter: ") if feil == "2": LeggTilEmne() else: start() return # 检查课程是否已有成绩 existing_index = None for idx, entry in enumerate(Karakterer): if entry[0] == VelgEmne: existing_index = idx break SettKar = input("Skriv karakter (A-F): ").upper() # 验证成绩格式,确保是合法成绩 if SettKar not in ["A", "B", "C", "D", "E", "F"]: print("Ugyldig karakter! Skriv en bokstav mellom A-F") SettKarakter() return if existing_index is not None: # 更新已有成绩 Karakterer[existing_index][1] = SettKar print(f"Karakteren for {VelgEmne} er oppdatert til {SettKar}!") else: # 新增成绩条目 Karakterer.append([VelgEmne, SettKar]) print(f"Karakter {SettKar} er lagt til for {VelgEmne}!") start() def start(): """主菜单入口""" print("\n=== Karakteradministrasjon ===") print("1. Vis emneliste") print("2. Legg til emne") print("3. Sett/oppdater karakter") print("4. Avslutt") valg = input("Velg et alternativ: ") if valg == "1": emneliste() elif valg == "2": LeggTilEmne() elif valg == "3": SettKarakter() elif valg == "4": print("Ha en fin dag!") else: print("Ugyldig valg, prøv igjen") start() # 启动程序 start()
关键修改说明
emneliste函数:改为遍历每个课程单独匹配成绩,确保无成绩课程也能正常显示SettKarakter函数:彻底移除对Emner的修改,所有操作针对Karakterer,支持更新已有成绩和新增成绩LeggTilEmne函数:修正正则验证逻辑,添加大小写统一处理,避免因大小写导致的重复添加问题- 新增主菜单函数
start(),补全程序入口,让流程更清晰 - 添加成绩格式验证,确保输入的成绩是合法的A-F字符
内容的提问来源于stack exchange,提问作者Thymas
相关产品推荐
相关产品推荐

