Variabile si tipuri de date
1. Teorie
1.1 Valori
Cand vorbim de value ne referim lucru precum un numar sau o litera pe care un
program il poate manipula.
Ex. de value: 4 (rezultatul de la 2+ 2) sau "Hello, world!"
Aceste values sunt clasificate in clase sau tipuri de date: 4 este intreg, "Hello,
words!" este un string (deoarece contine un sir de caractere).
Un string este identificat de interpretor datorita ghilimelelor.
Tipul unei date
Pentru a afla tipul unei date, folosim functia __type__ care returneaza tipul valorii pe
care o primeste ca parametru
In [2]:
type('Hello, world!')
Out[2]:
str
In [3]:
type(10)
Out[3]:
int
String apartine clasei str iar integer clasei int. Numerele cu virgula apartin clasei
float (de la formatul zecimal -floating point).
La acest nivel, putem sa folosim ambii teremeni: clasa sau tip de date.
In [3]:
type(1.2)
Out[3]:
float
In [4]:
type("2.3")
Out[4]:
str
In [5]:
type("2")
Out[5]:
str
Sirurile in Python pot fi demarcate de apostrof ('), ghilimele (") sau ('''), (""")
Python nu tine cont daca sirul este demarcat de ghilimele, sau apostrof sau 3
ghilimele.
In [6]:
type('Acesta este un sir')
Out[6]:
str
In [7]:
type ("Si acesta este un sir")
Out[7]:
str
In [8]:
type('''Si acesta''')
Out[8]:
str
In [9]:
type("""Sau acesta""")
Out[9]:
str
In interiorul ghilimelelor se pot folosi apostrof _"New Year's Eve"_, iar in interiorul
unui sir demarcat de apostrufuri se pot folosi ghilimele
In [11]:
'Acesta este un sir'
Out[11]:
'Acesta este un sir'
In [12]:
"Si acestea este un sir"
Out[12]:
'Si acestea este un sir'
In [13]:
"""La fel si acesta"""
Out[13]:
'La fel si acesta'
In [14]:
40, 000
Out[14]:
(40, 0)
In [15]:
40000
Out[15]:
40000
Functia __int__ converteste un integer reprezentat ca string intr-un adevarat integer,
iar functia __str__ converteste un integer la un string.
In [3]:
Out[3]:
In [4]:
str(4)
Out[4]:
'4'
Expresia str(4) transforma in string numarul 4 (de tip intreg).
In [5]:
'5'
Out[5]:
'5'
In [6]:
int('5')
Out[6]:
Expresia _int('5')_ transforma in numar intreg string-ul '5'
Toate numerele intregi au un echivalent string, dar nu toate sirurile sunt si numere
intregi
In [7]:
str(1024)
Out[7]:
'1024'
In [8]:
int('wow')
---------------------------------------------------------
------------------
ValueError Traceback (most
recent call last)
<ipython-input-8-b3dd29f1c402> in <module>
----> 1 int('wow')
ValueError: invalid literal for int() with base 10: 'wow'
In [9]:
int(3.4)
Out[9]:
In [10]:
int('3.4')
---------------------------------------------------------
------------------
ValueError Traceback (most
recent call last)
<ipython-input-10-5e199bebc801> in <module>
----> 1 int('3.4')
ValueError: invalid literal for int() with base 10: '3.4'
In Python, nici 'wow', nici '3.4' nu reprezinta expresii valide pentru integer.
Operatorul "+" lucreaza diferit pentru numere intregi si pentru siruri. </font>
In [23]:
5 + 10
Out[23]:
15
In [24]:
'5' + '10'
Out[24]:
'510'
In [13]:
'abc' + 'xyz'
Out[13]:
'abcxyz'
Folosit cu siruri, operatorul + face concatenarea celor 2 siruri.
Punand impreuna cele 2 tipuri de date (int si str) nu este permis</font>
In [14]:
'5' + 10
---------------------------------------------------------
------------------
TypeError Traceback (most
recent call last)
<ipython-input-14-3462b9f136f4> in <module>
----> 1 '5' + 10
TypeError: can only concatenate str (not "int") to str
Dar putem sa folosim urmatoarea expresie:
In [22]:
5 + int('10')
Out[22]:
15
In [16]:
'5' + str(10)
Out[16]:
'510'
Functia __type__ poate sa returneze si tipuri mai complicate:
In [17]:
type(4+7)
Out[17]:
int
In [18]:
type('4'+'7')
Out[18]:
str
In [19]:
type (int('3') + int(4))
Out[19]:
int
In [21]:
type(int('3') + int(4))
Out[21]:
int
1.2 Variabile
__Varibila__ este un nume care se refera la o valoare. Prin operatia de atribuire ("="),
variabila primeste o valoare.
In [25]:
a='Hello, FIM!'
b=16
pi=3.14159
Pe prima linie, variabilaa a primit valoarea Hello, FIM!.
Pe cea de a 2a, variabila b a primit valoarea 16 si pe cea de-a 3 a linie, variabila pi a
primit valoarea 3.14159
Operatorul "=" este folosit pentru atribuire si nu pentru egal, care este "=="
Operatorul "=" atribuie unui nume (variabila), care se gaseste in partea stanga, o
valoare, care se gaseste in dreapta (intotdeauna). </font>
In [26]:
Out[26]:
'Hello, FIM!'
In [27]:
print(a)
Hello, FIM!
In [28]:
Out[28]:
16
In [29]:
print(b)
16
In [30]:
type(a)
Out[30]:
str
In [31]:
type(b)
Out[31]:
int
In [32]:
type(pi)
Out[32]:
float
In [33]:
5=x
File "<ipython-input-33-68a7d230d912>", line 1
5=x
^
SyntaxError: can't assign to literal
In [34]:
x = 10
print('x = ' + str(x))
x = 20
print('x = ' + str(x))
x = 30
print('x = ' + str(x))
x = 10
x = 20
x = 30
Folosim functia __str__ astfel incat x sa fie vazut ca un string. Astfel, operatorul + va
concatena 2 siruri. </font>
In [ ]:
print('x = ' + str(x))
__'x=' + x__ nu este corect. Am vazut ca operatorul + nu functioneaza cu 2 variabile
de tipuri diferite. </font>
In [35]:
x = 10
print('x =', x)
x = 20
print('x =', x)
x = 30
print('x =', x)
x = 10
x = 20
x = 30
Functia __print(' x = ', x)__ produce acelasi rezultat. </font>
In [ ]:
print('x =', x)
Functia print accepta 2 parametri: primul parametru 'x=' este un string iar cel de al
2lea este o variabila x.
Functia print permite mai multi parametri de intrare, separati prin virgula. </font>
In [36]:
x, y, z = 100, -45, 0
print('x=',x,' y=',y,' z=',z)
x= 100 y= -45 z= 0
In expresia de mai sus, avem 2 liste (tuple): _x, y, z_ si 100, -45, 0 separate de
virgula.
Primei variabile din prima lista ii este atribuita prima valoare din cea de a 2a lista
(x=100, y=-45, z=0) </font>
In [37]:
a = 10
print('First, variable a has value', a, 'and type', type(a))
a = 'ABC'
print('Now, variable a has value', a, 'and type', type(a))
First, variable a has value 10 and type <class 'int'>
Now, variable a has value ABC and type <class 'str'>
1.3 Identificatori
Desi in matematica se obisnuieste sa se dea nume simple variabilelor, ex. x, y, in
programare este indicat sa se foloseasca nume mai lungi si mai descriptive pentru
variabile, de ex. sum, height, total, etc.
Numele variabilei trebuie ales astfel incat sa descrie utilizarea variabilei si sa fie si
usor de citit.
Regului pentru numele unei variabile
1. Trebuie sa contina cel putin un caracter.
2. Primul caracter trebuie sa fie o litera (majuscula sau minuscula) sau underscore
(""):
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
3. Restul caracterelor (daca este cazul) pot fi litere, underscore sau cifre.
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789
4. Niciun alt caracter (incluzand spatii) nu este permis in numele unei variabile
5. Un cuvant rezervat nu poate fi folosit ca nume de variabila.
Exemple de nume de variabile corecte si incorecte:
Corect: x, x2, total, port_22, FLAG.
Incorect: sub-total, first entry, 4all, #2, class </font>
In [ ]:
class=15
1.4 Tipul float
In [40]:
pi = 3.14159;
print("Pi =", pi)
print("sau", 3.14, "mai scurt")
Pi = 3.14159
sau 3.14 mai scurt
1.5 Tipul string
Caracterele care apar intr-un string sunt literele din alfabet (A-Z, a-z), cifre (0-9),
semne de punctuatie (., :, ,, etc.) si alte simboluri (#, &, %, etc.).
In afara de aceste caractere, se mai pot introduce anumite caractere numite _cod
de control_. Acestea controleaza modul in care textul este afisat pe ecran.
Exemple de cod de control: "\n" -newline, "\t"- tab
In [41]:
print('A\nB\nC')
print('D\tE\tF')
print('WX\bYZ')
print('1\a2\a3\a4\a5\a6')
A
B
C
D E F
WXYZ
123456
1.6 Functia Input
Functia print permite unui program sa afiseze informatii catre utilizator.
Pentru a obtine informati de la utilizator programele folosesc functia input.
Cea mai simpla utilizare a functiei input este: </font>
In [ ]:
x=input()
In [ ]:
print('Please enter some text:')
x = input()
print('Text entered:', x)
print('Type:', type(x))
Functia input produce doar siruri (strings).
Daca vrem sa introducem numere intregi, folosim functia int pentru a converti in
integer. </font>
In [ ]:
print('Please enter an integer value:')
x = input()
print('Please enter another integer value:')
y = input()
num1 = int(x)
num2 = int(y)
print(num1, '+', num2, '=', num1 + num2)
Putem scrie si functia input folosind si string ca argument:</font>
In [ ]:
x = input('Please enter some text: ')
Astfel, codul de mai sus poate fi scris mai concis, in felul urmator:
In [ ]:
x = input('Please enter an integer value: ')
y = input('Please enter another integer value: ')
num1 = int(x)
num2 = int(y)
print(num1, '+', num2, '=', num1 + num2)
Si chiar mai concis:
In [ ]:
num1 = int(input('Please enter an integer value: '))
num2 = int(input('Please enter another integer value: '))
print(num1, '+', num2, '=', num1 + num2)
1.7 Functia eval
Functia input produce un string din ceea ce este introdus de user.
Daca vrem ca inputul respectiv sa fie un numar, folosim functiile int sau float.
</font>
In [ ]:
x = float(input('Please enter a number'))
Functia eval evalueaza input-ul produs de functia input si transforma automat in
tipul de date corespunzator.
De exemplu: </font>
In [ ]:
x1 = eval(input('Entry x1? '))
print('x1 =', x1, ' type:', type(x1))
x2 = eval(input('Entry x2? '))
print('x2 =', x2, ' type:', type(x2))
x3 = eval(input('Entry x3? '))
print('x3 =', x3, ' type:', type(x3))
x4 = eval(input('Entry x4? '))
print('x4 =', x4, ' type:', type(x4))
x5 = eval(input('Entry x5? '))
print('x5 =', x5, ' type:', type(x5))
In [ ]:
Entry x1? 6
x1 = 6 type: <class 'int'>
Entry x2? 6.0
x2 = 6.0 type: <class 'float'>
Entry x3? x1
x3 = 6 type: <class 'int'>
Entry x4? 'x1'
x4 = x1 type: <class 'str'>
Entry x5? x6
Traceback (most recent call last):
File "<ipython-input-10-bb5de00b9a59>", line 1, in <module>
runfile('/Users/elenaovreiu/.spyder-py3/temp.py', wdir='/Users/ele
naovreiu/.spyder-py3')
De asemenea, putem introduce mai multe valori folosind input. Acestea vor fi
despartite prin virgula:
In [ ]:
num1, num2 = eval(input('Please enter number 1, number 2: '))
print(num1, '+', num2, '=', num1 + num2)
In [ ]:
Please enter number 1, number 2: 4,5
4 + 5 = 9
1.8 Functia print
Functia print afiseaza intotdeauna o linie de text si apoi muta cursorul pe linia
urmatoare astfel incat, orice afisare viitoare apare pe linia urmatoare.
Totusi, functia print accepta un argument aditional, care ii permite cursorului sa
ramana pe acceasi linie.
Acest lucru este realizat de 'end='</font>
In [ ]:
print('Please enter an integer value:', end='')
Un alt mod de a obtine accelasi lucru este:
In [ ]:
print(end='Please enter an integer value: ')
In [ ]:
print('A', end='')
print('B', end='')
print('C', end='')
print()
print('X')
print('Y')
print('Z')
In [ ]:
ABC
X
Y
Z
In [ ]:
w, x, y, z = 10, 15, 20, 25
print(w, x, y, z)
print(w, x, y, z, sep=',')
print(w, x, y, z, sep='')
print(w, x, y, z, sep=':')
print(w, x, y, z, sep='-----')
In [ ]:
10 15 20 25
10,15,20,25
10152025
10:15:20:25
10-----15-----20-----25
2. Probleme Rezolvate
2.1. Scrieti o functie care calculeaza si afiseaza suma a 2 numere intregi, introduse
de la tastatura.
In [ ]:
def main():
a= eval(input('Introduceti primul numar:'))
b=eval(input('Introduceti al doilea numar:'))
s=a+b
print('Suma numerelor este:',s)
main()
Output
In [ ]:
Introduceti primul numar:4
Introduceti al doilea numar:5
Suma numerelor este: 9
In [ ]:
def main():
a=eval(input('Introduceti primul numar:'))
b=eval(input('Introduceti al doilea numar:'))
print('Suma dintre',a, 'si', b, 'este', a+b)
main()
Output
In [ ]:
Rulati programul fara a folosi functia _eval_
In [ ]:
def main():
a= input('Introduceti primul numar:')
b=input('Introduceti al doilea numar:')
s=a+b
print('Suma numerelor este:',s)
main()
In [ ]:
In [7]: main()
Introduceti primul numar:4
Introduceti al doilea numar:5
Suma numerelor este: 45
Deoarece functia input introduce doar string-uri, primul numar, a este vazut ca un string, in
exemplul de mai sus, '4'. La fel si pentru cel de-al 2lea numar, care are valoarea '5'.
In acest caz, operatorul "+" face concatenarea celor 2 string-uri, de unde si rezultatul 45.
</font>
2.2. Scrieţi un program care calculează aria unui cerc de rază dată; valoarea razei se
va citi de la tastatură şi va fi un număr întreg.
In [ ]:
def main():
r= eval(input('Introduceti raza (numar intreg):'))
aria= math.pi*r*r
print('Aria cercului de raza',r, 'este', aria)
main()
In [ ]:
Introduceti raza (numar intreg):3
Aria cercului de raza 3 este 28.274333882308138
2.3. Scrieţi un program care transformă temperatura exprimată în grade Fahrenheit
în grade Celsius. Se va utiliza formula: C = (F–32)*5/9 , unde C – grade Celsius
(număr real), F – grade Fahrenheit (număr întreg).
In [ ]:
def main():
gradf=eval(input('Introduceti temperatura in grade Fahrenheit:'))
gradc = (gradf - 32) * 5/ 9;
print('Temperatura in grade Celsius este',gradc)
main()
Dacă se introduce de la tastatură, de exemplu, valoarea 100, programul va afişa:
In [ ]:
Introduceti temperatura in grade Fahrenheit:100
Temperatura in grade Celsius este 37.77777777777778
2.4. Scrieţi un program care transformă măsura unui unghi din grade (număr întreg)
în radiani (număr real). Se va utiliza relaţia de transformare cunoscută: rad = grad * π
/ 180.
In [ ]:
def main():
grad=eval(input('Introduceti unghiul in grade:'))
rad = grad * math.pi / 180;
print('Masura unghiului este de',rad, 'radiani')
main()
Dacă se introduce de la tastatură, de exemplu, valoarea 360, programul va afişa:
In [ ]:
Introduceti unghiul in grade:360
Masura unghiului este de 6.283185307179586 radiani
3. Probleme Propuse
3.1. Scrieţi un program care să vă afişeze numele pe ecran, ca şi seria şi grupa, pe
două rânduri succesive.
3.2. Se citeşte un întreg . Scrieţi un program care să afişeze: „Aţi introdus numărul
...”.
3.3. Scrieţi un program care citeşte doi întregi şi calculează produsul lor.
3.4. Scrieţi un program care calculează lungimea unui cerc de rază dată; valoarea
razei se va citi de la tastatură şi va fi un număr întreg.
3.5. Scrieţi un program care transformă temperatura exprimată în grade Celsius în
grade Fahrenheit.
3.6. Scrieţi un program care transformă măsura unui unghi din radiani în grade.
3.7.Scrieţi programe care calculează arii pentru pătrat, dreptunghi, triunghi.
3.7. Scrieţi programe care calculează volume pentru cub, paralelipiped, piramidă.