depulse / courses.py
vahidalizadeh's picture
rewriting history
601ed3a
from typing import List, Dict, Set
import pandas as pd
# Load the Excel file
file_path = 'data/DePaul-University-Courses.xlsx'
df = pd.read_excel(file_path)
# Display the first few rows to understand its structure
df.head()
# Simplified prerequisite parser
# Assuming prerequisites are separated by commas for OR, and spaces for AND
def parse_prerequisites(prerequisites: str) -> List[Set[str]]:
if pd.isna(prerequisites):
return []
# Splitting by commas first to handle OR conditions
or_conditions = prerequisites.split(',')
parsed = [set(and_condition.split()) for and_condition in or_conditions]
return parsed
# Create a mapping of courses to their parsed prerequisites
course_prerequisites = {}
for _, row in df.iterrows():
course_code = row['Course']
prerequisites = row['PREREQUISITES']
course_prerequisites[course_code] = parse_prerequisites(prerequisites)
# Define a function to determine eligible courses
def get_eligible_courses(passed_courses: List[str]) -> List[str]:
eligible_courses = []
passed_set = set(passed_courses)
for course, prerequisites in course_prerequisites.items():
if not prerequisites: # No prerequisites means the course is eligible
eligible_courses.append(course)
else:
# Check if all OR conditions are met (at least one set of AND conditions)
if any(all(prereq in passed_set for prereq in and_conditions) for and_conditions in prerequisites):
eligible_courses.append(course)
# Remove courses that the student has already passed
return [course for course in eligible_courses if course not in passed_set]
# Example usage
passed_courses_example = ['CSC211', 'MAT130', 'SE450']
eligible_courses = get_eligible_courses(passed_courses_example)
print(eligible_courses)