Table of Contents

Introducere in Python

Resurse

Programarea Python

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:

for i in range(1,11):
    print(i)
    if i == 5:
        break

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

# Sintaxa pentru a declara un număr întreg:
myInt = 7
 
# Sintaxa pentru a declara un număr real:
myFloat = 7.0
myFloat = float(7)

Variabile pentru șirurile de caractere

myString = 'hello'
myString = "hello"

Se poate realiza atribuirea valorilor pentru mai multe variabile.

# Instrucțiuni corecte
a, b = 1, 2             
suma = a  + b
# Instrucțiuni corecte
hello = "hello"
world = "world"
message = hello + " " + world
#Codul următor nu va funcționa
one = 1
two = 2
three = 3
hello = "hello"
 
print (one + two + three + hello)

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:

one = 1
two = 2
three = 3
hello = "hello"
 
print ( str(one) + str(two) + str(three) + hello )

Structuri de date

Liste

Listele sunt similare cu array-urile. Pot conține nenumărate tipuri de variabile și de de elemente.

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.

Pentru a crea o listă care contine elemente de tip intreg vom rula următoarea linie de cod:

myList = [1,2,3,4,5]

Putem de asemeanea să creăm o listă goală, la care vom adăuga elemente ulterior:

# Declararea unei liste
 
mylist = []
 
# Inserarea elementelor
 
mylist.append(1)
mylist.append(2)
mylist.append(3)

Pentru a extrage un element din listă folosim o construcție de tipul lista[indice]:

mylist = [1,2,3]
 
# Afișarea fiecărui element
 
print( mylist[0] )
print( mylist[1] )
print( mylist[2] )
 
# Output
1
2
3

În toate limbajele de programare numerotarea elementelor dintr-o listă începe de la indicele 0.

Funcția range

Informațiile din această secțiune se aplică doar pentru folosirea limbajului Python pentru micro:bit.

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:

mylist = range (2, 13, 2)
Funcții predefinite pentru gestionarea listelor
Metode predefinite pentru gestionarea listelor

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
specialisation = {}
 
specialisation["Ana"] = "Informatica"
specialisation["Radu"] = "Electronica"

Sau

specialisation = {
   "Ana": "Informatica",
   "Radu": "Electronica"
}
Parcurgerea elementelor dintr-un dicționar
for nom, spec in specialisation.iteritems():
   print ("The name of the specialisation where {} was assigned is: {}".format(nom, spec))
Eliminarea valorilor dintr-un dicționar
del optionalRepartizare["Ana"]
 
# sau
 
optionalRepartizare.pop("Ana")
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:

age = {
    "Ana" : 14,     
    "Ioana" : 13,     
    "Ana" : 16,     
    "Ioana" : 22,     
    "Ana" : 11
}
 
print ("Ana are  {} ani si Ioana are {} ani.".format(age["Ana"], age["Ioana"]))

Se va afișa mesajul urmator: “Ana are 11 ani si Ioana are 22 ani.”.

Funcții utile pentru dicționare
Metode utile pentru dicționare

numeDictionar.clear() → eliminarea tuturor elemetelor dintr-un dicționar

Structura de decizie "if"

# Decizie simplă
 
a = 33
b = 200
if b > a:
  print("b is greater than a")
# 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")
# 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")
# else fară elif
 
a = 200
b = 33
if b > a:
  print("b is greater than a")
else:
  print("b is not greater than a")

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:

listaDeNume = ["Ana", "Maria", "Ioana", "Irina", "Andreea", "Cristina"]
 
for nume in listaDeNume:
    print (nume)

Î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:

cours= [ "Math", "History", "English"]
 
 
for index, hobby in enumerate(cours):
    print (index, hobby)
 
# Output:
0 Math
1 History
2 English

O altă funcție este ultilitarul zip, care permite parcurgerea a două liste simultan.

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

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:

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

Bucla "while"

#Afiseaza cifrele de la 0 la 9
 
count = 0
 
while count < 10:
    print (count)
    count = count + 1

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ă:

print ("Guess the number in the interval [ 1, 10 ]")
 
myNumber = 7
yourNumber = 0
 
while yourNumber!= myNumber:
    yourNumber = int( input("Choose: ") )
else:
    print ("Congratulations!")

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:

count = 0
 
while True:
    print (count)
    count = count + 1
    if count > 10:
        break

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:

number = 0
 
while number < 21:
    if number % 2 == 1
        continue
    print (number)

Funcții

Declarație

def myFunction():
   print ("Welcome")
 
# sau
 
def simpleSum( a, b ):
   return a + b

Apel

myFunction()
 
# sau
 
first = 1
second = 1
sum = simpleSum( first, second )
print (sum)
 
print (simpleSum( first, second ))

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ă.

# 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()

Î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ă.

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ă.

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

Funcții matematice

Pentru a putea utiliza funcții care execută operații matematice în Python, trebuie ca modulul math să fie importat.

import math

Fiecare funcție a bibliotecii math se apelează astfel:

math.functionName( params )

Câteva funcții elementare: floor, ceil, pow, sqrt.

Există funcții predefinite care nu necesită să fie importate dintr-un modul auxiliar. Sunt apelate astfel:

functionName( params )

Exemple de funcții din acestă categorie: abs, round, sum.

O listă completă de funcții matematice din Python poate fi găsită aici.

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Ș

name = input("What's your name? ")
print("Hello, " + name + "!")
# Output
What's your name? "Ana"
Hello, Ana!

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:

>>> while True print('Hello world')
  File "<stdin>", line 1
    while True print('Hello world')
                   ^
SyntaxError: invalid syntax

Excepțiile apar la momentul execuției:

>>> 10 * (1/0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

Gestionarea excepțiilor

Pentru a rezolva execpțiile în Python, se utilizează bloc-ul try-except, ca în exemplul următor:

while True:
    try:
        x = int(input("Please enter a number: "))
        break
    except ValueError:
        print("Oops!  That was no valid number.  Try again...")

Exerciții

  1. Creați 3 variabile de tipuri diferite, ca mai jos, și afișați-le în consolă:
    1. o variabilă int cu valoarea 80
    2. o variabilă float având valoarea 20.2
    3. o variabilă “string”, care va reține șirul “python”
  2. Utilizând funcția type determinați si afisati tipul variabilelor următoare.
    1. var1 = 80
    2. var2 = 20.2
    3. var3 = “IoT”
  3. 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.
  4. 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:
    1. Copiați lista inițială într-o altă listă numită copyList și sortați-o în ordine alfabetică
    2. Determinați numarul de apariții al fiecarui nume folosind o listă auxiliară care conține elemente distincte
    3. 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)
    4. Inversați lista copyList și ștergeți ultimul element din lista inițială.