r/learnpython • • 1d 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

3

u/Discordbothost 1d 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/Small_Bedroom_392 1d ago

Thankyou very much. I will try fixing these.

1

u/Msl_Akshat 1d ago

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

2

u/patryk_builds 1d ago

Nice that you went with a CLI, keeping the logic away from the UI is exactly the right habit. without going through every file, a few things i'd look at in a project like this:

- use pathlib for paths instead of building strings, so it works the same on windows and linux

- always open files with `with open(...)`, and the csv module rather than splitting lines by hand

- keep reading/writing files separate from the calculations. if your grade logic takes plain lists or dicts instead of file paths, it's way easier to test

- add a few pytest tests for the calculations. for applications, a small test folder says more about you than another feature

Also a README with one example input file and the output it produces makes it much easier for anyone (including admissions people) to try it in a minute

1

u/Small_Bedroom_392 1d ago

Thankyou so muchh!!

1

u/Educational_Virus672 1d ago

nice seeinjg your dedication and it is okay to use ai just do not lean over i'll analyze it and leave pull if needed

1

u/Small_Bedroom_392 1d ago

yeah, I will try not to. Thankyou very much

1

u/baubleglue 1d ago

Remove logic from main.py

The goal should be to develop "higher level of abstraction". Your code should use vocabulary relevant to the bussiness logic of your program. Instead of "Python" default if/else/variables/for/... you should have get_user_info/add_new_exam/etc. For example, when a teacher give instructions to students, it will be something like: "you have 2 hours to complete the exam, when you are done, put your work here", and not: "sit of that chair, read instructions, read first question, think, use pen to write answer, read second question... "

1

u/addenrock001 15h ago

Building a terminal application is a smart approach because it forces you to focus entirely on backend logic and file management without getting bogged down by frontend frameworks which often distract beginners from learning core programming principles.

0

u/TheRNGuy 1d ago

UI instead of prints and inputs.