Python • Clasa a IX-a • Pentru începători absoluți

10 teme esențiale care completează cursul

Explicații pas cu pas, vocabular simplu și minimum 3 exemple pentru fiecare subtemă.

Cum folosești această lecție

Nu presupunem că știi deja informatică. Pentru fiecare temă vei vedea: ce înseamnă, de ce este utilă, pașii de gândire și cel puțin trei exemple Python.

Pasul 1
Înțelege ideea înainte de cod.
Pasul 2
Rulează exemplele și schimbă valorile.
Pasul 3
Încearcă să scrii singur soluția.

1. Modurile de reprezentare a algoritmilor

Un algoritm este o succesiune clară de pași prin care rezolvăm o problemă. Aceeași idee poate fi reprezentată în mai multe moduri.

1.1. Pseudocod

Pseudocodul descrie algoritmul într-o formă apropiată de limbajul natural. Nu trebuie să respecte sintaxa Python.

citește a
citește b
s ← a + b
afișează s

1.2. Schema logică

O schemă logică folosește forme grafice pentru început, operații, decizii și rezultate.

1.3. Limbaj de programare

Python este un limbaj de nivel înalt: scriem instrucțiuni relativ apropiate de modul în care gândim problema. Un compilator traduce programul într-o formă executabilă; un interpretor execută instrucțiunile prin mecanismul specific limbajului.

Exemplul 1 – sumă
a = 7
b = 5
print(a + b)
Exemplul 2 – maxim
a = 12
b = 20
if a > b:
    print(a)
else:
    print(b)
Exemplul 3 – repetare
s = 0
for i in range(1, 6):
    s += i
print(s)
Ideea-cheie: algoritmul este ideea; pseudocodul, schema logică și programul Python sunt moduri diferite de a exprima aceeași idee.

2. Proiectarea modulară a algoritmilor

Modularizarea înseamnă să împărțim o problemă mare în părți mai mici. În Python, o funcție este un instrument foarte bun pentru această idee.

Exemplul 1 – funcție simplă
def salut():
    print("Bun venit!")

salut()
Exemplul 2 – funcție cu parametri
def suma(a, b):
    return a + b

print(suma(3, 8))
Exemplul 3 – problemă împărțită în module
def aria_dreptunghi(l, L):
    return l * L

def este_pozitiv(x):
    return x > 0

print(aria_dreptunghi(4, 6))
print(este_pozitiv(10))

Avantajul este că fiecare funcție poate fi înțeleasă și testată separat. Într-un program mare, acest lucru reduce confuzia și repetarea codului.

3. Testarea și depanarea

Un program care „merge” pentru un singur exemplu nu este neapărat corect. Testarea înseamnă să alegem intrări care verifică diferite situații. Depanarea înseamnă să găsim și să reparăm erorile.

Tipuri utile de teste

Exemplul 1 – pozitiv, zero, negativ
def semn(x):
    if x > 0: return 1
    if x < 0: return -1
    return 0

print(semn(8))
print(semn(0))
print(semn(-3))
Exemplul 2 – divizorul zero
def impartire(a, b):
    if b == 0:
        return "Nu se poate împărți la 0"
    return a / b

print(impartire(10, 2))
print(impartire(10, 0))
print(impartire(-9, 3))
Exemplul 3 – urmărirea variabilelor
x = 1
s = 0

for i in range(1, 4):
    s = s + i
    print("i =", i, "s =", s)
Regulă: când găsești o eroare, nu schimba la întâmplare codul. Reproduce problema, identifică valoarea greșită și urmărește pas cu pas ce face programul.

4. Eficiența algoritmilor și notația O

Doi algoritmi pot produce același rezultat, dar unul poate face mult mai multe operații. Complexitatea ne ajută să estimăm cum crește timpul sau memoria necesară când crește dimensiunea datelor.

O(1) înseamnă aproximativ un număr constant de operații; O(n) crește proporțional cu n; O(n²) apare frecvent când avem două bucle imbricate care parcurg n elemente.

Exemplul 1 – O(1)
a = [10, 20, 30]
print(a[0])

Accesul la un element cunoscut nu depinde de numărul total de elemente.

Exemplul 2 – O(n)
a = [4, 7, 2, 9, 1]
for x in a:
    print(x)

Parcurgem fiecare element o dată.

Exemplul 3 – O(n²)
a = [1, 2, 3, 4]
for x in a:
    for y in a:
        print(x, y)

Pentru fiecare element din prima buclă parcurgem din nou toate elementele.

Complexitatea memoriei descrie, la rândul ei, cât spațiu suplimentar este necesar. Un algoritm care creează o listă de n elemente are, în general, nevoie de spațiu suplimentar de ordin O(n).

5. Funcții predefinite Python pentru operații matematice și conversii

O funcție predefinită este o funcție pe care Python ne-o pune deja la dispoziție. Nu trebuie să inventăm noi algoritmul de fiecare dată. Îi oferim funcției datele de care are nevoie, iar ea ne întoarce un rezultat.

Regula de bază: întâi învățăm sintaxa și rolul funcției, apoi vedem exemple. Nu este suficient să memorăm numele unei funcții; trebuie să știm ce primește și ce întoarce.

5.1. abs() – valoarea absolută

Valoarea absolută reprezintă distanța unui număr față de zero. De aceea, rezultatul este întotdeauna nenegativ.

Sintaxa generală:
abs(x)

Ce face? Primește numărul x și returnează valoarea lui absolută. De exemplu, abs(-8) este 8, iar abs(8) este tot 8.
Exemplul 1
x = -15
print(abs(x))

Python calculează distanța lui -15 față de 0: rezultatul este 15.

Exemplul 2
a = 7
b = 12
d = abs(a - b)
print(d)

Diferența este -5, dar distanța dintre 7 și 12 este 5.

Exemplul 3
temperatura = -3
print(abs(temperatura))

Obținem 3, adică distanța temperaturii față de zero.

5.2. round() – rotunjirea

Este folosită pentru a obține o valoare rotunjită. Poate primi și numărul de zecimale dorit.

Sintaxa generală:
round(x)
round(x, ndigits)

Ce face? Rotunjește x. Dacă precizăm ndigits, acesta indică numărul de zecimale păstrate.
Exemplul 1
print(round(3.14159))

Fără al doilea argument, obținem o valoare rotunjită la întreg.

Exemplul 2
print(round(3.14159, 2))

Al doilea argument este 2, deci cerem două zecimale.

Exemplul 3
media = 17 / 3
print(round(media, 3))

Calculăm media și o afișăm cu trei zecimale.

5.3. int() – conversia la întreg

Funcția int() poate transforma, în situații compatibile, un text numeric sau un număr real într-un întreg.

Sintaxa generală:
int(x)
int(x, baza) pentru conversia unui șir reprezentând un număr într-o bază dată.

Ce face? Returnează un obiect de tip int. La conversia unui număr real, partea fracționară este eliminată, nu se face aceeași rotunjire ca la round().
Exemplul 1
x = int("123")
print(x + 7)

Textul "123" devine numărul întreg 123.

Exemplul 2
print(int(8.99))

Rezultatul este 8: partea fracționară este eliminată.

Exemplul 3
print(int("101", 2))

Textul "101" este interpretat în baza 2 și transformat în valoarea zecimală 5.

5.4. float() – conversia la număr real

Sintaxa generală:
float(x)

Ce face? Transformă o valoare compatibilă într-un număr real de tip float.
Exemplul 1
x = float("3.14")
print(x)
Exemplul 2
a = float(7)
print(a / 2)

Întregul 7 este transformat în 7.0.

Exemplul 3
pret = float(input("Preț: "))
print(pret * 1.19)

Citirea este text; float o transformă în număr real pentru calcule.

5.5. sqrt() – radicalul pătrat

Sintaxa generală:
from math import sqrt
sqrt(x)

Ce face? Returnează rădăcina pătrată a lui x. Pentru numere reale, argumentul trebuie să fie potrivit pentru această operație.
Exemplul 1
from math import sqrt
print(sqrt(25))
Exemplul 2
from math import sqrt
a = 9
print(sqrt(a))
Exemplul 3
from math import sqrt
x = 3
y = 4
ipotenuza = sqrt(x*x + y*y)
print(ipotenuza)

Folosim teorema lui Pitagora și apoi radicalul.

5.6. floor() – partea întreagă inferioară

Sintaxa generală:
from math import floor
floor(x)

Ce face? Returnează cel mai mare întreg mai mic sau egal cu x.
Exemplul 1
from math import floor
print(floor(7.9))
Exemplul 2
from math import floor
print(floor(7.1))
Exemplul 3
from math import floor
print(floor(-2.3))

Atenție: rezultatul este -3, deoarece -3 este cel mai mare întreg ≤ -2.3.

6. Funcții predefinite pentru colecții

O colecție este o structură care conține mai multe valori. Începătorul trebuie să distingă clar între funcție și metodă: len(lista) este o funcție apelată cu o listă, în timp ce lista.sort() este o metodă a listei.

6.1. len() – numărul de elemente

Sintaxa generală:
len(obiect)

Ce face? Returnează numărul de elemente dintr-un obiect care are o lungime, cum ar fi o listă sau un șir de caractere.
Exemplul 1 – listă
a = [4, 8, 2, 9]
print(len(a))
Exemplul 2 – text
cuvant = "Python"
print(len(cuvant))

Sunt 6 caractere.

Exemplul 3 – medie
note = [8, 9, 10]
media = sum(note) / len(note)
print(media)

6.2. min() – cea mai mică valoare

Sintaxa generală:
min(iterabil)
min(a, b, c, ...)

Ce face? Returnează cea mai mică valoare dintre elementele date.
Exemplul 1
a = [8, 3, 12, 5]
print(min(a))
Exemplul 2
print(min(14, 7, 21))
Exemplul 3
temperaturi = [4, -2, 7, 0]
rece = min(temperaturi)
print("Minim:", rece)

6.3. max() – cea mai mare valoare

Sintaxa generală:
max(iterabil)
max(a, b, c, ...)

Ce face? Returnează cea mai mare valoare.
Exemplul 1
a = [8, 3, 12, 5]
print(max(a))
Exemplul 2
print(max(14, 7, 21))
Exemplul 3
note = [7, 9, 10, 6]
print("Cea mai mare:", max(note))

6.4. sum() – suma valorilor

Sintaxa generală:
sum(iterabil)
sum(iterabil, start)

Ce face? Adună elementele numerice ale colecției. Al doilea argument, dacă este folosit, reprezintă valoarea de la care începe suma.
Exemplul 1
a = [2, 4, 6]
print(sum(a))
Exemplul 2 – media
note = [8, 9, 7, 10]
media = sum(note) / len(note)
print(media)
Exemplul 3 – start
a = [1, 2, 3]
print(sum(a, 10))

Python pornește de la 10: rezultatul este 16.

Reține: combinația sum(a) / len(a) este una dintre cele mai simple modalități de calcul al mediei aritmetice a unei liste numerice.

7. Programarea orientată pe obiecte – de la zero

Programarea orientată pe obiecte (OOP) este un mod de organizare a programelor în jurul unor obiecte. Pentru un începător, cel mai important este să înțeleagă relația dintre clasă, obiect, atribut și metodă.

Analogie: o clasă este un plan de construcție. Dacă avem clasa Elev, putem crea obiectele ana, mihai și ioana. Toate respectă modelul clasei, dar fiecare poate avea propriile date.

7.1. Biblioteca și modulul

Python are biblioteci/module care conțin cod gata scris. Putem importa un modul și apoi folosi funcțiile sau clasele oferite de el.

Sintaxe uzuale:
import modul
from modul import nume
import modul as alias
Exemplul 1
import math
print(math.sqrt(49))
Exemplul 2
from math import sqrt
print(sqrt(64))
Exemplul 3
import math as m
print(m.floor(4.8))

7.2. Prima clasă

Sintaxa generală:
class NumeClasa:
    instrucțiuni
Exemplul 1
class Elev:
    pass

e = Elev()
print(e)

pass spune că, deocamdată, clasa nu are instrucțiuni.

Exemplul 2 – două obiecte
class Elev:
    pass

ana = Elev()
mihai = Elev()

print(type(ana))
print(type(mihai))
Exemplul 3 – atribut
class Elev:
    pass

e = Elev()
e.nume = "Ana"
e.varsta = 15

print(e.nume)
print(e.varsta)

7.3. Constructorul __init__ și self

__init__ este o metodă specială apelată când construim un obiect. Parametrul self reprezintă obiectul asupra căruia lucrăm.

Sintaxa generală:
class Nume:
    def __init__(self, parametri):
        self.atribut = valoare
Exemplul 1
class Elev:
    def __init__(self, nume):
        self.nume = nume

e = Elev("Ana")
print(e.nume)
Exemplul 2 – două atribute
class Elev:
    def __init__(self, nume, varsta):
        self.nume = nume
        self.varsta = varsta

e = Elev("Mihai", 15)
print(e.nume, e.varsta)
Exemplul 3 – obiecte diferite
class Dreptunghi:
    def __init__(self, l, L):
        self.l = l
        self.L = L

a = Dreptunghi(3, 5)
b = Dreptunghi(10, 2)

print(a.l * a.L)
print(b.l * b.L)

7.4. Metodele

O metodă este o funcție definită în interiorul unei clase. Ea descrie un comportament al obiectului.

Sintaxa generală:
class Nume:
    def metoda(self, parametri):
        ...

Apel: obiect.metoda(argumente)
Exemplul 1
class Elev:
    def __init__(self, nume):
        self.nume = nume

    def salut(self):
        print("Salut,", self.nume)

e = Elev("Ana")
e.salut()
Exemplul 2 – return
class Cerc:
    def __init__(self, raza):
        self.raza = raza

    def aria(self):
        return 3.14 * self.raza ** 2

c = Cerc(2)
print(c.aria())
Exemplul 3 – modificarea stării
class Cont:
    def __init__(self, bani):
        self.bani = bani

    def depune(self, suma):
        self.bani += suma

c = Cont(100)
c.depune(50)
print(c.bani)

7.5. Exemplu complet – biblioteca noastră mică

Putem crea un fișier, de exemplu geometrie.py, care conține clase. Un alt program îl poate importa. Astfel vedem legătura dintre bibliotecă, clasă și obiect.

# geometrie.py
class Dreptunghi:
    def __init__(self, lungime, latime):
        self.lungime = lungime
        self.latime = latime

    def aria(self):
        return self.lungime * self.latime

    def perimetru(self):
        return 2 * (self.lungime + self.latime)
# program.py
from geometrie import Dreptunghi

d = Dreptunghi(5, 3)
print("Aria:", d.aria())
print("Perimetrul:", d.perimetru())

Primul fișier este modulul nostru. Al doilea îl folosește. Aceasta este ideea de bază din spatele organizării codului în biblioteci și module.

8. Fișiere text în Python – de la zero

Fișierul este o formă de memorare permanentă. Dacă scriem date într-o variabilă, acestea există în timpul execuției programului. Dacă le scriem într-un fișier, le putem păstra și după ce programul se închide.

8.1. Deschiderea unui fișier

Sintaxa generală:
open(nume_fisier, mod)

Forma recomandată:
with open(nume_fisier, mod, encoding="utf-8") as f:

Parametrul mode stabilește ce vrem să facem.

8.2. Scrierea cu write()

Sintaxa:
f.write(text)

Ce face? Scrie textul primit în fișier. Pentru trecerea la linia următoare folosim caracterul \n.
Exemplul 1
with open("a.txt", "w", encoding="utf-8") as f:
    f.write("Salut!")
Exemplul 2
with open("a.txt", "w", encoding="utf-8") as f:
    f.write("Linia 1\n")
    f.write("Linia 2\n")
Exemplul 3
nume = "Ana"
with open("elev.txt", "w", encoding="utf-8") as f:
    f.write("Elev: " + nume)

8.3. Citirea cu read()

Sintaxa:
continut = f.read()

Ce face? Citește conținutul disponibil și îl returnează ca șir de caractere.
Exemplul 1
with open("a.txt", "r", encoding="utf-8") as f:
    text = f.read()

print(text)
Exemplul 2
with open("note.txt", "r", encoding="utf-8") as f:
    text = f.read()

print("Lungime:", len(text))
Exemplul 3
with open("a.txt", "r", encoding="utf-8") as f:
    text = f.read()

if "Python" in text:
    print("Cuvânt găsit")

8.4. Citirea liniilor cu readline() și readlines()

Sintaxe:
f.readline() – citește o linie.
f.readlines() – citește liniile și le returnează sub forma unei liste.
Exemplul 1
with open("a.txt", "r", encoding="utf-8") as f:
    linie = f.readline()
    print(linie)
Exemplul 2
with open("a.txt", "r", encoding="utf-8") as f:
    linii = f.readlines()

print(linii)
Exemplul 3 – parcurgere
with open("a.txt", "r", encoding="utf-8") as f:
    for linie in f:
        print(linie.strip())

8.5. Adăugarea cu modulul "a"

Sintaxa:
with open("fisier.txt", "a", encoding="utf-8") as f:
    f.write(...)

Ce face? Păstrează conținutul existent și scrie date noi la final.
Exemplul 1
with open("jurnal.txt", "a", encoding="utf-8") as f:
    f.write("Ziua 1\n")
Exemplul 2
nume = input("Nume: ")
with open("elevi.txt", "a", encoding="utf-8") as f:
    f.write(nume + "\n")
Exemplul 3
mesaj = input("Mesaj: ")
with open("mesaje.txt", "a", encoding="utf-8") as f:
    f.write(mesaj + "\n")

8.6. De ce folosim with?

Blocul with gestionează corect închiderea fișierului după ce terminăm operațiile. Este forma recomandată pentru începători deoarece reduce riscul de a uita închiderea fișierului.

Exemplul 1 – scriere sigură
with open("x.txt", "w", encoding="utf-8") as f:
    f.write("ABC")
Exemplul 2 – citire sigură
with open("x.txt", "r", encoding="utf-8") as f:
    text = f.read()
Exemplul 3 – procesare
with open("note.txt", "r", encoding="utf-8") as f:
    for linie in f:
        nota = float(linie)
        print(nota)

9. Tkinter – interfețe grafice de la zero

Tkinter este biblioteca Python folosită pentru a construi interfețe grafice simple. Dacă în consolă utilizatorul vede text și scrie răspunsuri după input(), într-o interfață grafică utilizatorul poate avea o fereastră, butoane, etichete și casete de introducere.

Imagine mentală: gândește-te la o fereastră ca la o foaie. Pe această foaie așezăm componente: un titlu, o etichetă, o casetă în care scriem și un buton. Programul trebuie apoi să spună ce se întâmplă când utilizatorul apasă butonul.

9.1. Fereastra principală – Tk

Sintaxa generală:
import tkinter as tk
root = tk.Tk()
root.title("Titlu")
root.mainloop()

Tk() creează fereastra principală. title() stabilește titlul. mainloop() pornește bucla de evenimente și menține fereastra activă.

Exemplul 1
import tkinter as tk
root = tk.Tk()
root.title("Prima fereastră")
root.mainloop()
Exemplul 2
import tkinter as tk
root = tk.Tk()
root.geometry("500x300")
root.mainloop()

Dimensiunea este 500×300 pixeli.

Exemplul 3
import tkinter as tk
root = tk.Tk()
root.title("Python")
root.geometry("600x400")
root.mainloop()

9.2. Label – afișarea unui text

Sintaxa:
label = tk.Label(parent, text="mesaj")
label.pack()

Ce face? Creează o etichetă care afișează text.
Exemplul 1
import tkinter as tk
root = tk.Tk()
tk.Label(root, text="Salut!").pack()
root.mainloop()
Exemplul 2
import tkinter as tk
root = tk.Tk()
tk.Label(root, text="Învăț Python").pack()
tk.Label(root, text="Clasa a IX-a").pack()
root.mainloop()
Exemplul 3
import tkinter as tk
root = tk.Tk()
et = tk.Label(root, text="Calcul matematic")
et.pack()
root.mainloop()

9.3. Button și evenimentele

Un buton devine interesant când îi asociem o acțiune. Argumentul command primește funcția care trebuie executată la apăsare.

Sintaxa:
def actiune():
    ...
tk.Button(root, text="Apasă", command=actiune).pack()

Atenție: scriem command=actiune, nu command=actiune(). În primul caz transmitem funcția; în al doilea am apela-o imediat.
Exemplul 1
import tkinter as tk

root = tk.Tk()

def salut():
    print("Salut!")

tk.Button(root, text="Apasă",
          command=salut).pack()

root.mainloop()
Exemplul 2
import tkinter as tk

root = tk.Tk()
label = tk.Label(root, text="0")
label.pack()

n = 0
def creste():
    global n
    n += 1
    label.config(text=str(n))

tk.Button(root, text="+1",
          command=creste).pack()
root.mainloop()
Exemplul 3
import tkinter as tk

root = tk.Tk()

def schimba():
    label.config(text="Ai apăsat butonul!")

label = tk.Label(root, text="Aștept...")
label.pack()
tk.Button(root, text="Schimbă",
          command=schimba).pack()

root.mainloop()

9.4. Entry – introducerea unei valori

Sintaxa:
entry = tk.Entry(parent)
valoare = entry.get()

Ce face? Entry creează o casetă de text. get() citește conținutul ei ca șir de caractere.
Exemplul 1
import tkinter as tk

root = tk.Tk()
e = tk.Entry(root)
e.pack()

def citeste():
    print(e.get())

tk.Button(root, text="Citește",
          command=citeste).pack()
root.mainloop()
Exemplul 2 – conversie la int
def calculeaza():
    x = int(e.get())
    print(x * 2)

Reține: get() returnează text, deci îl convertim când vrem calcule numerice.

Exemplul 3 – două casete
a = tk.Entry(root)
b = tk.Entry(root)
a.pack()
b.pack()

def suma():
    x = float(a.get())
    y = float(b.get())
    print(x + y)

9.5. grid(), pack() și place()

Acestea stabilesc poziția componentelor. Pentru început, este suficient să înțelegi că nu sunt funcții matematice: sunt metode de așezare în fereastră.

Exemplul 1 – pack
tk.Label(root, text="Nume").pack()
tk.Entry(root).pack()

Elementele sunt așezate simplu, unul după altul.

Exemplul 2 – grid
tk.Label(root, text="Nume").grid(row=0, column=0)
tk.Entry(root).grid(row=0, column=1)

Construim o organizare pe rânduri și coloane.

Exemplul 3 – place
tk.Label(root, text="Salut").place(x=50, y=30)

Poziția este indicată prin coordonate.

9.6. Text – mai multe linii

Sintaxa:
text = tk.Text(root)
continut = text.get("1.0", tk.END)

Ce face? Text permite introducerea unui text mai lung, pe mai multe linii.
Exemplul 1
text = tk.Text(root)
text.pack()
root.mainloop()
Exemplul 2
def citeste():
    continut = text.get("1.0", tk.END)
    print(continut)
Exemplul 3 – afișare în Label
def copiaza():
    s = text.get("1.0", tk.END)
    label.config(text=s)

label = tk.Label(root, text="")
label.pack()
text = tk.Text(root)
text.pack()
tk.Button(root, text="Copiază",
          command=copiaza).pack()

9.7. Frame – organizarea interfeței

Un Frame este un container. Putem pune mai multe componente în el și putem organiza interfața pe zone.

Exemplul 1
frame = tk.Frame(root)
frame.pack()
tk.Label(frame, text="În cadru").pack()
Exemplul 2
sus = tk.Frame(root)
jos = tk.Frame(root)
sus.pack()
jos.pack()

tk.Label(sus, text="Sus").pack()
tk.Button(jos, text="Jos").pack()
Exemplul 3
form = tk.Frame(root)
form.pack()

tk.Label(form, text="Nume").grid(row=0, column=0)
tk.Entry(form).grid(row=0, column=1)

9.8. messagebox – mesaje pentru utilizator

Sintaxa:
from tkinter import messagebox
messagebox.showinfo("Titlu", "Mesaj")
messagebox.showerror("Titlu", "Eroare")

Ce face? Afișează o fereastră de mesaj.
Exemplul 1
from tkinter import messagebox
messagebox.showinfo("Info", "Salut!")
Exemplul 2
messagebox.showerror(
    "Eroare",
    "Valoare invalidă"
)
Exemplul 3 – validare
def verifica():
    if entry.get() == "":
        messagebox.showerror(
            "Eroare", "Completează câmpul!"
        )
    else:
        messagebox.showinfo(
            "OK", "Datele sunt completate."
        )

9.9. Program complet – adunarea a două numere

import tkinter as tk
from tkinter import messagebox

root = tk.Tk()
root.title("Adunare")
root.geometry("350x220")

tk.Label(root, text="Primul număr").pack()
a = tk.Entry(root)
a.pack()

tk.Label(root, text="Al doilea număr").pack()
b = tk.Entry(root)
b.pack()

def aduna():
    try:
        x = float(a.get())
        y = float(b.get())
        messagebox.showinfo("Rezultat", str(x + y))
    except ValueError:
        messagebox.showerror("Eroare", "Introdu numere valide!")

tk.Button(root, text="Adună", command=aduna).pack(pady=10)

root.mainloop()

Citire pas cu pas: importăm Tkinter → creăm fereastra → creăm două Entry → definim funcția care citește valorile → convertim la float → calculăm suma → afișăm rezultatul → pornim mainloop().

9.10. Exerciții de început

  1. Creează o fereastră cu titlul „Calculator”.
  2. Adaugă trei etichete: „Nume”, „Prenume”, „Clasa”.
  3. Adaugă un buton care schimbă textul unui Label.
  4. Creează două Entry și un buton care calculează produsul.
  5. Creează un formular cu grid() și afișează un mesaj dacă unul dintre câmpuri este gol.

10. Clasa list din Python – teorie și exemple

Lista este una dintre cele mai importante structuri de date din Python. Ea permite memorarea mai multor valori într-o singură variabilă. Pentru clasa a IX-a este important să înțelegem atât operațiile algoritmice asupra listelor, cât și metodele clasei list.

10.1. Crearea și indexarea

Sintaxa:
lista = [valoare1, valoare2, ...]
lista[index]

Indexarea începe de la 0. Dacă lista are 5 elemente, indicii sunt 0, 1, 2, 3, 4.
Exemplul 1
a = [10, 20, 30]
print(a[0])
print(a[2])
Exemplul 2 – index negativ
a = [10, 20, 30]
print(a[-1])
print(a[-2])

-1 înseamnă ultimul element.

Exemplul 3 – modificare
a = [10, 20, 30]
a[1] = 99
print(a)

10.2. Apartenență, concatenare și multiplicare

Sintaxe:
x in lista
x not in lista
lista1 + lista2
lista * n
Exemplul 1 – in
a = [2, 4, 6]
print(4 in a)
print(5 in a)
Exemplul 2 – concatenare
a = [1, 2]
b = [3, 4]
c = a + b
print(c)
Exemplul 3 – multiplicare
a = [0]
print(a * 5)

Se obține o listă cu cinci zerouri.

10.3. append()

Sintaxa:
lista.append(x)

Ce face? Adaugă un singur element la sfârșitul listei. Metoda modifică lista.
Exemplul 1
a = [1, 2]
a.append(3)
print(a)
Exemplul 2
a = []
for i in range(1, 4):
    a.append(i)
print(a)
Exemplul 3
a = [10]
a.append([20, 30])
print(a)

Atenție: se adaugă lista [20, 30] ca un singur element.

10.4. insert()

Sintaxa:
lista.insert(index, x)

Ce face? Inserează elementul x înaintea poziției indicate de index.
Exemplul 1
a = [10, 30]
a.insert(1, 20)
print(a)
Exemplul 2
a = [2, 3]
a.insert(0, 1)
print(a)
Exemplul 3
a = [1, 2, 3]
a.insert(len(a), 4)
print(a)

Inserarea la len(a) duce elementul la final.

10.5. remove() și pop()

Sintaxe:
lista.remove(x) – elimină prima apariție a valorii x.
lista.pop() – elimină și returnează ultimul element.
lista.pop(index) – elimină și returnează elementul de la index.
Exemplul 1 – remove
a = [4, 7, 4, 9]
a.remove(4)
print(a)

Este eliminată prima apariție a lui 4.

Exemplul 2 – pop final
a = [10, 20, 30]
x = a.pop()
print(x)
print(a)
Exemplul 3 – pop index
a = [10, 20, 30]
x = a.pop(1)
print(x)
print(a)

10.6. index() și count()

Sintaxe:
lista.index(x) – poziția primei apariții.
lista.count(x) – numărul aparițiilor.
Exemplul 1
a = [5, 8, 2]
print(a.index(8))
Exemplul 2
a = [2, 5, 2, 7, 2]
print(a.count(2))
Exemplul 3
a = [4, 4, 7, 4]
poz = a.index(4)
nr = a.count(4)
print(poz, nr)

10.7. copy()

Sintaxa:
noua = lista.copy()

Ce face? Creează o copie superficială a listei. Pentru liste simple, este o metodă comodă de a obține o listă separată.
Exemplul 1
a = [1, 2, 3]
b = a.copy()
b.append(4)
print(a)
print(b)
Exemplul 2
note = [8, 9, 10]
backup = note.copy()
note[0] = 5
print(backup)
Exemplul 3
a = [4, 2, 9]
b = a.copy()
b.sort()
print("Original:", a)
print("Sortată:", b)

10.8. sort()

Sintaxa:
lista.sort()
lista.sort(reverse=True)

Ce face? Sortează lista pe loc. Dacă vrem ordine descrescătoare, folosim reverse=True.
Exemplul 1
a = [5, 2, 9, 1]
a.sort()
print(a)
Exemplul 2
a = [5, 2, 9, 1]
a.sort(reverse=True)
print(a)
Exemplul 3 – nu confundăm
a = [3, 1, 2]
rez = a.sort()
print(a)
print(rez)

sort() modifică lista și returnează None; nu trebuie folosit ca b = a.sort() pentru a obține o nouă listă.

10.9. Parcurgerea listelor

Parcurgerea este una dintre operațiile fundamentale: analizăm elementele unul câte unul.

Exemplul 1 – valori
a = [3, 7, 2]
for x in a:
    print(x)
Exemplul 2 – indici
a = [3, 7, 2]
for i in range(len(a)):
    print(i, a[i])
Exemplul 3 – numărare
a = [2, 7, 4, 8, 3]
nr = 0

for x in a:
    if x % 2 == 0:
        nr += 1

print(nr)

10.10. Un exemplu complet – prelucrarea unei liste

note = [7, 10, 8, 6, 9]

print("Număr:", len(note))
print("Minim:", min(note))
print("Maxim:", max(note))
print("Suma:", sum(note))
print("Media:", sum(note) / len(note))

note.sort()
print("Crescător:", note)

note.sort(reverse=True)
print("Descrescător:", note)

Acest exemplu leagă mai multe concepte: lista, len(), min(), max(), sum() și metoda sort(). După ce înțelegi fiecare instrucțiune separat, încearcă să modifici programul pentru a număra câte note sunt cel puțin 5 sau câte sunt egale cu 10.

Ordinea recomandată pentru învățare: creare listă → indexare → parcurgere → len → append → insert → remove/pop → index/count → copy → sort → probleme de sinteză.

Mini-proiect de recapitulare

Construiește un program care citește note dintr-o listă, calculează numărul de note, minimul, maximul și media, apoi salvează raportul într-un fișier.

note = [8, 9, 7, 10, 6]

nr = len(note)
minim = min(note)
maxim = max(note)
media = sum(note) / nr

raport = f"""Număr note: {nr}
Minim: {minim}
Maxim: {maxim}
Media: {media:.2f}
"""

with open("raport.txt", "w", encoding="utf-8") as f:
    f.write(raport)

print(raport)

După ce îl înțelegi, încearcă să-l modifici astfel încât notele să fie citite de la tastatură și să existe verificare pentru valori invalide.

Legătura cu programa școlară

Structura acestei pagini urmărește cele 10 categorii identificate anterior în discuția noastră. Programa oficială include, între altele, subprograme, funcții predefinite, programare orientată pe obiecte, fișiere text, Tkinter și clasa list. citeturn0search13

Pentru exemplul de funcții matematice și colecții, documentația oficială include explicit exemple cu abs(), round(), int(), float(), sqrt(), respectiv len(), min(), max(), sum(). citeturn0search12

Notă: exemplele sunt concepute didactic pentru un începător și pot fi extinse ulterior cu exerciții, teste și probleme gradate.