Files
ZFScoresCheck/get_selected_courses.py
T
NianBroken 5d9f7cde28 Refactored the method for retrieving course academic year and semester information.
Added time sorting for selected courses.
Rewrote error handling mechanism to enhance code robustness.
2024-05-09 17:33:51 +08:00

103 lines
4.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import traceback
from get_grade import get_grade
def get_selected_courses(student_client):
try:
# 获取成绩信息
grade = get_grade(student_client, output_type="grade")
# 获取已选课程信息
selected_courses_data = student_client.get_selected_courses().get("data", {})
selected_courses = selected_courses_data.get("courses", [])
# 按照学年学期降序排序
# 对于没有学年学期参数的课程,则将学年学期设置为1970至1971学年第1学期,否则将无法排序
selected_courses = sorted(
selected_courses,
key=lambda x: (
(x["course_year"] if x["course_year"] else "1970-1971"),
(x["course_semester"] if x["course_semester"] else "1"),
),
reverse=True,
)
# 已选课程信息不为空时,处理未公布成绩的课程和异常课程
if selected_courses:
# 初始化空字典用于存储未公布成绩的课程,按学年学期分组
ungraded_courses_by_semester = {}
# 初始化空字典用于存储异常的课程,按学年学期分组
abnormal_courses_by_semester = {}
# 获取成绩列表中的class_id集合
grade_class_ids = {course["class_id"] for course in grade} if grade else ""
# 初始化输出内容
selected_courses_filtering = ""
# 遍历selected_courses和grade中的每个课程
for course in selected_courses + (grade or []):
# 获取课程的学年和学期
try:
year, semester, seq = course["course_year"].split("-") + [
course["course_semester"]
]
except Exception:
pass
# 构建年学期名称,例如 "a至b学年第c学期"
yearsemester_name = f"{year}{semester}学年第{seq}学期"
# 判断课程是否未公布成绩或为异常课程
if course["class_id"] not in grade_class_ids:
# 未公布成绩
ungraded_courses_by_semester.setdefault(
yearsemester_name, []
).append(
f"{course['title'].replace('', '(').replace('', ')')} - {course['teacher']}"
)
elif course["class_id"] not in {
course["class_id"] for course in selected_courses
}:
# 异常课程
abnormal_courses_by_semester.setdefault(
yearsemester_name, []
).append(
f"{course['title'].replace('', '(').replace('', ')')} - {course['teacher']}"
)
# 构建输出内容
if ungraded_courses_by_semester:
# 存在未公布成绩的课程
selected_courses_filtering += "------\n未公布成绩的课程:"
for i, (semester, courses) in enumerate(
ungraded_courses_by_semester.items()
):
if i > 0:
selected_courses_filtering += "\n------"
selected_courses_filtering += f"\n{semester}"
for course in courses:
selected_courses_filtering += f"\n{course}"
if abnormal_courses_by_semester:
# 存在异常的课程
if ungraded_courses_by_semester:
# 如果存在课程,添加分隔线
selected_courses_filtering += "\n"
selected_courses_filtering += "------\n异常的课程:"
for i, (semester, courses) in enumerate(
abnormal_courses_by_semester.items()
):
if i > 0:
selected_courses_filtering += "\n------"
selected_courses_filtering += f"\n{semester}"
for course in courses:
selected_courses_filtering += f"\n{course}"
else:
selected_courses_filtering = "------\n已选课程信息为空"
return selected_courses_filtering
except Exception:
print(traceback.format_exc())
return "------\n获取未公布成绩的课程或异常的课程时出错"