Fundamentele programării (XI) - Python

Am arătat în episodul anterior cum putem face în așa fel încât să executăm în mod repetat instrucțiuni atâta timp cât o condiție este îndeplinită. Să considerăm acum un exemplu simplu: dorim să scriem o funcție care să afișeze toate numerele naturale cuprinse între 1 și o valoare pe care o primește ca parametru. Destul de simplu, nu? Ar fi cam așa:

Dacă privim cu atenție codul, identificăm patru componente: în linia 2 avem inițializarea unei variabile; în linia 3 avem condiția (influențată și de variabila menționată), în linia 4 avem instrucțiunea care realizează operația care dorim să fie repetată și în linia 5 avem o instrucțiune care modifică variabila pentru ca, la un moment dat, condiția să nu mai fie îndeplinită.

Acesta este un șablon atât de des întâlnit, încât limbajul Python oferă o prescurtare.

Instrucțiunea for

Folosind funcția  range(n) putem genera toate numerele întregi de la  până la n - 1. Astfel, putem afișa numerele întregi de la  1 la 10 folosind următoarea secvență:

For în for

Cum era de așteptat, în cadrul corpului buclei pot apărea orice fel de instrucțiuni, inclusiv un alt  for. Până acum am spus că este permis  if în  if (episodul IV) sau  while în  while (episodul X). Ne putem imagina că este permis și pentru alte instrucțiuni: am putea avea  do în  do, switch în  switch și, acum,  for în for. De fapt, știm că nu trebuie să ne limităm doar la un nivel de imbricare (vă mai amintiți termenul?). Și... instrucțiunile nu trebuie să fie de același fel: nimic nu ne oprește să avem  if în  while în  for în  switch în  for. Nu ar fi prea bine să ajungem să avem așa ceva fiindcă am înțelege cu greu ce se întâmplă exact în zona respectivă, dar este posibil.

Să nu credem totuși că este permis orice! De exemplu, în Python nu putem avea o funcție în interiorul altei funcții. Dar, ca de obicei, există excepții...

Dar, să revenim la  for în  for; e destul de simplu. Să scriem o funcție care afișează numerele puțin altfel; fiecare va fi reprezentat de niște steluțe, numărul acestora indicând valoarea numărului.

Dacă am apela funcția cu argumentul  10, la ieșire s-ar scrie:

Avem o singură variabilă care primește pe rând valorile generate de funcția range; spunem că ea controlează bucla respectivă.

În principiu, buclele imbricate sunt controlate de variabile diferite, chiar dacă o variabilă dintr-o buclă exterioară poate fi folosită într-una interioară. În cazul nostru, variabila  i care controlează prima buclă este utilizată în condiția celei de-a doua. Din nou, sunt excepții; putem (în teorie) să folosim aceeași variabilă pentru a controla o buclă interioară; totuși, în marea majoritate a cazurilor așa ceva nu este de dorit.

Din nou, este important domeniul de vizibilitate al variabilelor. O buclă interioară poate accesa sau modifica o variabilă declarată într-un exterioară, dar invers nu este posibil.

Va urma

În următorul episod vom vedea cum putem afecta execuția "normală" a instrucțiunilor din interiorul buclelor.