Contents
1. Materiale bibliografice
1.1. În engleză
Pagina (oficială) de pornire pentru documentare, de unde cele mai importante legături sunt:
The Python Tutorial -- un punct perfect de pornire pentru cei ce doresc să înveţe să programeze în Python: acoperă bazele programării în Python;
Using Python -- descrie modalitatea de instalare şi utilizare a interpretorului în contextul principalelor sisteme de operare;
The Python Language Reference -- monografia limbajului Python (sintaxă şi entităţi de bază);
The Python Standard Library -- monografia librăriilor Python (practic tot ceea ce putem face cu acesta);
1.2. În română
Tutorial Python -- traducerea în română a The Python Tutorial, însă pentru versiunea 2.4.1 (mai veche).
2. Introducere
Ce este Python?
În primul rând un limbaj de programare, dar şi un mediu de execuţie.
La ce se referă sintagma de limbaj în contextul calculatoarelor? ::
- O modalitate prin care utilizatorul (nu neaparat programator) interacţionează cu o aplicaţie.
În general este vorba de un text cu o formă bine stabilită ce este înţeleasă de aplicaţie.
Ce înseamnă programarea?
- Se referă la posibilitatea de a prescrie unei aplicaţii o serie de acţiuni ce trebuie întreprinse.
De regulă programarea poate fi:
temporară (după restartarea aplicaţiei prescrierea se pierde),
sau permanentă;
Limbaj de programare?
- Modalitatea de prescriere a acţiunilor ce urmează să fie întreprinse de o anumită aplicaţie (sau de calculatorul însuşi).
Textul rezultat partă numele de cod sursă, sau mai simplu program.
Execuţia programului?
Aplicaţia utilizează codul sursă (descris conform regulilor din limbajul de programare), şi pune în aplicare diversele acţiuni conform prescripţiei.
Ce este un shell?
- Modalitatea prin care aplicaţiile primesc codul sursă diferă, însă majoritatea se încadrează în două cazuri:
fie necesită codul sursă sub forma unui fişier,
- ori interacţiunea cu utilizatorul are loc sub forma unui dialog.
Aplicaţiile care se încadrează în a doua categorie poartă denumirea generică de shell (scoică). (Python se încadrează în ambele categorii.)
3. Dialogarea cu Python
3.1. Pornirea shell-ului
Atât pentru Windows cât şi pentru Linux putem utiliza IDLE (An Integrated DeveLopment Environment for Python). Acesta este accesibil din meniurile ambelor sisteme de operare.
(De asemenea sub Linux putem utiliza şi shell-ul implicit al Python-ului python, sau ipython.)
Odată pornit, Python ne informează în legătură cu versiunea curentă, şi ne întâmpină cu un prompt (secvenţă de caractere ce ne indică că aplicaţia aşteaptă comenzi de la utilizator):
#Python 2.6 ... >>>
3.2. "Calculatorul de buzunar"
Deşi avem în faţă o aplicaţie complexă şi puternică, putem totuşi să o utilizăm şi ca un calculator de birou.
Totuşi înainte de a continua trebuie aduse câteva observaţii:
în cazul în care face Copy/Paste la exemplele de mai jos, trebuie avut în vedere că utilizatorul nu trebuie să introducă caracterele >>>, ci doar ce urmează după ele;
în general toate shell-urile poartă un dialog cu utilizatorul, iar acesta se desfăşoară astfel:
shell-ul afişează un prompt (în cazul Python acesta este >>>);
utilizatoru introduce textul (conform cu limbajul de programare agreat de aplicaţie), urmat apoi de tasta Enter.
shell-ul încearcă să descifreze limbajul, iar în cazul în care a înţeles ce are de executat, acesta trece la punerea în aplicare a operaţiilor;
în urma execuţiei shell-ul afişează rezultatul operaţiei; (nu este întotdeauna cazul;)
Operaţii simple:
>>> 1 + 2 3 >>> 2 * 3 + 4 10 >>> 2 ** 3 8
Operaţii cu paranteze:
>>> (1 + 2) * 3 9
Operaţii cu numere complexe:
>>> 3j ** 2 (-9+0j) >>> (2 + 3j) ** 2 (-5+12j)
3.3. Tipuri de numere
întregi: 1, 259, -874;
- reale:
în format zecimal: 0.0, -895.059;
în format ingineresc: 1.7e+5, -59.7e-80;
- complexe:
numai parte imaginară: 7j, -9.8884j, 5.9e200j);
numai parte reală: (3+0j), (-2.75+0j;
atât parte reală cât şi imaginară: (15+20j);
3.4. Operatorii aritmetici
+, - -- adunare, scădere;
* -- înmulţire;
/ -- împărţire, însă:
dacă se împart două numere întregi are loc împărţire întreagă: 3 / 2 => 1, 1 / 2 => 0;
în toate celelalte cazuri are loc împărţirea exactă: 3 / 2.0 => 0.5, 1.0 / 2 => 0.5;
% -- restul împărţirii, însă:
se poate utiliza şi pentru numere reale: 0.7 % 0.3 => 0.09999...
** -- ridicare la putere;
3.5. Funcţii aritmetice
abs -- valoarea modulul a unui număr:
>>> abs(5) 5 >>> abs(-1) 1 >>> abs(-9.72) 9.72 >>> abs(1+3j) 3.162
min, max:
>>> min(5,9) 5 >>> max(5,9) 9
round -- rotunjire:
>>> round(5.6) 6 >>> round(5.5) 6 >>> round(5.1) 5 >>> round(-1.5) 2
int -- trunchiere:
>>> int(5.5) 5 >>> int(-1.5) -1
3.6. Variabile
Spre deosebire de alte limbaje de programare, în Python nu este nevoie de a declararea variabilelor, acestea fiind definite automat în momentul iniţializării.
>>> pi = 3.14 >>> raza = 7 >>> perimetru = 2 * pi * raza >>> perimetru 43.96 >>> arie = pi * raza ** 2 >>> arie 153.86
3.7. Alte funcţii matematice
In modulul matematic se pot găsi de asemenea alte funcţii folositoare (consultaţi documentaţia pentru o listă completă).
Importul funcţiilor:
# dacă avem nevoie de sqrt from math import sqrt # sau dacă avem nevoie de funcţiile trigonometrice from math import sin, cos, tan
Utilizarea funcţiilor:
r = sqrt (90)
4. Programarea în Python
4.1. Editarea codului sursă
Pentru IDLE: File -> New Window (Control-N) sau File -> Open... (Control-O).
Pentru Linux în linia de comandă: nano <calea-fisierului>.
(Extensia fişierelor Python este .py.)
4.2. Executarea codului sursă
Pentru IDLE: Run -> Run Module (F5.
Pentru Linux în linia de comandă: python <calea-fisierului>.
4.3. Comentarii
Syntaxă generală:
z = x + y # după caracterul # urmează un comentariu până la sfârşitul liniei # w = x * y -- toată linia este un comentariu, variabila w nu va fi initializată
5. Afişarea la consolă
Syntaxa generală:
print print valoare_1, valoare_2, ..., valoare_n
Exemple:
>>> x = 1 >>> print "a =", x a = 1 >>> print "a =", "x" a = x >>> print >>> print 5 5
6. Structuri de control
6.1. Structura decizională
De asemenea spre deosebire de alte limbaje de programare, în Python indentarea corectă (spaţiile de la începutul liniilor) este obligatorie. Este recomandată utilizarea a 4 spaţii pentru fiecare nivel, sau a unui singur tabulator (per nivel). Nu este recomandată combinarea celor două stiluri.
Sintaxa generală:
if conditie : operatie ... else : operatie ...
Sintaxa în lipsa clauzei else:
if conditie : operatie ...
Sintaxa pentru condiţii multiple:
if conditie_1 : operatie ... elif conditie_2 : operatie ... ... else : operatie ...
6.1.1. Exemple
Determinarea dacă un număr este par:
x = 5 if x % 2 == 0 : print "par" else : print "impar"
Simularea funcţiei abs:
x = -5 if x < 0 : x = 0 - x print x
6.2. Structura iterativă
Iteraţia pe un interval:
for i in range(min, max + 1) : operatie ...
Iteraţia pe un interval cu un pas:
for i in range(min, max + 1, step) : operatie ...
Iteraţia pe o listă:
for i in [element_1, element_2, ..., element_n] : operatie ...
6.2.1. Exemple
Suma numerelor de la 1 la 100 :
suma = 0 for i in range(1, 101) : suma = suma + 1 print suma
Afişarea elementelor dintr-o listă:
lista = ["a", "b", "c"] for e in lista : print e
6.3. Structura repetitivă
Sintaxă generală:
while conditie : operatie ...
6.3.1. Exemple
Suma numerelor de la 1 la 100 :
suma = 0 i = 1 while i <= 100 : suma = suma + i i = i + 1 print suma
7. Lists
Crearea listelor:
# crearea unei liste cu anumite elemente l = [1, 2, 3] print l # crearea unei liste de o anumită lungime, toate elementele fiind iniţializate cu aceeaşi valoare l = [0] * 10 print l # rezultat: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] print len(l) # rezultat: 10, lungimea listei
Introducerea listelor:
l=input("l=") # şi introducem [1,2,3] print l
Accesarea şi modificarea elementelor unei liste:
l = [1, 2, 3] print l[0] print l[1] print l[2] l[1] = 3 l[2] = 2 print l # rezultat: [1, 3, 2]
Adăugarea unui element la capătul unei liste:
l = [] l.append (1) l.append (2) print l # rezultat: [1, 2]
Inversarea unei liste:
l = [1, 2, 3] l.reverse () print l # rezultat: [3, 2, 1]
8. Funcţii
Sintaxă generică:
def nume (argument_1, argument_2, ...) : operatie ... return valoare
Exemplu (determinarea cifrelor unui număr):
def digits (n) : dl = [] while n > 0 : d = n % 10 n = n / 10 dl.append (d) dl.reverse () return dl print digits (1234) # rezultat: [1, 2, 3, 4]
9. Probleme
9.1. Conversii
- Să se scrie un program de conversie a unui unghi din radiani în grade.
- Să se scrie un program de conversie a unui unghi exprimat în grade din forma zecimală, în componentele: grade (întregi), minute, secunde, zecimi şi sutimi de secundă.
9.2. Structuri decizionale
- Un punct în plan este dat prin coordonatele sale x şi y. Să se scrie un program care determină dacă punctul este în origine, în cadranele numerotate de la 1 la 4 (în sensul invers acelor de ceasornic), sau pe graniţa dintre aceste cadrane.
- Se consideră o sferă precizată prin coordonatele centrului şi raza. Dându-se un punct arbitrar în spaţiu, să se determine poziţia sa relativă faţă de sferă (în interior, pe suprafaţă, sau în exterior).
- Să se scrie un program care determină greutatea corporală ideală a unei persoane, cunoscându-se talia persoanei respective, vârsta şi sexul acesteia. Formulele de calcul sunt:
latex error! exitcode was 2 (signal 0), transscript follows:
latex error! exitcode was 2 (signal 0), transscript follows:
- Cunoscând data curentă exprimată prin trei numere întregi (an, lună, zi), calculaţi câte ore s-au scurs de la începutul anului, şi câte ore au mai rămas până la sfârşitul anului. (Se consideră că luna februarie are 28 de zile.)
- Cunoscând data curentă exprimată prin trei numere întregi (an, lună, zi), şi data de naştere a unei persoane exprimată la fel, să se scrie un program care calculează vârsta persoanei respective, ca număr de ani (exprimată în forma zecimală). (Se consideră că luna februarie are 28.25 de zile.)
9.3. Structuri iterative
- Să se scrie un program pentru determinarea celui mai mare divizor comun a două numere naturale nenule utilizând doar operaţii de scădere.
- Să se scrie un program pentru determinarea celui mai mare divizor comun a două numere naturale nenule folosind algoritmul lui Euclid.
- Să se scrie un program determină valoarea lui x la puterea n.
- Să se scrie un program care determină dacă un număr natural nenul este prim sau nu.
- Să se scrie un program care determină suma cifrelor unui număr natural dat.
- Să se scrie un program care determină primii n termeni ai şirului lui Fibonacci.
- Să se scrie un program care determină toate numerele naturale mai mici decât n şi prime cu acesta.
Se consideră următorul şir de numere naturale:
latex error! exitcode was 2 (signal 0), transscript follows:
. Să se determine procentajul de valori n aparţinând unui interval închis determinat de a şi b, pentru carelatex error! exitcode was 2 (signal 0), transscript follows:
este număr prim.- Să se scrie un program care determină toate numerele naturale perfecte care nu depăşesc un număr natural n dat.
Să se scrie un program pentru determinarea tuturor secvenţelor de numere impare succesive a căror sumă este n la puterea a 3-a. Ex:
latex error! exitcode was 2 (signal 0), transscript follows:
.- Să se scrie un program care determină descompunerea în factori primi a unui număr natural nenul dat.
- Să se scrie un program care realizează descompunerea unui număr natural par, mai mare strict ca 2, într-o sumă de două numere prime.
9.4. Probleme economice
- Considerând evoluţia unui depozit bancar cu capitalizare lunară, scrieţi un program care având ca intrări suma iniţială depusă, dobânda anuală, şi numărul de luni, determină valoarea finală a depozitului.
- Având în vedere problema de mai sus, şi luând în considerare rata anuală a inflaţiei (constantă considerată ca intrare a programului, şi aplicată la împlinirea a fiecăror 12 luni), să se calculeze câştigul net al depozitului la sfârşitul perioadei.