Înapoi la blog
#python#proiect#to-do#tutorial

Realizarea unei liste de sarcini (To-Do List)

Construiește pas cu pas o aplicație To-Do List în Python: adaugi, ștergi și marchezi sarcini, cu salvare în fișier JSON ca să nu se piardă datele.

O listă de sarcini (To-Do List) e unul dintre cele mai utile proiecte de început. E suficient de simplu cât să-l termini, dar te învață ceva esențial: cum salvezi date ca să nu dispară când închizi programul. Hai să-l construim.

Ce vom face

O aplicație de terminal care:

  • afișează sarcinile, cu bifă pentru cele terminate;
  • adaugă o sarcină nouă;
  • marchează o sarcină ca finalizată;
  • șterge o sarcină;
  • salvează totul într-un fișier ca să rămână de la o rulare la alta.

Pasul 1: cum reprezentăm o sarcină

Fiecare sarcină are un text și o stare (gata sau nu). Un dicționar e perfect:

sarcina = {"text": "Învață Python", "gata": False}

Toate sarcinile vor sta într-o listă de astfel de dicționare.

Pasul 2: salvare și încărcare cu JSON

Ca să nu pierdem datele, le scriem într-un fișier sarcini.json. Modulul json transformă lista noastră în text și înapoi:

import json

FISIER = "sarcini.json"

def incarca():
    try:
        with open(FISIER, "r", encoding="utf-8") as f:
            return json.load(f)
    except FileNotFoundError:
        return []   # prima rulare: listă goală

def salveaza(sarcini):
    with open(FISIER, "w", encoding="utf-8") as f:
        json.dump(sarcini, f, ensure_ascii=False, indent=2)

try / except ne salvează la prima rulare, când fișierul nu există încă: returnăm o listă goală în loc să crăpăm.

Pasul 3: afișarea sarcinilor

Arătăm lista numerotată, cu o bifă pentru ce e gata:

def afiseaza(sarcini):
    if not sarcini:
        print("Nu ai nicio sarcină. Felicitări!")
        return
    for i, s in enumerate(sarcini, start=1):
        bifa = "[x]" if s["gata"] else "[ ]"
        print(f"{i}. {bifa} {s['text']}")

Pasul 4: adăugare, marcare, ștergere

Trei funcții scurte care modifică lista:

def adauga(sarcini, text):
    sarcini.append({"text": text, "gata": False})

def marcheaza(sarcini, numar):
    if 1 <= numar <= len(sarcini):
        sarcini[numar - 1]["gata"] = True

def sterge(sarcini, numar):
    if 1 <= numar <= len(sarcini):
        sarcini.pop(numar - 1)

Verificăm mereu că numărul e valid, ca utilizatorul să nu provoace o eroare cu un index inexistent.

Pasul 5: meniul principal

Legăm totul într-o buclă care cere comenzi până când utilizatorul iese. La fiecare modificare, salvăm:

def main():
    sarcini = incarca()
    while True:
        print("\n--- To-Do List ---")
        afiseaza(sarcini)
        print("\nComenzi: adauga / gata / sterge / iesi")
        comanda = input("> ").strip().lower()

        if comanda == "adauga":
            text = input("Text sarcină: ")
            adauga(sarcini, text)
        elif comanda == "gata":
            nr = int(input("Număr sarcină: "))
            marcheaza(sarcini, nr)
        elif comanda == "sterge":
            nr = int(input("Număr sarcină: "))
            sterge(sarcini, nr)
        elif comanda == "iesi":
            break
        else:
            print("Comandă necunoscută.")

        salveaza(sarcini)   # salvăm după fiecare schimbare

main()

Cum îl rulezi

Pune codul într-un fișier todo.py și rulează:

# în terminal:
# python todo.py

Adaugă câteva sarcini, închide programul, redeschide-l — sunt încă acolo. Asta e magia salvării în fișier.

Momentul în care vezi datele rămase după ce ai închis aplicația e momentul în care simți că ai construit ceva real.

Idei de extindere

FuncțieCum
Prioritățiadaugă un câmp prioritate și sortează după el
Termen-limităsalvează o dată și avertizează la cele apropiate
Categoriigrupează sarcinile (școală, acasă, hobby)
Interfață graficăreconstruiește cu tkinter pentru butoane reale

Recapitulare

Ai învățat liste, dicționare, citire și scriere în fișiere, tratarea erorilor și o buclă de meniu. Astea sunt cărămizile oricărei aplicații serioase.

La ByteSchool construim proiecte ca acesta împreună, pas cu pas, cu mentori care au lucrat în Big Tech. Te ducem de la primele linii de cod până la aplicații pe care le folosești zi de zi.