Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sde2:ipw2022:iot_python [2022/08/03 11:30] (current)
cristiana.andrei created
Line 1: Line 1:
 +====== Introducere in Python ======
  
 +==== Resurse ====
 +  * [[https://​www.programming-hero.com/​code-playground/​python/​index.html| Python Playground]]
 +  * [[https://​docs.python.org/​3/​reference/​|Python docs]]
 +===== Programarea Python =====
 +<note warning>
 +Majoritatea limbajelor de programare precum C, C++, Java utilizează {} pentru a defini blocuri de cod. Contrar acestei convenții, Python folosește **identarea** pentru a separa diferite secvențe.
 +
 +Un bloc de cod(corp de funcție, conținutul unei bucle) începe la prima linie identată și se termină la ultima linie care nu mai respectă identarea.
 +
 +Trebuie să se țină cont de faptul că, în cazul în care o anumită linie se termină cu **:** este obligatoriu ca următoarea linie să fie identată.
 +
 +De obicei, pentru identare se folosește un TAB, ca în exemplul următor:
 +<code python>
 +for i in range(1,​11):​
 +    print(i)
 +    if i == 5:
 +        break
 +</​code> ​       ​
 +</​note>​
 +
 +===== Variabile =====
 +
 +Spre deosebire de alte limbaje de programare, în Python nu etse necesară declararea variabilelor sau tipul lor inainte de a le utiliza. Din acest punct de vedere, Python face parte din categoria limbajelor de programare dinamice, unde tipul variabilelor este interpretat la moemntul execuției.
 +
 +=== Variabilele numerice ===
 +
 +Python are 2 tipuri numerice: întregi și reale
 +
 +<code python>
 +# Sintaxa pentru a declara un număr întreg:
 +myInt = 7
 +
 +# Sintaxa pentru a declara un număr real:
 +myFloat = 7.0
 +myFloat = float(7)
 +</​code>​
 +
 +=== Variabile pentru șirurile de caractere ===
 +
 +<code python>
 +myString = '​hello'​
 +myString = "​hello"​
 +</​code>​
 +
 +Se poate realiza atribuirea valorilor pentru mai multe variabile.
 +
 +<code python>
 +# Instrucțiuni corecte
 +a, b = 1, 2             
 +suma = a  + b
 +</​code>​
 +
 +<code python>
 +# Instrucțiuni corecte
 +hello = "​hello"​
 +world = "​world"​
 +message = hello + " " + world
 +</​code>​
 +
 +<code python>
 +#Codul următor nu va funcționa
 +one = 1
 +two = 2
 +three = 3
 +hello = "​hello"​
 + 
 +print (one + two + three + hello)
 +</​code>​
 +
 +<note important>​
 +Pentru a afișa rezultatul concatenării precedente, trebuie să folosim funcția //str//, care afce posibila conversia din variabile numerice in variabile de tip string:
 +
 +<code python>
 +one = 1
 +two = 2
 +three = 3
 +hello = "​hello"​
 + 
 +print ( str(one) + str(two) + str(three) + hello )
 +</​code>​
 +</​note>​
 +
 +
 +
 +=====Structuri de date====
 +
 +=== Liste ===
 +Listele sunt similare cu array-urile. Pot conține nenumărate tipuri de variabile și de de elemente. ​
 +
 +<note warning> Desi Python permite adaugarea de elemente de tipuri diferite in aceeasi lista, este recomandat sa nu faceti acest lucru care poate duce la aparitia a multe erori in program.</​note>​
 +
 +Pentru a crea o listă care contine elemente de tip intreg vom rula următoarea linie de cod:
 +<code python>
 +myList = [1,2,3,4,5]
 +</​code>​
 +
 +Putem de asemeanea să creăm o listă goală, la care vom adăuga elemente ulterior:
 +<code python>
 +# Declararea unei liste
 +
 +mylist = []
 +
 +# Inserarea elementelor
 +
 +mylist.append(1)
 +mylist.append(2)
 +mylist.append(3)
 +</​code>​
 +
 +Pentru a extrage un element din listă folosim o construcție de tipul ''​lista[indice]'':​
 +
 +<code python>
 +
 +mylist = [1,2,3]
 +
 +# Afișarea fiecărui element
 +
 +print( mylist[0] )
 +print( mylist[1] )
 +print( mylist[2] )
 +
 +# Output
 +1
 +2
 +3
 +</​code>​
 +
 +<​note>​
 +În toate limbajele de programare numerotarea elementelor dintr-o listă începe de la indicele 0.
 +</​note>​
 +
 +==Funcția range==
 +<note warning>
 +Informațiile din această secțiune se aplică doar pentru folosirea limbajului Python pentru micro:bit.
 +</​note>​
 +Pentru a crea o listă cu elemente numere întregi, putem folosi funcția ''​range''​ care întoarce o listă cu toate numerele întregi dintr-un anumit interval. Funcția are urmăatarea definiție: ''​range(start,​ stop, pas)'',​ unde ''​start''​ este prima valoare din listă, ''​stop''​ este valoarea de oprire (valoarea nu este inclusă), ''​pas''​ este pasul de incrementare și este un parametru opțional (valoarea default e 1).
 +
 +**Exemplu**
 +
 +Pentru a crea o listă cu valori pare de la 2 la 12, vom rula următoarea linie de cod:
 +
 +<code python>
 +mylist = range (2, 13, 2)
 +</​code>​
 +
 +==Funcții predefinite pentru gestionarea listelor ==
 +   * [[https://​www.tutorialspoint.com/​python/​list_cmp.htm|cmp( listName1, listName2)]] -> compararea elementelor din 2 liste
 +   * [[https://​www.tutorialspoint.com/​python/​list_len.htm|len( listName ) ]] -> numărul de elemente din listă
 +   * [[https://​www.tutorialspoint.com/​python/​list_max.htm|max( listName )]] -> elemntul cu valoarea maximă
 +   * [[https://​www.tutorialspoint.com/​python/​list_min.htm|min( listName )]] -> elementul cu valoarea minimă
 +
 +== Metode predefinite pentru gestionarea listelor ==
 +   * [[https://​www.tutorialspoint.com/​python/​list_append.htm|listName.append( element )]] -> inserarea unui element la finalul listei
 +   * [[https://​www.tutorialspoint.com/​python/​list_count.htm|listName.count( element )]] -> numarul de apariții al unui elemnt într-o listă
 +   * [[https://​www.tutorialspoint.com/​python/​list_index.htm|listName.index( element )]] -> indicele de la prima apariție a elementului în listă ​
 +   * [[https://​www.tutorialspoint.com/​python/​list_insert.htm|listName.insert( index, element )]] -> inserearea elementului în listă la indicele indicat
 +   * [[https://​www.tutorialspoint.com/​python/​list_pop.htm|listName.pop()]] -> șterge și returnează ultimul element al listei
 +   * [[https://​www.tutorialspoint.com/​python/​list_remove.htm|listName.remove( element )]] -> șterge ultimul element din listă
 +   * [[https://​www.tutorialspoint.com/​python/​list_reverse.htm|listName.reverse()]] -> inversează oridnea elementelor din listă
 +   * [[https://​www.tutorialspoint.com/​python/​list_sort.htm|listName.sort( [function] )]] -> sortează elemnetele în funcție de parametru
 +
 +=== Dicționar ===
 +
 +Un dicționar este o structură de date similară cu vectorii sau cu listele, dar funcționează cu cheie și valoare în loc de indice. Fiecare valoare stocată într-un dicționar poate fi accesată cu ajutorul unei chei, care poate fi reprezentată de orice tip de obiect(un șir, un număr, o listă etc.).
 +
 +De exemplu, dicționarele pot fi utilizate pentru a implementa baze de date, Presupunând că avem o bază de date de studenți trebuie să reținem specializarea pentru care fiecare a optat.
 +
 +== Declararea unui dicționar ==
 +
 +<code python>
 +specialisation = {}
 +
 +specialisation["​Ana"​] = "​Informatica"​
 +specialisation["​Radu"​] = "​Electronica"​
 +</​code>​
 +
 +Sau 
 +
 +<code python>
 +specialisation = {
 +   "​Ana":​ "​Informatica",​
 +   "​Radu":​ "​Electronica"​
 +}
 +</​code>​
 +
 +== Parcurgerea elementelor dintr-un dicționar ==
 +
 +<code python>
 +for nom, spec in specialisation.iteritems():​
 +   print ("The name of the specialisation where {} was assigned is: {}"​.format(nom,​ spec))
 +</​code>​
 +
 +== Eliminarea valorilor dintr-un dicționar ==
 +
 +<code python>
 +del optionalRepartizare["​Ana"​]
 +
 +# sau
 +
 +optionalRepartizare.pop("​Ana"​)
 +</​code>​
 +
 +== Proprietățile cheilor într-un dicționar ==
 +
 +Într-un dicționar nu există restricționări pentru valori, doar pentru chei, acestea trebuie să fie unice. În cazul în care nu se respectă această proprietate și există aceeași cheie de 2 ori, doar ultima înregsitrată va fi validă.
 +De exemplu, pentru următoarea secvență de cod:
 +
 +<code python>
 +age = {
 +    "​Ana"​ : 14,     
 +    "​Ioana"​ : 13,     
 +    "​Ana"​ : 16,     
 +    "​Ioana"​ : 22,     
 +    "​Ana"​ : 11
 +}
 +
 +print ("Ana are  {} ani si Ioana are {} ani."​.format(age["​Ana"​],​ age["​Ioana"​]))
 +
 +</​code>​
 +
 +Se va afișa mesajul urmator: "Ana are 11 ani si Ioana are 22 ani.".
 +
 +== Funcții utile pentru dicționare ==
 +
 +  * [[https://​www.tutorialspoint.com/​python/​dictionary_cmp.htm|cmp(dictionarUnu,​ dictionarDoi)]] -> compararea elementelor a 2 dicționare
 +  * [[https://​www.tutorialspoint.com/​python/​dictionary_len.htm|len(numeDictionar)]] -> numărul de elemente dintr-un dicționar
 +  * [[https://​www.tutorialspoint.com/​python/​dictionary_str.htm|str(numeDictionar)]] -> generarea unei versiuni mai simple de a afișa un dicționar
 +
 +== Metode utile pentru dicționare ==
 +
 +[[https://​www.tutorialspoint.com/​python/​dictionary_clear.htm|numeDictionar.clear()]] -> eliminarea tuturor elemetelor dintr-un dicționar
 +  * [[https://​www.tutorialspoint.com/​python/​dictionary_copy.htm|numeDictionar.copy()]] -> returnează copia unui dicționar
 +  * [[https://​www.tutorialspoint.com/​python/​dictionary_has_key.htm|numeDictionar.has_key(key)]] -> returneză "​true"​ dacă există un element cu cheia "​key",​ altfel returnează "​false"​ sinon
 +  * [[https://​www.tutorialspoint.com/​python/​dictionary_items.htm|numeDictionar.items()]] -> o listă cu toate perechile de tipul (cheie, valoare) care se găsesc în dicționar
 +  * [[https://​www.tutorialspoint.com/​python/​dictionary_keys.htm|numeDictionar.keys()]] -> lista de chei
 +  * [[https://​www.tutorialspoint.com/​python/​dictionary_update.htm|dictionar1.update(dictionar2)]] -> daugă conținutul dicționurului //​dictionar2//​ în dicționarul //​dictionar1//​
 +  * [[https://​www.tutorialspoint.com/​python/​dictionary_values.htm|numeDictionar.values()]] -> listă cu toate valorile stocate în dicționar
 +
 +
 +===== Structura de decizie "​if"​ =====
 +
 +<code python>
 +# Decizie simplă
 +
 +a = 33
 +b = 200
 +if b > a:
 +  print("​b is greater than a")
 +</​code>​
 +
 +<code python>
 +# Utilizare elif pentru a adăuga condiție suplimentară
 +
 +a = 33
 +b = 33
 +if b > a:
 +  print("​b is greater than a")
 +elif a == b:
 +  print("​a and b are equal"​)
 +</​code>​
 +
 +<code python>
 +# Cuvantul cheie else care cuprinde tot ce nu a fost inclus anterior
 +
 +a = 200
 +b = 33
 +if b > a:
 +  print("​b is greater than a")
 +elif a == b:
 +  print("​a and b are equal"​)
 +else:
 +  print("​a is greater than b")
 +</​code>​
 +
 +<code python>
 +# else fară elif
 +
 +a = 200
 +b = 33
 +if b > a:
 +  print("​b is greater than a")
 +else:
 +  print("​b is not greater than a")
 +</​code>​
 +
 +===== Structurile repetitive =====
 +
 +=== Bucla "​for"​ ===
 +
 +Contrar altor limbaje, care au forma strandard **for(..) { code } ** pentru bucla //for//, Python a eliminat parantezele care arata iterarea unei liste si utilizează **:** pentru a indica începutul uni bloc de cos care va fi executat în interiorul buclei, ca în exemplul următor:
 +
 +<code python>
 +listaDeNume = ["​Ana",​ "​Maria",​ "​Ioana",​ "​Irina",​ "​Andreea",​ "​Cristina"​]
 + 
 +for nume in listaDeNume:​
 +    print (nume)
 +</​code>​
 +
 +În Python, indicele pasului la care ne aflăm în timpul parcurgerii,​ nu este vizibil, iar pentru asta exista o metodă care numără pașii, numită **enumerate**:​
 +
 +<code python>
 +cours= [ "​Math",​ "​History",​ "​English"​]
 + 
 +
 +for index, hobby in enumerate(cours):​
 +    print (index, hobby)
 + 
 +# Output:
 +0 Math
 +1 History
 +2 English
 +</​code>​
 +
 +O altă funcție este ultilitarul **zip**, care permite parcurgerea a două liste simultan.
 +
 +<code python>
 +lista1 = [ 3, 9, 17, 15, 19]
 +lista2 = [ 2, 4, 30, 24, 3]
 + 
 +for a, b in zip( lista1, lista2 ):
 +    if a > b:
 +        print (a)
 +    else:
 +        print (b)
 + 
 +# Output:
 + 
 +3
 +9
 +30
 +24
 +19
 +</​code>​
 +
 +O altă particularitate a limbajului Python este faptul că se poate aplica conditia //else// si pentru bucla //for//. În acest caz, ramura //else// va fi executată după bucla //for//, dacă și numai dacă în interiorul buclei //for// nu există o declarație de tip //break//.
 +De exemplu:
 +<code python>
 +animalList = [ "​wolf",​ "​rabbit",​ "​lion",​ "​bear"​ ]
 +
 +for i in animalList:
 +   print (i)
 +   if i == "​rabbit"​
 +     print ("A rabbit"​)
 +     break
 +else:
 +   print ("All animals"​)
 +   
 +# Output
 +wolf
 +rabbit
 +A rabbit
 +
 +
 +for i in animalList:
 +   print (i)
 +   if i == "​rabbit"​
 +     print ("A rabbit"​)
 +else:
 +   print ("All animals"​)
 +   
 +# Output
 +wolf
 +rabbit
 +A rabbit
 +lion
 +bear
 +All animals
 +</​code>​
 +
 +=== Bucla "​while"​ ===
 +
 +<code python>
 +#Afiseaza cifrele de la 0 la 9
 +
 +count = 0
 + 
 +while count < 10:
 +    print (count)
 +    count = count + 1
 +</​code>​
 +
 +Ca și pentru bucla //for// există, de asemnea, posibilitatea de a aplica condița //else// pentru bucla //while//. Diferența este că blocul //else// va fi executat de fiecare dată când condiția de la structura repetitivă va fi evaluată ca și falsă:
 +
 +<code python>
 +print ("​Guess the number in the interval [ 1, 10 ]")
 + 
 +myNumber = 7
 +yourNumber = 0
 + 
 +while yourNumber!= myNumber:
 +    yourNumber = int( input("​Choose:​ ") )
 +else:
 +    print ("​Congratulations!"​)
 +</​code>​
 +
 +=== Break și Continue ===
 +
 +Instrucțiunea //break// este utilizată pentru a ieși dintr-o structură repetitivă. De exemplu, se pot afișa numerele de la 0 la 9 în felul următor:
 +
 +<code python>
 +count = 0
 + 
 +while True:
 +    print (count)
 +    count = count + 1
 +    if count > 10:
 +        break
 +</​code>​
 +
 +//​Continue//​ este utilizat pentru a ignora un bloc de instrucțiuni. De exemplu, il putem utiliza pentru a afișa numerele pare de la 0 la 20 astfel:
 +
 +<code python>
 +number = 0
 + 
 +while number < 21:
 +    if number % 2 == 1
 +        continue
 +    print (number)
 +</​code>​
 +
 +===== Funcții =====
 + 
 +=== Declarație === 
 +
 +<code python>
 +def myFunction():​
 +   print ("​Welcome"​)
 +   
 +# sau
 +
 +def simpleSum( a, b ):
 +   ​return a + b
 +</​code>​
 +
 +=== Apel ===
 +
 +<code python>
 +myFunction()
 +
 +# sau
 +
 +first = 1
 +second = 1
 +sum = simpleSum( first, second )
 +print (sum)
 +
 +print (simpleSum( first, second ))
 +</​code>​
 +
 +===== Clase și obiecte =====
 +
 +Un **obiect** este o încapsulare de variabile și de funcții într-o singură entitate, în timp ce o **clasă** reprezintă un model pentru a crea obiecte. În concluzie, un obiect își ia datele dintr-o clasă.
 +
 +<code python>
 +# Clasa simpla
 +
 +class MyClass:
 +   ​variable = "​Hello"​
 +   
 +   def myFunction(self):​
 +      print ("​Hello from function"​)
 +
 +
 +# Instantierea obiectului
 +myObject = MyClass()
 +
 +
 +# Afisarea continutului atributului clasei MyClass
 +print (myObject.variable)
 +
 +# Apelarea functiei MyFunction
 +monObjet.maFonction()
 +</​code>​
 +
 +<note important>​
 +În Python **self** reprezintă instanța unei clase, fiind identică cu **this** din Java. Utilizând cuvantul-cheie **self**, se pot accesa atributele și metodele definite în clasă.
 +</​note>​
 +
 +Numărul de obiecte care pot fi create dintr-o clasă nu este limitat, acestea moștenesc toate caracteristicle clasei(variabile și funcții). Cu toate acestea, fiecare obiect conține copii independente ale variabilelor definite în interiorul clasei. Prin urmare, dacă se creaza un obiect nou din clasa mamă, se poate modifica conținutul făra a afecta clasa ințială.
 +
 +<code python>
 +class MyClass:
 +   ​variable = "​Hello"​
 + 
 +   def myFunction(self):​
 +      print ("​Hello from function"​)
 + 
 +myObject1 = MyClass()
 +myObject2 = MyClass()
 + 
 +myObject2.variable = "​Bye"​
 + 
 +print (myObject1.variable)
 +print (myObject2.variable)
 + 
 +#Output
 +Hello
 +Bye
 +</​code>​
 +
 +===== Funcții matematice =====
 +
 +Pentru a putea utiliza funcții care execută operații matematice în Python, trebuie ca modulul **math** să fie importat.
 +
 +<code python>
 +import math
 +</​code>​
 +
 +
 +<note tip>
 +Fiecare funcție a bibliotecii **math** se apelează astfel:
 +
 +<code python>
 +math.functionName( params )
 +</​code>​
 +
 +Câteva funcții elementare: **floor**, **ceil**, **pow**, **sqrt**.
 +</​note>​
 +
 +<note tip>
 +Există funcții predefinite care nu necesită să fie importate dintr-un modul auxiliar. Sunt apelate astfel:
 +
 +<code python>
 +functionName( params )
 +</​code>​
 +
 +Exemple de funcții din acestă categorie: **abs**, **round**, **sum**.
 +</​note>​
 +
 +<note important>​
 +O listă completă de funcții matematice din Python poate fi găsită
 +[[https://​docs.python.org/​2/​library/​math.html|aici]].
 +</​note>​
 +===== Citirea de la tastatură ======
 +
 +Datele de intrare pot fi citite de la tastaura, pentru asta există funcția **input()**. Aceasta poate avea și parametrii suplimentari,​ string-ul care va fi afoșsat în linia de comanda la momentul citirii datelorȘ
 +
 +<code python>
 +name = input("​What'​s your name? ")
 +print("​Hello,​ " + name + "​!"​)
 +</​code>​
 +
 +<code bash>
 +# Output
 +What's your name? "​Ana"​
 +Hello, Ana!
 +</​code>​
 +
 +===== Excepții în Python ======
 +
 +Există 2 tipuri de execpții: erori de sintaxă și de excepții.
 +
 +**Erorile de sintaxă**, cunoscute sub numele de erori de analiză (parsing error) sunt cele mai cunoscute:
 +
 +<code python>
 +>>>​ while True print('​Hello world'​)
 +  File "<​stdin>",​ line 1
 +    while True print('​Hello world'​)
 +                   ^
 +SyntaxError:​ invalid syntax
 +</​code>​
 +
 +**Excepțiile** apar la momentul execuției:
 +
 +<code python>
 +>>>​ 10 * (1/0)
 +Traceback (most recent call last):
 +  File "<​stdin>",​ line 1, in <​module>​
 +ZeroDivisionError:​ division by zero
 +</​code>​
 +
 +=== Gestionarea excepțiilor ====
 +
 +Pentru a rezolva execpțiile în Python, se utilizează bloc-ul **try-except**, ​ ca în exemplul următor:
 + 
 +<code python>
 +while True:
 +    try:
 +        x = int(input("​Please enter a number: "))
 +        break
 +    except ValueError:
 +        print("​Oops! ​ That was no valid number. ​ Try again..."​)
 +</​code>​
 +
 +===== Exerciții ======
 +
 +   - Creați 3 variabile de tipuri diferite, ca mai jos, și afișați-le în consolă:
 +     - o variabilă //int// cu valoarea 80
 +     - o variabilă //float// având valoarea 20.2
 +     - o variabilă "​string",​ care va reține șirul "​python"​
 +   - Utilizând funcția [[https://​docs.python.org/​2/​library/​functions.html#​type|type]] determinați si afisati tipul variabilelor următoare.
 +     - var1 = 80
 +     - var2 = 20.2
 +     - var3 = "​IoT"​
 +   - Scrieți un program care primește ca parametrii de la linia de comandă 4 numere și afișați rezultatul calculuilui a+b*c-d.
 +   - Creați o listă cu prenumele colegilor de clasa, acestea se pot repeta. Adăugați cel puțin un element folosind metoda //​append()//​. Rezolvați următoarele cerințe:
 +     - Copiați lista inițială într-o altă listă numită copyList și sortați-o în ordine alfabetică
 +     - Determinați numarul de apariții al fiecarui nume folosind o listă auxiliară care conține elemente distincte
 +     - Determinați numele care are numarul maxim de apariții în listă și numele cu numărul minim de apariții (dacă exista mai multe elemente care respectă condiția se vor afișa toate)  ​
 +     - Inversați lista copyList și ștergeți ultimul element din lista inițială.
 +   
sde2/ipw2022/iot_python.txt · Last modified: 2022/08/03 11:30 by cristiana.andrei
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0