Bucle

Introducere

Ceva ce este posibil să fi observat: programele adeseori au nevoie de repetiții. Python are un concept puternic pe care îl utilizează, numit bucle (în jargon: iterații), care poate fi folosit pentru a reduce codul repetitiv! Pentru moment, încearcă acest exemplu simplu:

for name in "John", "Sam", "Jill":
    print("Hello " + name)

Este incredibil de util dacă dorim să facem ceva de mai multe ori – să spunem, să desenăm separat marginile unei forme – dar dorim să scriem acea acțiune o singură dată. Iată o altă versiune de buclă:

for i in range(10):
    print(i)

Observați cum scriem doar o linie de cod folosind i, dar ia zece valori diferite?

Funcția range(n) poate fi considerată o prescurtare pentru 0, 1, 2, ..., n-1. Dacă dorești să afli mai mult, poți folosi documentația din interpretorul Python scriind help(range). Folosește tasta q pentru a ieși din documentație.

Poți de asemenea sa treci prin elemente la alegere:

total = 0
for i in 5, 7, 11, 13:
    print(i)
    total = total + i

print(total)

Scrie acest exemplu și încearcă-l cu Python, ca să vezi dacă merge așa cum te aștepți.

Note

Este de remarcat cum mai sus, liniile de cod care sunt parte a buclei sunt cele care sunt indentate. Acesta este un concept important în Python - așa știe care linii fac parte din bucla for, și care vin după, ca parte a restului programului. Utilizează patru spații (apasând tasta TAB) pentru a indenta codul tău.

Uneori vrei să repeți o bucată de cod de mai multe ori, dar nu te interesează valoarea variabilei i; în acest caz este o bună practică să o înlocuiești cu _. Asta înseamnă că nu te interesează valoarea, sau că nu dorești să o utilizezi. Iată un exemplu simplu:

for _ in range(10):
    print("Hello!")

Poți să te întrebi sau nu despre variabila i - de ce e folosită de fiecare dată? Ei bine, semnifică “index” și este unul dintre cele mai folosite nume de variabile întâlnite în cod. Dar dacă iterezi peste altceva decât numere, asigură-te că îi dai un nume mai bun! De exemplu:

for drink in list_of_beverages:
    print("Would you like a " + drink + "?")

Este cu mult mai ușor de înțeles decât dacă am fi folosit i în loc de drink.

Desenarea unei linii întrerupte

Exercițiu

Desenează o linie întreruptă. Poți mișca țestoasa fără ca aceasta să deseneze utilizând funcția turtle.penup() (ridică penița); pentru ca aceasta să deseneze din nou, folosește turtle.pendown() (penița jos).

_images/dashed.png

Soluția

for i in range(10):
    turtle.forward(15)
    turtle.penup()
    turtle.forward(5)
    turtle.pendown()

Supliment

Poți face dungile să fie mai lungi pe măsură ce desenezi linia?

_images/dashedprogressing.png

Hint

Te-ai încurcat? Inspectează valoarea lui i la fiecare rulare a buclei:

for i in range(10):
    print(i)
    # write more code here

Poți utiliza i — numită uzual variabila index sau de iterație — pentru a obține pași din ce în ce mai mari?

Comentarii

În exemplul de mai sus, linia care începe cu # este numită un comentariu. În Python, orice urmează pe o linie după # este ignorat de calculator. Folosește comentarii pentru a explica ce face programul tău, fără a schimba modul de comportare al calculatorului. Pot fi folosite și pentru a dezactiva rapid și temporar, sau a “comenta”, linii de cod.

Comentariile pot fi puse de asemenea la sfârșitul unei linii, așa:

turtle.left(20)     # tilt our next square slightly

Pătrate mai eficiente

Exercițiu

Pătratele pe care le desenam la începutul acestui curs aveau multe linii de cod repetate. Poți scrie un program de desenare pătrate în mai puține linii de cod utilizând bucle?

Soluția

for _ in range(4):
    turtle.forward(100)
    turtle.left(90)

Supliment

Încearcă să faci bucle imbricate, punând una chiar după (înăuntrul) alteia, cu câteva comenzi de desen care aparțin amândorura. Uite cum poate arăta:

for ...:
    for ...:
        # drawing code inside the inner loop goes here
        ...
    # you can put some code here to move
    # around after!
    ...

Înlocuiește ... cu codul tău, și vezi dacă poți obține ceva drăguț sau interesant! Este în regulă să greșești!