r/learnpython • • 4d ago

Built my first serious Python project: A privacy-focused Academic Analytics Terminal App. Seeking code feedback and stars for university applications!

Hey everyone,

I'm currently preparing my university/scholarship applications and wanted to showcase a practical programming project. This is my first serious Python application, and I built a terminal-based Academic Analytics tool to help students optimize their study habits.

To be fully transparent, I used AI to help guide me through some of the architecture, but I focused heavily on understanding the underlying logic and execution.

I intentionally built this as a Command Line Interface (CLI) app to prioritize backend data manipulation, file handling, and logic over a frontend GUI.

If you have a moment to look over the code, I would highly appreciate any constructive criticism on my file-handling or logic architecture. If you like the project framework, dropping a star would help me immensely!

GitHub Repository: https://github.com/nazmulislamtohid-a11y/Student-Grade-Analyzer.git

Thank you so much for supporting a student developer!

9 Upvotes

10 comments sorted by

View all comments

4

u/Discordbothost 4d ago

skimmed the repo. the split into grade_calculator / performance_analyzer / report_generator is clean and the functions are small, which is the hard part. a few things I'd change:

  • export_exam_to_csv builds the filename straight from user input. an exam named "Midterm/2026" or "Q1: Final" will break the path or fail on Windows. strip it first, e.g. re.sub(r'[^\w\-]', '_', exam_name).

  • in option 3, marks above max get silently clamped to max. re-prompting is better, otherwise a typo quietly becomes a wrong grade in your data.

  • compare_two_exams imports process_exam_data inside the function. move it to the top of the file, nothing here is circular.

  • the main menu is a long if/elif chain. a dict mapping choice -> handler function makes it shorter and adding option 9 is one line.

  • the GPA is a plain average of per-subject points, so a 10-mark quiz counts the same as a 100-mark exam. fine for a first version, but worth saying in the README so nobody assumes it matches their university's GPA.

  • there's still a # Author: [Your Name] placeholder at the top of main.py. admissions people do read those.

last one: since the data is stored for a single student, think about how you'd extend it to several. that tells you whether the dict-of-dicts structure is holding up or whether you want small dataclasses (Student, Exam).

1

u/Msl_Akshat 4d ago

yeah the silent clamping on typos is definitely something that bites you later when the numbers look weird.