Ce vei învăța astăzi?
Aceasta este lecția de recapitulare generală și de pregătire pentru testul final. Vom relua toate temele parcurse în clasa a IX-a și le vom aplica într-o problemă integrată (problemă care combină mai multe teme: funcții, liste și fișiere).
Recapitularea materiei pe module
| Modul | Teme principale |
|---|---|
| Modulul 1 | Gândirea computațională, algoritmi, pseudocod, organigrame |
| Modulul 2 | Elemente de bază Python: variabile, operatori, input, print |
| Modulul 3 | Structuri de decizie (if/elif/else) și structuri repetitive (for, while) |
| Modulul 4 | Liste: creare, parcurgere, sortare, min/max, sum |
| Modulul 5 | Subprograme, funcții predefinite, fișiere text, Tkinter, OOP |
Reține: pentru testul final trebuie să știi să scrii programe complete și corecte, de la citirea datelor până la afișarea rezultatului.
Problemă integrată: numere prime
O problemă integrată combină funcții cu liste. De exemplu, definim o funcție care verifică dacă un număr este prim (număr natural mai mare decât 1, cu exact doi divizori: 1 și el însuși) și o aplicăm pe elementele unei liste.
def prim(n):
if n < 2:
return False
for i in range(2, n):
if n % i == 0:
return False
return True
v = [11, 12, 13, 14, 15]
for x in v:
print(x, prim(x))
Observă: funcția prim() întoarce True sau False, iar programul principal o folosește pentru fiecare element din listă. Asta înseamnă programare modulară (scrierea programului ca un ansamblu de funcții cu roluri clare): funcția se poate refolosi oriunde.
Exercițiu de completare
Completează enunțul cu cuvintele potrivite:
O funcție se definește cu cuvântul cheie ______. Pentru a întoarce o valoare folosim ______. O colecție ordonată de elemente se numește ______, iar adunarea elementelor ei se face cu ______().
Bancă de cuvinte:
Test de înțelegere
Test rapid de recapitulare:
1. Ce afișează programul print(len([1, 2, 3, 4]))?
2. Care este rezultatul expresiei round(4.5)?
3. Cu ce funcție deschidem un fișier pentru citire?
4. O variabilă definită în interiorul unei funcții este:
Test suplimentar
Test suplimentar - recapitulare:
1. Ce afișează programul print(len("abc"))?
2. Care este rezultatul expresiei round(2.7)?
3. Pentru a sorta crescător lista v folosim:
Aprofundare
Optimizarea verificării numărului prim: nu este nevoie să parcurgem toți divizorii până la n. Dacă n are un divizor mai mare decât radicalul lui n, atunci are și unul mai mic. Este suficient să testăm până la int(n ** 0.5) sau cu i * i <= n.
- Ieșirea timpurie: dacă găsim primul divizor,
return Falseoprește imediat funcția; pentru numere compuse mari economisim mult timp. - Recapitulare critică: la test, cele mai frecvente erori sunt lipsa
int(input()), confuzia return cu print și parcurgerea greșită a listelor cu range. - Strategia de rezolvare a unei probleme: (1) citește enunțul și subliniază datele de intrare și de ieșire; (2) scrie pseudocodul; (3) implementează în Python; (4) testează pe exemplul dat.
- Tipuri de probleme de recapitulat: prelucrări de cifre (%, //), numere prime și divizori, parcurgeri de liste, fișiere text.
- Caz particular: numărul 2 este singurul număr prim par; 0 și 1 nu sunt prime.
PbInfo - Funcție - număr prim
Enunț:
Cerință: Se definește funcția prim(n) care întoarce True dacă n este număr prim și False în caz contrar. Să se afișeze primele n numere prime, folosind această funcție.
Date de intrare:
Programul citește de la tastatură un număr natural n.
Date de ieșire:
Programul va afișa primele n numere prime, separate prin spațiu.
Restricții și precizări:
Valorile citite sunt numere întregi, iar n este un număr natural, cu 1 <= n <= 1000.
Exemplu:
Intrare:
5
Ieșire:
2 3 5 7 11
Cum gândim soluția:
- Definim funcția prim(n) care testează dacă n e prim
- Citim n
- Căutăm numere prime începând de la 2, folosind funcția
- Ne oprim când am găsit n numere prime
Scrie soluția în Python:
Soluție corectă:
def prim(n):
if n < 2:
return False
for i in range(2, n):
if n % i == 0:
return False
return True
n = int(input())
nr = 0
x = 2
while nr < n:
if prim(x):
print(x, end=" ")
nr = nr + 1
x = x + 1
Ce învățăm: o funcție bine scrisă se reutilizează într-o buclă pentru a rezolva o problemă mai mare.
PbInfo - Câte numere prime are o listă
Enunț:
Cerință: Se citește o listă de numere. Folosind funcția prim(n), să se afișeze câte numere din listă sunt prime.
Date de intrare:
Programul citește de la tastatură elementele listei, pe o singură linie.
Date de ieșire:
Programul va afișa numărul de elemente prime din listă.
Restricții și precizări:
Valorile citite sunt numere întregi, iar n este un număr natural, cu 1 <= n <= 1000.
Exemplu:
Intrare:
2 4 6 7 9 11
Ieșire:
3
Cum gândim soluția:
- Definim funcția prim(n)
- Citim lista de numere
- Parcurgem lista și numărăm valorile pentru care prim(x) este True
- Afișăm contorul
Scrie soluția în Python:
Soluție corectă:
def prim(n):
if n < 2:
return False
for i in range(2, n):
if n % i == 0:
return False
return True
v = [int(x) for x in input().split()]
contor = 0
for x in v:
if prim(x):
contor = contor + 1
print(contor)
Ce învățăm: funcția prim este apelată o dată pentru fiecare element, iar rezultatele se adună într-un contor.
Exercițiul Practic: Testul final
Sarcini de lucru
Rezolvă cele două părți ale testului final, folosind funcții și liste
Sarcina 1 (TEST FINAL - partea 1): Suma cifrelor
Cerință: Scrie o funcție suma_cifre(n) care calculează suma cifrelor unui număr. Apoi scrie un program care citește o listă de numere și afișează câte dintre ele au suma cifrelor pară.
Soluție:
def suma_cifre(n):
s = 0
while n > 0:
s = s + n % 10
n = n // 10
return s
v = [int(x) for x in input().split()]
contor = 0
for x in v:
if suma_cifre(x) % 2 == 0:
contor = contor + 1
print(contor)
Verifică: funcția descompune numărul cu while și n % 10, iar programul verifică paritatea sumei pentru fiecare element.
Sarcina 2 (TEST FINAL - partea 2): Program modular complet
Cerință: Scrie un program complet, modular, cu funcții: citeste() care citește n și n numere, sorteaza(v) care sortează lista prin metoda bulelor și media_pare(v) care întoarce media elementelor pare. Afișează lista sortată și media elementelor pare.
Soluție:
def citeste():
n = int(input())
v = list(map(int, input().split()))
return v
def sorteaza(v):
n = len(v)
for i in range(n - 1):
for j in range(0, n - i - 1):
if v[j] > v[j + 1]:
v[j], v[j + 1] = v[j + 1], v[j]
def media_pare(v):
s = 0
nr = 0
for x in v:
if x % 2 == 0:
s = s + x
nr = nr + 1
return s / nr
v = citeste()
sorteaza(v)
print(v)
print(media_pare(v))
Verifică: programul este modular: fiecare funcție are un rol clar, iar programul principal le apelează în ordine.