Lucrare practică 7
Obiective:
-
- aplicarea conceptelor de utilizare a bibliotecilor standard și populare în limbajul Python (de ex.
math,statistics,json,requests,matplotlib,opencv-python,beautifulsoup4,hashlib); - dezvoltarea de aplicații cu interfață grafică (GUI) folosind biblioteci specifice (de ex.
tkintersau alte framework-uri grafice); - înțelegerea și aplicarea paradigmelor moderne în programare: programare orientată pe obiecte, programare bazată pe evenimente (GUI), elemente de programare funcțională (funcții, filtrări, expresii
lambda); - integrarea bibliotecilor pentru analiza datelor, procesarea imaginilor/video, web scraping și criptografie în aplicații Python reale;
- dezvoltarea unei aplicații practice complete cu interfață grafică, care modelează o situație reală și utilizează cel puțin o bibliotecă standard și o bibliotecă externă (populară).
- aplicarea conceptelor de utilizare a bibliotecilor standard și populare în limbajul Python (de ex.
Sarcina de lucru:
La dispoziție sunt 4 variante; cadrul didactic responsabil de orele practice împarte variantele.
-
Se recomandă lucrul în echipe de 2–3 studenți; numărul exact este stabilit de cadrul didactic de lucrări practice;
-
Obligatoriu, toate variantele vor avea interfață grafică (GUI) cu ferestre, butoane, câmpuri de introducere a datelor și zone de afișare a rezultatelor;
-
Fiecare variantă va fi completată cu interfață grafică simplă (meniuri, butoane, liste, mesaje de eroare), nu doar interfață text în consolă;
-
Fiecare student va explica utilizarea:
-
bibliotecilor standard folosite în aplicație (ex.:
math,statistics,json,datetimeetc.); -
bibliotecilor populare specifice variantei (ex.:
matplotlib,opencv-python,requests,beautifulsoup4,hashlib); -
mecanismelor de tratare a evenimentelor în GUI (click pe butoane, selectarea opțiunilor, actualizarea conținutului ferestrelor);
-
structurii modulare a programului (funcții, clase, separarea logicii de interfață acolo unde este posibil).
-
Varianta 1. Vizualizarea datelor cu matplotlib
Să se elaboreze o aplicație Python cu interfață grafică care încarcă date numerice și le reprezintă grafic utilizând biblioteca matplotlib.
Cerințe:
1. Dezvoltați o interfață grafică (ex.: folosind tkinter) cu cel puțin următoarele elemente:
- o zonă / control pentru încărcarea fișierului de date (ex.: fișier
.csvsau.txtcu valori numerice); - un meniu sau grup de butoane pentru selectarea tipului de grafic (de ex.: linie, bară, histogramă);
- un buton „Desenează graficul” care declanșează afișarea graficului;
- un buton „Ieșire” pentru închiderea aplicației.
2. Utilizați biblioteca matplotlib pentru a genera și afișa graficele. Graficul trebuie să fie afișat în fereastra aplicației (nu doar într-o fereastră separată implicită), de exemplu prin integrarea unui canvas specific matplotlib în GUI.
3. Calculați câțiva indicatori statistici (medie, minim, maxim) folosind biblioteci standard (ex.: statistics sau math) și afișați rezultatele în interfață.
4. Implementați o opțiune pentru salvarea graficului generat într-un fișier imagine (ex.: .png), indicând în interfață locația sau numele fișierului salvat.
Rezultat așteptat:
O aplicație cu interfață grafică ce permite încărcarea unui fișier de date, reprezentarea grafică a informațiilor prin matplotlib și calculul unor statistici de bază.
Varianta 2. Procesarea unui videostream de la camera web
Să se elaboreze o aplicație Python cu interfață grafică pentru vizualizarea și procesarea în timp real a imaginii preluate de la camera web a laptopului.
Cerințe:
1. Utilizați biblioteca opencv-python (modulul cv2) pentru a prelua un flux video (videostream) de la camera web.
2. Creați o interfață grafică (ex.: cu tkinter) care să conțină cel puțin:
- o zonă de afișare a imaginii (frame video) actuale;
- buton „Start” pentru pornirea capturii video;
- buton „Stop” pentru oprirea capturii video;
- buton „Captură imagine” pentru salvarea unui cadru (frame) în fișier (ex.:
snapshot_1.png).
3. Implementați cel puțin două efecte/filtre care pot fi aplicate asupra imaginii video:
- convertire în tonuri de gri (grayscale);
- detecția marginilor (edge detection) sau estompare (blur);
și oferiți utilizatorului opțiuni (butoane sau liste) pentru a alege filtrul activ.
4. Afișați în interfață informații suplimentare, de exemplu dimensiunea cadrelor (lățime × înălțime) sau numărul de cadre procesate.
Rezultat așteptat:
O aplicație cu GUI care afișează în timp real videostream-ul de la camera web, permite aplicarea de filtre simple și salvarea unor imagini.
Varianta 3. Web scraping cu interfață grafică
Să se elaboreze o aplicație Python cu interfață grafică pentru preluarea (web scraping) și afișarea de informații de pe o pagină web.
Cerințe:
1. Utilizați biblioteca requests pentru descărcarea conținutului HTML al unei pagini web și biblioteca beautifulsoup4 (modulul bs4) pentru analizarea structurii HTML.
2. Creați o interfață grafică (ex.: cu tkinter) care să conțină:
- un câmp de introducere a adresei URL;
- un buton „Citește pagina” pentru pornirea procesului de web scraping;
- o zonă (ex.: listă, tabel, text) în care să se afișeze informațiile extrase;
- eventual un câmp/meniu pentru alegerea tipului de informație de extras (de ex.: titluri de știri, linkuri, prețuri etc.).
3. Implementați logica de extragere a unui tip de informație repetitivă de pe o pagină (de ex.: toate titlurile de articole dintr-o secțiune, toate linkurile dintr-o anumită zonă, toate prețurile produselor dintr-o listă).
4. Afișați în interfață un mesaj de eroare clar în caz de:
- URL invalid;
- pagina nu poate fi accesată (probleme de rețea);
- structura paginii nu corespunde așteptărilor (nu pot fi găsite elementele dorite).
5. (Opțional) Oferiți posibilitatea exportării informațiilor extrase într-un fișier .csv sau .txt.
Rezultat așteptat:
O aplicație cu interfață grafică care permite introducerea unui URL, preluarea conținutului paginii, extragerea anumitor date și afișarea lor într-o formă structurată.
Varianta 4. Aplicație de criptografie
Să se elaboreze o aplicație Python cu interfață grafică pentru criptarea și/sau semnarea simplă a unor mesaje text.
Notă: această variantă se alocă exclusiv grupelor de studii SI.
Cerințe:
1. Creați o interfață grafică (ex.: cu tkinter) care să permită utilizatorului:
- introducerea unui mesaj text;
- introducerea unei chei (ex.: deplasare pentru cifrarea de tip Cezar sau un cuvânt-cheie pentru un cifru mai avansat);
- alegerea operației: „Criptează”, „Decriptează”, „Calculează hash”.
2. Implementați cel puțin un algoritm simplu de criptare simetrică clasică (ex.: Cezar, substituție simplă sau Vigenère), care să poată fi folosit atât pentru criptare, cât și pentru decriptare.
3. Utilizați biblioteca standard hashlib pentru calculul unor valori hash (ex.: SHA-256) ale mesajului inițial sau criptat și afișați rezultatul în interfață.
4. Adăugați butoane pentru:
- „Șterge” – pentru curățarea câmpurilor de intrare/ieșire;
- „Salvează în fișier” – pentru salvarea mesajului criptat sau a hash-ului într-un fișier text.
5. Afișați în interfață mesaje de avertizare/eroare pentru cazuri precum: cheie lipsă, mesaj lipsă, caractere neacceptate etc.
Rezultat așteptat:
O aplicație cu GUI care permite criptarea/decriptarea unor mesaje text și calculul hash-ului acestora, ilustrând concepte de bază din criptografie.
Evaluarea rezultatelor efectuării lucrării practice:
Pontaj:
-
- Nota 5 pentru implementarea unei aplicații funcționale conform variantei alese, cu interfață grafică și realizarea a cel puțin 3 cerințe specifice;
- +1 pentru utilizarea corectă și justificată a cel puțin unei biblioteci standard și a unei biblioteci populare (externă) relevante pentru temă;
- +1 pentru structură modulară clară (funcții, clase, separarea logicii de interfață, tratarea evenimentelor GUI într-un mod coerent);
- +3 pentru explicații corecte și răspunsuri argumentate la întrebările cadrului didactic privind alegerea bibliotecilor, arhitectura aplicației, funcționarea interfeței grafice și a algoritmilor utilizați.
Penalități:
-
- −1 pentru lipsa interfeței grafice (aplicația funcționează doar în consolă) sau o interfață minimă care nu permite testarea cerințelor;
- −1 pentru absență la ora practică în care s-a oferit sarcina sau demonstrația lucrării;
- −1 pentru fiecare săptămână de întârziere la predarea lucrării;
- −2 pentru încălcarea principiilor de etică academică (plagiat, copiere neautorizată, lipsa surselor proprii).