Aplicație pentru organizarea timpului de studiu
Construiește în Python un planificator de studiu care îți împarte materiile pe zile și îți calculează timpul total. Proiect util cu cod complet și explicat.
„Mâine mă apuc serios de învățat" — apoi vine mâine și nu știi de unde să începi. O aplicație simplă te poate ajuta: îi spui ce materii ai și cât timp ai, iar ea îți face un plan. Hai să o construim în Python. Vei exersa liste, dicționare și un pic de logică.
Ce face aplicația
- ții o listă de sarcini de studiu, fiecare cu o durată;
- le distribui pe zilele săptămânii;
- calculezi timpul total și cât rămâne de făcut.
Pasul 1: o sarcină de studiu
Reprezentăm fiecare sarcină ca un dicționar cu nume, durată (în minute) și starea ei.
sarcina = {
"materie": "Matematică",
"minute": 60,
"gata": False,
}
print(sarcina["materie"], sarcina["minute"], "min")
Un dicționar e potrivit pentru că grupează informații legate între ele sub un singur nume.
Pasul 2: o listă de sarcini
Punem mai multe sarcini într-o listă.
plan = [
{"materie": "Matematică", "minute": 60, "gata": False},
{"materie": "Română", "minute": 45, "gata": False},
{"materie": "Informatică", "minute": 90, "gata": True},
{"materie": "Engleză", "minute": 30, "gata": False},
]
Pasul 3: cât timp îmi ia totul?
Calculăm timpul total și timpul rămas (sarcinile încă nefăcute).
def total_minute(plan):
return sum(s["minute"] for s in plan)
def minute_ramase(plan):
return sum(s["minute"] for s in plan if not s["gata"])
print("Total:", total_minute(plan), "min")
print("Rămas:", minute_ramase(plan), "min")
sum(s["minute"] for s in plan) parcurge fiecare sarcină și adună durata. În a doua funcție adăugăm if not s["gata"] ca să numărăm doar ce mai e de făcut.
Pasul 4: împărțim pe zile
Vrem să distribuim sarcinile pe zile, fără să depășim un buget zilnic de minute.
def imparte_pe_zile(plan, minute_pe_zi):
zile = []
zi_curenta = []
timp_zi = 0
for s in plan:
if s["gata"]:
continue
if timp_zi + s["minute"] > minute_pe_zi:
zile.append(zi_curenta)
zi_curenta = []
timp_zi = 0
zi_curenta.append(s["materie"])
timp_zi += s["minute"]
if zi_curenta:
zile.append(zi_curenta)
return zile
program = imparte_pe_zile(plan, 90)
for i, zi in enumerate(program, start=1):
print(f"Ziua {i}: {', '.join(zi)}")
Logica e simplă: adăugăm sarcini în ziua curentă până când următoarea ar depăși bugetul; atunci începem o zi nouă. enumerate(..., start=1) ne dă și numărul zilei, iar ', '.join(zi) lipește materiile într-un text frumos.
Pasul 5: marcăm o sarcină ca terminată
def marcheaza_gata(plan, materie):
for s in plan:
if s["materie"] == materie:
s["gata"] = True
print(f"{materie} - terminat!")
return
print("Materia nu există în plan.")
marcheaza_gata(plan, "Română")
print("Rămas:", minute_ramase(plan), "min")
Sfat de productivitate: studiile arată că pauzele scurte ajută memoria. Poți adăuga automat o pauză de 10 minute după fiecare sarcină — încearcă tu ca exercițiu!
Pasul 6: ordonăm după prioritate
Nu toate materiile sunt la fel de urgente. Hai să adăugăm o prioritate fiecărei sarcini și să le ordonăm, ca să studiezi întâi ce contează cel mai mult.
plan = [
{"materie": "Matematică", "minute": 60, "prioritate": 3, "gata": False},
{"materie": "Engleză", "minute": 30, "prioritate": 1, "gata": False},
{"materie": "Informatică", "minute": 90, "prioritate": 2, "gata": False},
]
plan_ordonat = sorted(plan, key=lambda s: s["prioritate"], reverse=True)
for s in plan_ordonat:
print(f"{s['prioritate']} - {s['materie']}")
Funcția sorted întoarce o listă nouă, ordonată. key=lambda s: s["prioritate"] îi spune după ce să sorteze (după prioritate), iar reverse=True pune cea mai mare prioritate prima. lambda e doar o funcție foarte scurtă, scrisă pe o singură linie.
Pasul 7: un mic raport de progres
Util să vezi cât din plan ai bifat, în procente.
def progres(plan):
total = len(plan)
facute = sum(1 for s in plan if s["gata"])
if total == 0:
return 0
return round(facute / total * 100)
print(f"Progres: {progres(plan)}%")
sum(1 for s in plan if s["gata"]) numără câte sarcini sunt gata: adună câte un 1 pentru fiecare sarcină bifată. Înmulțit cu 100 și împărțit la total, obții procentul.
Recapitulare
| Funcție | Ce face |
|---|---|
total_minute | timpul total de studiu |
minute_ramase | cât mai ai de făcut |
imparte_pe_zile | distribuie pe zile |
marcheaza_gata | bifează o sarcină |
Concluzie
Ai un planificator real care te poate ajuta înainte de teze sau bac. Îl poți extinde cu priorități, termene-limită sau salvare în fișier ca să nu pierzi planul când închizi programul.
La ByteSchool construim împreună astfel de unelte utile, pas cu pas, alături de mentori din Big Tech care îți arată cum se gândește un produs, nu doar o bucată de cod.