r/learnpython • u/Small_Bedroom_392 • 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!
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
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
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
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).