35
Introducere în Programare Prof. univ. dr. Gheorghe Grigoraș https://profs.info.uaic.ro/~grigoras/geo

Introducere în Programaregrigoras/Geo/python01.pdfSă devii programator în limbajul Python. Să înveți să rezolvi probleme utilizând programarea în Python. Vei înțelege elementele

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Introducere în

ProgramareProf. univ. dr. Gheorghe Grigoraș

https://profs.info.uaic.ro/~grigoras/geo

Care este scopul cursului?

Să devii programator în limbajul Python.

Să înveți să rezolvi probleme utilizând programarea în Python.

Vei înțelege elementele esențiale ale celor mai semnificative limbaje de programare.

Vei înțelege cum funcționează programarea ca un proces de modelare a lumii reale.

Evaluare

Teme pentru acasă 50%.

Test scris final 50%.

Bibliografie

https://docs.python.org/3/contents.html https://www.python.org/ https://wiki.python.org/moin/BeginnersGuide https://docs.python.org/2/tutorial/ https://www.python.org/downloads/ https://wiki.python.org/moin/IntroductoryBooks http://it-ebooks.info/read/304/ https://hkn.eecs.berkeley.edu/~dyoo/python/idle_intro/index.html https://docs.python.org/2/library/idle.html https://www.tutorialspoint.com/python3/ https://www.youtube.com/watch?v=bOvqYw1SZJg

Plan

Elemente de programare: Ce este programarea? Scurtă istorie

Filozofia limbajului Python Execuția codului Python Cum scriem cod/Algoritmi

Ce este Programarea?

Să-i spui unui computer ce să facă: folosești un limbaj adecvat (limbaj de programare), scrii comenzile într-un fișier text sau le transmiți la un promter.

Astfel, poți să faci tot ce poate face un computer.

Poți re-executa ceea ce ai “programat” fără să apelezi la alte acțiuni (apăsare de butoane, de meniuri etc).

Poți re-executa programul pentru diverse seturi de date.

Ce este Programarea?

value = 2 answer = 4 + value if answer > 0 : print (answer)

Codul este scris în fișier text și este numit cod sursă (uneori “src”). În Python, fiecare comandă este scrisă pe o linie nouă. Codul are o sintaxă specifică ce cuprinde cuvinte cheie (keywords) și operatori care au un înțeles aparte pentru computer. De exemplu if este control flow keyword: el controlează fluxul programului pe baza unei condiții. Unul sau mai multe fișiere(adesea scrise de diverși programatori) constitue împreună un program.

De ce Python?

Este ușor de folosit. Este independent de sistemul de operare. Există o comunitate relativ mare care-l utilizează și o cantitate mare de cod ce poate fi folosit pentru diverse aplicații. Este integrat într-o mare măsură în produse software (de exemplu în ARCGIS) ArcGIS is a geographic information system (GIS) for working with maps and geographic information.

Este unul dintre primele trei limbaje de programare cele mai solicitate de către angajatori.(după unii autori) Învățând Python capeți o mulțime de informații privind alte limbaje de programare.

Scurtă istorie privind Programarea: Limbaje Low Level

1930’s Alan Turing first thought about programmable machines that had flexible uses.

1940’s First properly flexible computers – programmed in binary code ‘First Generation Languages’, for example ‘1000 1001 1101 0000 0100 1000 1001 1000 0000 0010 0000 0001 1101 1000’.

Early 1950’s ‘Second Generation Languages’ – used simple ‘machine language’ or ‘assembler’ codes to represent operations, like ‘mov eax, 4 move ebx, 2 add eax,ebx’ for ‘4 add 2’.

These are sometimes called Low Level Languages as they are close to the details by which the computer works: they have low levels of abstraction.

Scurtă istorie privind Programarea: High Level Languages

Mid 1950’s Third Generation Languages: in a human readable form, e.g. ‘4 + 2’. (Fortran, ALGOL, COBOL, C, C++, C#, Java, BASIC , Pascal)

Fourth Generation Languages try to let people describe what they want to do, without complicating things with how they’re done.(Visual FoxPro, SQL, MATLAB)

Fifth Generation Languages centre on describing what a problem solution looks like and getting a computer to find it.

Such languages hide how the computer works, and are therefore called High Level Languages.

Python is a high level, third generation language.

Transformarea codului sursă în binar

Un compilator este un program ce transformă codul sursă în cod binar. Codul binar(numit și cod nativ) poate fi executat de oricâte ori. Este greu dacă nu imposibil de citit de către oameni și poate fi executat de un sistem de operare.

Un interpreter execută codul sursă direct, comandă după comandă, fie compilând comenzile în binar, fie în așa zisul bytecode – un cod intermediar care se execută de o mașină virtuală / runtime environment asociată cu interpreterul.

Python este un limbaj interpretat prin bytecode. Asta înseamnă că se poate distribui codul sursă dar va fi executat doar pe un computer ce dispune de un interpreter.

Imperative vs. DeclarativeLimbajele Imperative sunt cele mai populare. Într-un limbaj imperativ un program este constituit dintr-o mulțime de afirmații/instrucțiuni ( statements ) care sunt citite secvențial de la început la sfârșit iar execuția lor schimbă starea computerului(datele memorate). value = 2 answer = 4 + value print (answer)

Starea computerului este reprezentată în memoria calculatorului și este accesibilă prin niște etichete ce pot fi folosite în limbajul de programare: așa zisele “variabile”. De exemplu eticheta “value” de mai sus este asignată numărului“2”, eticheta “answer” este asignată evaluării expresiei 4 + value.

GotoFoarte rar programele se execută secvențial de la început la sfârșit: există “salturi” ce depind de anumite condiții ( în exemplul următor, dacă există sau nu un fișier).

Se folosește un cuvânt cheie pentru control flow numit goto pentru saltul la o nouă linie: 10: if file missing goto 20 15: read file goto 25 20: exit program 25: print file

Programele mari de acest fel sunt denumite spaghetti code.

(Pseudocode, not Python)

Proceduri

S-a dezvoltat Programarea Procedurală: unor bucăți de cod li s-au dat nume - acestea sunt proceduri - și se poate “sări” la ele, se execută și se revine cu rezultatul scontat.

Procedurile sunt numite - de la limbaj la limbaj - metode, funcții, rutine, subrutine.

text = input("Type a number to add to four") value = int(text) answer = 4 + value print (answer)

Aici input este o procedură care afișează un text și returnează ceea ce este tastat de utilizator, int preia textul tastat și returnează un număr, iar print este procedura care afișează rezultatul fără să returneze ceva.

Limbaje Declarative

În Limbajele Declarative se descrie de obicei punctul final(rezultatul) și programul funcționează pentru a ajunge acolo.

O categorie de limbaje imperative sunt Limbajele Funcționale: în aceste limbaje, programele sunt constituite din proceduri imbricate - funcții - în care se trece de la una la alta pentru a calcula un anume rezultat definit în primul nivel de imbricare.

În general aici nu se folosesc variabile pentru a descrie starea; codul este construit din expresii și nu din comenzi (statements).

print ( 4 + int( input( "Type a number to add to four“ ) ) )

text = input("Type a number to add to four") value = int(text) answer = 4 + value print (answer)

Limbaje “Object Oriented”În Limbajele Orientate pe Obiect se construiesc bucăți de cod numite ‘Clase’ care pot conține date și proceduri pentru manipularea acestora.

Clasa grupează datele și unitățile de prelucrare a acestora într-un modul, unindu-le astfel într-o entitate mult mai naturală. Deși tehnica se numește "Programare Orientată pe Obiect", conceptul de bază al ei este Clasa.

Clasa desemnează o mulțime de obiecte care partajează o serie de proprietăți.‘Obiectele’ sunt instanțe ale claselor și pot transmite date și mesaje unul altuia.

Limbaje “Object Oriented”Principii de bază:

Abstractizarea – Este posibilitatea ca un program să ignore unele aspecte ale informației pe care o manipulează, adică posibilitatea de a se concentra asupra esențialului. Fiecare obiect în sistem are rolul unui “actor” abstract, care poate executa acțiuni, își poate modifica și comunica starea și poate comunica cu alte obiecte din sistem fără a dezvălui cum au fost implementate acele facilitați.

Încapsularea – numită și ascunderea de informații: Asigură faptul că obiectele nu pot schimba starea internă a altor obiecte în mod direct (ci doar prin metode puse la dispoziție de obiectul respectiv); doar metodele proprii ale obiectului pot accesa starea acestuia.

Limbaje “Object Oriented”Principii de bază:

Polimorfismul – Este abilitatea de a procesa obiectele în mod diferit, în funcție de tipul sau de clasa lor. Mai exact, este abilitatea de a redefini metode pentru clasele derivate.

Moștenirea – Organizează și facilitează polimorfismul și încapsularea, permițând definirea și crearea unor clase specializate plecând de la clase (generale) deja definite - acestea pot împărtăși (și extinde) comportamentul lor, fără a fi nevoie de a-l redefini.

Scripting languages vs System Programming Languages

Limbajele mai pot fi împărțite în: Systems (or Application) Programming Languages: -utilizate pentru dezvoltarea de sisteme software, și Scripting Languages:

-crează împreună alt software (glue languages), -sunt folosite în interiorul altor aplicații pentru programarea unor facilități(extension languages), -sunt folosite pentru gestionarea sistemelor (control languages).

Scripting languages vs System Programming Languages

În general, limbajele de scripting sunt interpretate (cea ce ajută la rularea în interiorul altui software) și ascund codul complicat, făcându-le ușor de învățat, dar cu o capacitatea redusă de a aborda joburi complexe și de a proiecta codul optimizat pentru viteză.

Python îmbină cele două aspecte: este în mod tradițional un limbaj de scripting, dar oferă un acces bun la calcule complicate și este supus unei optimizări continue. Adeseori invocă codul nativ scris în C, un limbaj foarte eficient.

Python

Python este limbaj de generația 3:

- limbaj imperativ cu facilități funcționale. - limbaj imperativ, procedural, “object oriented”. - limbaj de scripting.

Scurtă istorie a limbajului PythonDezvoltat în 1991 de Guido van Rossum:

I chose Python as a working title for the project, being in a slightly irreverent mood (and a big fan of Monty Python's Flying Circus).

Monty Python’s Flying Circus (known during the final series as just Monty Python) is a British sketch comedy series created by the comedy group Monty Python and broadcast by the BBC from 1969 to 1974.

Python 2 a fost lansat în 2000: a adăugat câteva elemente noi și a deschis posibilitatea de a contribui la dezvoltarea sa unei întregi comunități.

Python 3 a fost lansat în 2008: nu este compatibil cu Python 2. “Sfârșitul” lui Python 2 este stabilit pentru anul 2020.

Ce conține un program?Variabile : etichete atașate datelor (inclusiv text sau chiar cod) Delimitatori: (de exemplu “()") pentru structurarea codului. Operatori: “+”, “*” etc. Cuvinte cheie: cuvinte cu înțeles specific care nu pot fi folosite ca nume pentru variabile ( de exemplu “if” ). Expresii: combinații de variabile, cuvinte cheie și operatori pentru evaluarea unei valori.

Acestea sunt folosite în propoziții (instrucțiuni) care spun computerului ce să facă.

Ce este un program?Un program constă din instrucțiuni care folosesc:

Line breaks: în Python, fiecare linie este o instrucțiune nouă. Control flow keywords: cuvinte cheie care controlează fluxul codului. Delimitatori: de exemplu “:” și tab-urile sunt folosite pentru a structura codul Proceduri: sunt bucăți de cod care se execută și returnează rezultatul codului ce le apelează. Obiecte: cod care face un job specific. Biblioteci (Libraries): o colecție de obiecte care sunt proiectate să facă job-uri similare.

Filozofia limbajului PythonGuido a stabilit o serie de reguli când a proiectat limbajul:

Things should be as simple as possible, but no simpler. Don’t bother users with details that the machine can handle. Don’t try for perfection because “good enough” is often just that. Borrow ideas from elsewhere whenever it makes sense.

These have resulted in a language which is, to reuse author Luciano Ramalho’s phrase: “Clear, Concise, and Effective”.

Exemplu de cod PythonIată două modalități de a afișa numerele pare din tabela înmulțirii cu 5 și cu 10:

[10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 10, 20, 30, 40, 50]

for counter1 in {5, 10}: for counter2 in {1,2,3,4,5,6,7,8,9,10}: if (counter1 * counter2) % 2 == 0 : print (counter1 * counter2)

print(list(a*b for a in {5,10} for b in range(1,11) if not (a*b % 2)))

Execuția programelor Python

Avem nevoie de interpreterul Python, mașina virtuală și biblioteca standard care conține codul auxiliar necesar execuției (funcții, acces la fișiere etc.).

În plus, se instalează și alte biblioteci specifice.

Pot fi instalate manual toate aceste lucruri dar nu este recomandat

https://www.python.org/downloads/ (Python 3.6.x, Python 3.7.0)

Distribuția Anaconda

Anaconda

Anaconda: o distribuție ce include toate elementele de limbaj, biblioteci științifice, și multe altele.

Anaconda include Conda, un sistem software pentru gestionarea bibliotecilor și pentru alegerea între Python 2 și Python 3.

Anaconda poate fi obținută de la: https://www.continuum.io/downloads

IDE-Integrated Development EnvironmentsÎn general, pentru scrierea programelor se folosește un mediu de dezvoltare (IDE), un softawre pentru editare de text care adaugă funcționalități relative la cod: Colorare sintaxă Numere pentru linii Butoane push Identificare erori și ajutor Autocompletare pentru cuvinte cheie, nume de proceduri, etc.

Anaconda conține IDLE, mediul de dezvoltare standard Python dar și Spyder (Scientific PYthon Development EnviRonment), care este foarte utilizat.

Read–Eval–Print loop (REPL)

O diferență majoră între Limbajele de Scripting și Limbajele de Sistem este aceea că primele au abilitatea de a executa comenzi interactiv la un promter.

Limbajele capabile REPL au asociate un promter care implementează un mediu pentru înregistrarea valorilor variabilelor și permite să scrii o linie de cod care este citită și evaluată iar răspunsul este afișat pe ecran.

Promterul Python REPL arată așa:

>>>

Identificarea și eliminarea erorilor (Debugging)

La executarea codului pot fi semnalate erori: Erori semnalate la compilare: erori asociate cu probleme de sintaxă. Erori importate: erori asociate cu căutarea de software necesar programului Erori de execuție: erori asociate cu logica programului.

Interpreterul va descrie eroarea și locul apariției. Programatorul trebuie să o elimine, să reexecute codul, să elimine alte erori, etc., până programul rulează.

Nu înseamnă că nu știi să programezi, așa funcționează programarea: 50% scrierea codului, 50% “repararea” lui.

AlgoritmiAlgoritm = rețetă pentru rezolvarea unei probleme. Cum se calculează media a trei numere?

1. Obține 3 numere.

2. Adună numerele. 3. Împarte suma la 3.

4. Afișează rezultatul.

Recomandare: Scrie sub formă de comentariu (linie #) algoritmul Scrie 2-3 instrucțiuni Compilează Corectează erorile Continuă

Documentație pentru biblioteca standard: https://docs.python.org/3/library/index.html

Referințe la limbaj: https://docs.python.org/3/reference/index.html

Tutorialul oficial Python: https://docs.python.org/3/tutorial/index.html but it assumes experience in other languages.

Python Wiki: https://wiki.python.org/moin/