introducere in programare folosind python...introducere in programare folosind python curs 4...

Post on 06-Mar-2021

87 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

SPAM

Dr. Elena OvreiuUniversitatea POLITEHNICA din Bucurestiwww.ovreiu.com

INTRODUCERE IN PROGRAMARE FOLOSIND PYTHON

CURS 4Operanzi –Operatori –Input/Output-Structuri de decizie

Operatii aritmetice+ adunare- scadere* inmultire / impartire% restul impartirii** ridicare la putere // impartirea intreaga

155502.001000002

** si // sunt specifici limbajului Python

Operatori de atribuire1. =a = 10 (variabilei a i se atribuie valoarea 10)a = x+y (variabilei a i se atribuie suma x+y)2. +=; -=; *=, /=a+=b este echivalent cu a=a+ba-=b; a*=b; a/=b; a%=b;a//=b echivalent cu a=a//ba**=b echivalent cu a=a**b

Operatori de atribuire

(10, 10, 10)(10, 5)(15, 5)(75, 5)(15, 5)

Operatori de comparatie

1. == egalitate2. != non-egalitate3. < mai mic4. > mai mare5. <= mai mic sau egal6. >= mai mare sau egal

FalseTrueTrueFalseTrueFalse

Operatori logici

1. and 2. or3. not§ In expresia x and y x si y trebuie sa fie de tipul Boolean

Operatori logiciOperator Operand 1 (Bool)

Operator Operand 2 (Bool)

Rezultat

and True and True True

False and True False

True and False False

False and False False

or True and True True

False and True True

True and False True

False and False False

not not True False

not False True

Operatori logici

■ Putem combina operatorii logici cu cei de comparatie

TrueFalse

Ordinea operatiilor este: operatori de comparatie, apoi cei logici: x==10 Truey==5 TrueTrue and True = True

Functii de Input si Output

ConsolaApplication

UserInput

Output

Input: input()Print: print()

Output: print()()HelloHelloHello, SPAMHello,SPAM10, 2010/20

Parametrul sep separa variabilele a si b

print()

20-2-2012 20/2/2012Hello+++SPAM

print(): str%

Radu 9.23Studentul Radu are media 9.23Studentul Radu are media 9.230000

%s –string%i –integer%f - float

print()

Studentul Radu are media 9.23

Studentul Radu are media 9.23

Studentul Radu are media 9.23

input ()■ In Python, functia input() este folosita pentru a introduce una sau mai multe

valori in program

■ Functia input() citeste o linie introdusa pe consola de catre un dispozitiv de intrare (ex. tastatura), converteste acea linie in sir si il returneaza.

>>> s=input()

Ceea ce se introduce de la tastatura va fi salvat in variabila s sub forma de sir>>> s=input(“Introduceti un nume:”)

Introduceti un nume:

Sirul pe care functia input() il primeste ca argument va fi afisat pe ecran, inainte de a fi introdusa o valoare de la tastatura.

input ()

■ Inputul functiei sunt valori introduse de user.

■ Ex. Daca dorim saadunam 2 numerepe calculator, cele 2 numere trebuie pusela dispozitieprogramului de catreuser

input ()■ Indiferent ce introduceti ca input, functia input() il va converti intr-un

string

■ Daca introduceti un numar intreg, acesta va fi convertit intr-un string

■ Daca dorim sa introducem un numar de la tastatura, trebuie aplicata conversia de tip.

>>> n=input(“Introduceti un numar intreg:”)

4

>>>type(n)

<str>

input ()■ Pentru a introduce un numar intreg:

>>> n=int(input(“Introduceti un numar intreg:”))

4

>>>type(n)

int

■ Pentru a introduce un numar real (float):

>>> n=float(input(“Introduceti un numar real: ”))

input ()■ La fel cum introducem int, float si string, putem introduce si o lista: >>>student=input(“Introduceti numele, varsta, numarul de telefon: “)

Introduceti numele, varsta, numarul de telefon: Alex 23 076253423

>>> student

'Alex 23 074573733'

>>> type(student)

str

input ()■ Pentru a transforma din string in lista, se foloseste split()>>> s=student.split()

>>> s

['Alex', '23', '074573733’]

§ Se mai poate scrie:>>>student=input("Introduceti nume, varsta, telefon: ").split()

Introduceti nume, varsta, telefon: Alex 23 074573733

>>>student

['Alex', '23', '074573733']

input ()■ Daca se introduc valorile pentru nume, varsta, telefon cu virgula in loc

de spatiu:>>> Introduceti nume, varsta, telefon: Alex, 23, 074573733

>>> student

'Alex, 23, 074573733’

>>>student.split(’,’)

['Alex', ' 23', ' 074573733']

Structuri de decizie• Pana acum am lucrat cu programe in care secventele de

instructiuni erau executate in ordinea aparitiei.• Executia instructiunilor este un concept fundamental al

programarii, dar nu este suficient sa rezolvam oriceproblema.

• Adesea, este necesar sa se modifice fluxul secvential al unui program, pentru a rezolva anumite situatii

Structuri de decizie

• Acesta se face cu ajutorul unor instructiuni speciale, numitestructuri de control

• Structurile de decizie: permit unui program sa execute diferite instructiuni pentru diferite cazuri

Convertor Celsius Fahrenheit# convert.py

def main():

celsius = float(input("What is the Celsius temperature? "))

fahrenheit = 9/5 * celsius + 32

print("The temperature is", fahrenheit, "degrees Fahrenheit.")

• Vrem sa modificam programul, astfel incat sa afiseze o avertizare in cazul in care temperature este extrema (peste90 grade F sau mai putin de 30 grade F)

Convertor Celsius Fahrenheit

• Input the temperature in degrees Celsius (call it celsius)

Calculate fahrenheit as 9/5 celsius + 32

• Output fahrenheit

• If fahrenheit > 90print a heat warning

• If fahrenheit < 30print a cold warning

• Acest algoritm are 2 decizii la final: daca temperatura estemai mare de 90 grade F sau daca este mai mica.

Convertor Celsius FahrenheitInput Celsius Temp

fahrenheit = 9/5* celsius + 32Print fahrenheit

fahrenheit >90

fahrenheit <30

Print a heat warning

Print a cold warning

yes

no

yes

no

Convertor Celsius Fahrenheit# convert2.py

def main():

celsius = float(input("What is the Celsius temperature? "))

fahrenheit = 9 / 5 * celsius + 32print("The temperature is", fahrenheit, "degrees

fahrenheit.")

if fahrenheit >= 90:

print("It's really hot out there, be careful!")

if fahrenheit <= 30:

print("Brrrrr. Be sure to dress warmly")

main()

Structuri de decizie simple (if)

• Instructiunea if este folosita pentru a implementa decizia• if <condition>:

<body>

• Corpul instructiunii if (<body>)este format din una saumai multe instructiuni, toate alienate sub if

Structuri de decizie simple (if)

Executia lui if respecta urmatorii pasi: 1. Conditia <condition> este evaluata2. Daca <condition> este adevarata, instructiunile din

<body> sunt executate, dupa care controlul trece la urmatoarea instructiune din program

3. Daca <condition> este falsa, Python sare instructiuniledin <body> si trece la urmatoarea instructiune din program.

if <condition>:<body>

Structuri de decizie simple

• Instructiunile din <body> sunt executate sau nu, in functiede conditie

• In orice caz, corpul trece apoi la urmatoarea instructiunedupa if

• Aceasta este o decizie simpla sau one-way

Conditiile

• Ce este o conditie?• Acestea pot fi simple comparatii: <expr> <op> <expr>

<op> este operator

Python Mathematics Meaning

< < Less than

<= ≤ Less than or equal to

== = Equal to

>= ≥ Greater than or equal to

> > Greater than

!= ≠ Not equal to

Conditii simple• == este folosit pentru egalitate. Deoarece Python foloseste

= pentru atribuire, un alt simbol era necesar pentruconceptul de egalitate.

• O eroare frecventa este sa se foloseasca = pentru egalitate.• Conditiile pot contine atat numere cat si siruri• Atunci cand se compara siruri, odonarea este lexigrafica,

ceea ce inseamna ca sirurile sunt sortate pe baza Unicode-ului.

Conditii simple

• Din aceasta cauza, toate literele latine, litere mari se gasescinaintea literelor mici. (“Bbbb” este inaintea lui “aaa”)

• Conditiile se bazeaza pe expresii boolene, denumite asadupa matematicianul englez George Boole.

• Cand o expresie Booleana este evaluata, ea produce fie o valoare adevarata (True) fie una falsa (False)

• Unele limbaje de programare folosesc 0 si 1 pentru Falsesi True.

Conditii simple• Conditiile boolene sunt de tipul bool, iar valorile Boolene adevarat

sau fals sunt reprezentate de True sau False>>> 3 < 4True>>> 3 * 4 < 3 + 4False>>> "hello" == "hello"True>>> "Hello" < "hello”True

Ecuatia de gradul 2import math

def main():print(”Acest program calculeaza si afiseaza

radacinile unei ecuatii de gradul 2\n")

a,b,c = eval(input(”Introduceti coef a,b,c: "))

delta = b * b - 4 * a * cx1 = (-b + math.sqrt(delta)) / (2 * a)x2 = (-b - math.sqrt(delta)) / (2 * a)

print("\n Radacinile sunt:", x1, x2)

Ecuatia de gradul 2• Daca delta <0, programul se blocheaza• Daca apelam functia si introducem coeficientii 1,1, 2

obtinem :File "/Users/elenaovreiu/.spyder-py3/unecutatie.py", line 13, in main

x1= (-b+sqrt(delta))/(2*a)

ValueError: math domain error

Verificam daca delta >0

import math

def main():print(”Acest program calculeaza si afiseaza

radacinile unei ecuatii de gradul 2\n")

a,b,c = eval(input(”Introduceti coef a,b,c: "))

delta = b * b - 4 * a * c

if delta>=0:

x1 = (-b + math.sqrt(delta)) / (2 * a)

x2 = (-b - math.sqrt(delta)) / (2 * a)

print("\n Radacinile sunt:", x1, x2)

• In cazul acesta, daca delta <0, programul nu face nimic, ceea ce e si mai rau decat sa se blocheze, deoarece nu stim ce este gresit!

• Am putea adauga un alt if la sfarsitif delta<0:

print(“Ecuatia nu are radacini reale”)

• Acest lucru este posibil, dar nu este cel mai recomandat, deoarece conditiile se exclud una pe cealalta.

delta <0

print (“ecuatia nu are radacini reale” )

Calculeazaradacinile

yesno

Structura de decizie dubla (if-else)• In Python, o decizie dubla se implementeaza folosind

structura: if-else• if <condition>:

<statements>else:

<statements>

• Cand Python intalneste aceasta structura, prima data evalueaza conditia <condition>

Structura de decizie dubla (if-else)

• Daca <condition> este adevarata, sunt executateinstructiunile de sub if

• Daca este falsa, sunt executate instructiunile de sub else. • In orice situatie, instructiunile care urmeaza dupa if-else

sunt executate dupa executia unuia dintre cazuri.

def main():

print(”Acest program calculeaza si afiseazaradacinile unei ecuatii de gradul 2\n")

a,b,c = eval(input(”Introduceti coef a,b,c: "))

delta = b * b - 4 * a * c

if delta>=0:

x1 = (-b + math.sqrt(delta)) / (2 * a)

x2 = (-b - math.sqrt(delta)) / (2 * a)

print("\n Radacinile sunt:", x1, x2)

else:

print("\n Ecuatia nu are radacini reale")

Introduceti coef a,b,c: 1,1,2

>>> Ecuatia nu are radacini reale

Introduceti coef a,b,c: 2,5,2

>> Radacinile sunt: -0.5, -2.0

Daca introducem coeficeintii 1, 2, 1Introduceti coef a,b,c: 1,2,1

>> Radacinile sunt: -1.0, -1.0

Radacinile egale apar cand delta este 0 si atunci radacinilesunt -b/2a

Decizii multiple

Acum avem 3 cazuri (posibilitati) pentru delta• delta <0

• delta =0

• delta >0

• Putem implementa aceste cazuri cu 2 instructiuni if-else, una in interiorul celeilalte (tehnica se numestenesting)

def main():print(”Acest program calculeaza si afiseaza radacinile unei

ecuatii de gradul 2\n")

a,b,c = eval(input(”Introduceti coef a,b,c: "))

delta = b * b - 4 * a * c

if delta>0:

x1 = (-b + math.sqrt(delta)) / (2 * a)

x2 = (-b - math.sqrt(delta)) / (2 * a)

print("\n Radacinile sunt:", x1, x2)

else:

if delta==0

x=-b/2*a

else:

print("\n Ecuatia nu are radacini reale")

delta <0

print (“ecuatia nu are radacini reale” )

Calculeazaradacinile

yesno

Calculeaza radacina

delta ==0

yesno

Decizii multiple

• Imaginati-va daca ar trebui sa luam 5 decizii. Structura if-else ar trebui folosita de 4 ori.

• Python ne ofera posibilitatea sa combinam else cu un ifcare urmeaza imediat dupa, obtinand elif

Decizii multipleif <condition1>:

<case1 statements>elif <condition2>:

<case2 statements>elif <condition3>:

<case3 statements>…else:

<default statements>

• Python verifica fiecare conditie pana ajunge la prima care este adevarata si executa instructiunile acelei conditii. Apoitrece la urmatoarea instructiune dupa structura if-elif-else

Decizii multiple

• Daca nicio conditie nu este adevarata, Python executainstructiunile lui else.

• else este optional. Daca nu exista, atunci nu se executanimic in cazul in care nicio conditie nu este adevarata.

def main():

print(”Acest program calculeaza si afiseaza radacinileunei ecuatii de gradul 2\n")

a,b,c = eval(input(”Introduceti coef a,b,c: "))

delta = b * b - 4 * a * c

if delta>0:

x1 = (-b + math.sqrt(delta)) / (2 * a)

x2 = (-b - math.sqrt(delta)) / (2 * a)

print("\n Radacinile sunt:", x1, x2)

elif delta==0

x=-b/2*a

else:

print("\n Ecuatia nu are radacini reale")

Manipularea exceptiilor• In programul care calculeaza radacinile ecuatiei de gradul

2, folosim structuri de decizie pentru a evita calcululradicalului dintr-un numar negativ (evitand astfel o eroarede executie).

• Acest lucru este valabil pentru mai multe programe: structurile de precizie sunt folosite pentru a protejaimpotriva unor erori rare, dar posibile.

Manipularea exceptiilor

• Ex. In programul care calculeaza radacinile ecuatiei de gradul 2, am verificat delta inainte de a calcula radical din delta. Uneori, functiile verifica erorile si returneaza o valoare speciala pentru aindica ca operatiunea nu a reusit.

• Ex. Radical dintr-un numar negativ ar putea returna -1 pentru aindica o eroare (deoarece erorile patrate nu sunt niciodatanegative, stim ca aceasta este o valoare care indica faptul ca operatiunea nu a reusit).

Manipularea exceptiilor

• Programatorul poate scrie cod care manipuleaza erorilecare pot aparea in timpul functionarii programului.

• Aceasta abordare evita necesitatea de a efectua verificariexplicite la fiecare pas al algoritmului.

def main():

print(”Acest program calculeaza si afiseaza radacinileunei ecuatii de gradul 2\n")

try:a,b,c = eval(input(”Introduceti coef a,b,c: "))

delta = b * b - 4 * a * c

x1 = (-b + math.sqrt(delta)) / (2 * a)

x2 = (-b - math.sqrt(delta)) / (2 * a)

print("\n Radacinile ecuatiei sunt”, x1,x2)

except ValueError:

print(“Nu are radacini reale”)

Manipularea exceptiilor

• Instructiunea try are urmatoarea forma: • try:

<body>except <ErrorType>:

<handler>

• Cand Python intalneste instructiunea try, executainstructiunile din body.

• Daca nu intalneste nicio eroare, controlul trece la urmatoarea instructiune dupa instructiunea try…except.

Manipularea exceptiilor• Daca o eroare apare in timpul executiei instructiunilor din body,

atunci Python cauta o clauza exceptionala. Daca gaseste una, codul este executat.

• Programul original a generat aceasta eroare referitoare la delta negativ:

File "/Users/elenaovreiu/.spyder-py3/unecutatie.py", line 13, in main

x1= (-b+sqrt(delta))/(2*a)

ValueError: math domain error

Manipularea exceptiilor

• In ultima linie, “ValueError” indica tipul specific de eroare. Noul cod executat este:

• Introduceti coef a,b,c:1,1,2

• >> Nu are radacini reale

• In loc sa se blocheze, programul afiseaza un mesaj care indica faptul ca nu sunt radacini reale

• Instructiunea try…except poate fi folosita pentru oricetip de eroare

Manipularea exceptiilor

• O singura instructiune try poate avea multe clause except

import math

def main():

print(”Acest program calculeaza si afiseaza radacinile unei ecuatii de gradul 2\n")

try:

a,b,c=eval(input(”Introduceti coef a,b,c: "))

delta_rad = math.sqrt(b * b - 4 * a * c)

root1 = (-b + delta_rad ) / (2 * a)

root2 = (-b - delta_rad ) / (2 * a)

print("\ Radacinile ecuatiei sunt”, x1,x2)

except ValueError as excObj:

if str(excObj) == "math domain error":

print(" Nu are radacini reale ")

else:

print(”Coeficienti nevalizi.")

except:

print("\n Ceva rau s-a intamplat, ne pare rau!")

Manipularea exceptiilor

• Exceptiile multiple se comporta ca elif-urile. • Daca programul nu contine nicio clauza except, programul

se blocheaza si raporteaza o eroare. • Exceptiile in sine sunt considerate niste obiecte.

top related