duminică, 14 aprilie 2013

Tutorial Python - Instrucţiuni de Control Flow

Instrucţiunea if

Instrucţiunea if execută o anumită porţiune de cod numai dacă este îndeplinită o condiţie. Condiţia este o expresie booleeană.
>>> x = 0
>>> if x < 0:
 print('Negativ')
elif x == 0:
 print('Neutru')
elif x == 1:
 print('Unitate')
else:
 print('Pozitiv mai mare ca 1')

 
Neutru
Python foloseşte indentarea (alineatul) pentru a delimita blocurile de cod.
Instrucţiunile din blocul if se scriu cu 4 spaţii mai interior. În exemple nu apare aşa deoarece Python inserează TAB-uri în loc de spaţii, iar Blogspot se pare că are o problemă cu aceste TAB-uri.
În exemplu am o singură instrucţiune sub if, print('Negativ'). Nu trebuie să număraţi spaţiile deoarece Python indentează automat când apăsaţi ENTER după cele două puncte (:).
Instrucţiunea elif este o prescurtare de la else if.
Instrucţiunile elif şi else sunt opţionale. else apare întotdeauna ultima.
Semnificaţia este următoarea: Dacă condiţia de la if este adevărată se execută instrucţiunile din blocul if, altfel se trece la ramura următoare, else sau elif, şi se reia procesul.
După ce aţi terminat de scris o instrucţiune if în IDLE, apăsaţi de două ori ENTER ca s-o executaţi.

Instrucţiunile for şi while

Instrucţiunea for este folosită pentru a parcurge o secvenţă de numere (progresie aritmetică) sau pentru a parcurge elementele unei colecţii (liste, stringuri, seturi, etc.).
>>> txt = 'tutorialeplusplus'
>>> for ch in txt:
 print(ch, end=' ')

 
t u t o r i a l e p l u s p l u s 
end=' ' înseamnă că fiecare afişare este despărţită de spaţiu (implicit este end='\n').
Iată un exemplu cu for şi if.
>>> for ch in txt:
 if ord(ch) > ord('e'):
  print(ch, end=' ')
 else:
  print(ch.upper(), end=' ')

  
t u t o r i A l E p l u s p l u s 
Un exemplu cu o progresie aritmetică generată de funcţia range.
>>> for i in range(5):
 print(i)

 
0
1
2
3
4
Funcţia (de fapt este o clasă...dar voi ajunge şi acolo) range ia trei parametri (ultimul fiind opţional): start, stop, step (step [pas] semnifică raţia progresiei) SAU ia un singur parametru (ca-n exemplu) stop (start=0 şi step=1).
>>> for nr in range(10, 0, -1):
 print(nr, end=' ')

 
10 9 8 7 6 5 4 3 2 1 
Parcurgerea progresiilor aritmetice cu range este mult mai eficientă decât echivalentul în while.
>>> mylist = ['a', 1, True, 'b', 0]
>>> ln = len(mylist)
>>> for i in range(ln):
 print(mylist[i])

 
a
1
True
b
0
Instrucţiunea while repetă o porţiune de cod cât timp condiţia este adevărată.
>>> q = 1
>>> while q < 10:
 print(q)
 q += 1 # q = q + 1

 
1
2
3
4
5
6
7
8
9
Şi un alt exemplu, în care creez o listă pornind de la un string şi afişez acel string invers:
>>> st = list('stiva')
>>> while len(st) > 0:
 print(st.pop(), end='')

 
avits
Nu uitaţi că funcţia pop returnează şi apoi elimină elementul de la sfârşitul listei.

Instrucţiunile break, continue şi else pentru loopuri

Un loop (buclă) reprezintă o structură repetitivă (for sau while).
Instrucţiunea break întrerupe execuţia unui loop.
>>> for i in range(10):
 if i == 5:
  break
 print(i)

 
0
1
2
3
4
Instrucţiunea continue ignoră restul codului din loop şi continuă cu următoarea iteraţie.
>>> for i in range(10):
 if i == 3 or i == 5 or i == 7:
  continue
 print(i)

 
0
1
2
4
6
8
9
Instrucţiunile loop (repetitive) pot avea o ramură else care se execută atunci când loop-ul este epuizat, fie pentru că a parcurs toate elementele unei colecţii, fie condiţia a devenit falsă.
Pe scurt: Loopul NU este întrerupt cu break.
>>> for i in range(2, 10):
 for x in range(2, i):
  if i % x == 0:
   print(i, ' nu este numar prim')
   break
 else:
  # Dupa epuizarea forului se executa else
  print(i, ' este numar prim')

  
2  este numar prim
3  este numar prim
4  nu este numar prim
5  este numar prim
6  nu este numar prim
7  este numar prim
8  nu este numar prim
9  nu este numar prim
Atenţie! Acest else este asociat cu un for nu cu if.
Priviţi ce s-ar fi afişat fără else.
>>> for i in range(2, 10):
 for x in range(2, i):
  if i % x == 0:
   print(i, ' nu este numar prim')
   break
 # Aceasta instructiune se va executa de fiecare data
 print(i, ' este numar prim')

 
2  este numar prim
3  este numar prim
4  nu este numar prim
4  este numar prim
5  este numar prim
6  nu este numar prim
6  este numar prim
7  este numar prim
8  nu este numar prim
8  este numar prim
9  nu este numar prim
9  este numar prim
Deci, pentru structurile repetitive, else se execută numai când loopul se termină normal, fără întrerupere cu break.

Instrucţiunea pass

Instrucţiunea pass nu face nimic. Este instrucţiunea vidă.
Se foloseşte acolo unde se cere o instrucţiune din punct de vedere sintactic, dar nu este nevoie de una.
Exemplu, while infinit.
>>> while True:
 pass # Apasati Ctrl+C ca sa opriti executia
Mai multe informaţii:
>>> help('for')
>>> help('while')

Acum ar trebui să fiţi în stare să scrieţi programe (scripturi) simple.
Scrieţi în Python Shell un program care calculează suma primilor 20 de termeni ai şirului lui Fibonacci.
Primii doi termeni sunt 1, iar umătorii se calculează conform formulei

fib_n = fib_n-1 + fib_n-2
Vezi rezultatul.
Vezi soluţia.

Niciun comentariu:

Trimiteți un comentariu

Rețineți: Numai membrii acestui blog pot posta comentarii.