introducere in programare folosind python...introducere in programare folosind python curs 4...
Post on 06-Mar-2021
141 Views
Preview:
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