O reîmprospătare netedă pe buclele Python

Sper că te descurci bine cu seria revigorantă netedă Python. Permiteți-mi să vă reamintesc rapid că scopul acestei serii este să vă învețe într-o manieră lină principalele concepte pe care trebuie să le înțelegeți pentru a avansa în călătoria dvs. de învățare Python.

Vă amintiți acea zi când a trebuit să ud 10 flori? Sau când a trebuit să umpleți 20 de cupe de apă? Ați făcut aceeași sarcină pe fiecare floare sau ceașcă de apă. O astfel de repetare este numită luping în programare. 

Pentru a vă da sentimentul importanței looping-ului, spuneți că scrieți un program care să imprime aceeași declarație de 100.000 de ori. Ai îndrăzni să repet această declarație de 100.000 de ori, manual ?! Nu vreau și cred că și tu nu vei face așa. Sunt sigur că aveți lucruri mult mai importante de făcut. Aici vine aici frumusețea buclării.

Fără să mai vorbim, să vedem modul Python de looping.

În timp ce buclă

În acest tip de iterație, atâta timp cât Test se evaluează la Adevărat, declarația sau blocul de declarații continuă să fie executată. Astfel, controlul păstrează luping înapoi la începutul instrucțiunii (adică test) și va gestiona controlul la următoarea declarație (declarații) în cazul în care testul evaluează fals. Dacă testul este întotdeauna evaluat la adevărat, în acest caz ceea ce avem este unul buclă infinită.

Sintaxa generală pentru instrucțiunea de timp este foarte simplă și arată după cum urmează:

în timp ce test: # declarații buclă de testare # corp buclă

Îți amintești termenul de buclă infinit pe care l-am menționat acum ceva timp? Adică, bucla care nu se oprește niciodată de la test este întotdeauna adevărată? Să vedem un exemplu de astfel de bucla:

în timp ce 1: imprimați "Eu sunt o buclă infinită. Ctrl-C să mă oprească!

Valoarea 1 este o altă formă a valorii booleene Adevărat. Astfel, dacă scrieți în timp ce este adevărat, aceasta va fi echivalentă cu declarația de timp din exemplu. După cum veți observa, veți continua să obțineți afișe de imprimare afișate infinit. 

Pentru a termina bucla, faceți clic pur și simplu Control-C pe tastatură. Figura de mai jos arată modul în care programul funcționa infinit și a fost întrerupt de tastatură (adică Control-C).

Acum, să ne aprindem cele 10 flori frumoase cu Python. Acest lucru se poate face după cum urmează:

flori = 1 în timp ce flori <= 10: print 'Water the flower # ' + str(flowers) flowers = flowers + 1 

Rezultatul programului poate fi arătat în figura următoare:

Înainte de a merge mai departe, permiteți-mi să clarific câteva puncte din scriptul Python de mai sus. S-ar putea să te întrebi ce str () este și de ce l-am folosit aici. Pe baza documentației:

Returnați un șir care conține o reprezentare frumos imprimabilă a unui obiect. Pentru șiruri de caractere, aceasta returnează șirul. Diferența cu repr (obiect) este asta str (obiect) nu întotdeauna încearcă să returneze un șir care este acceptabil pentru eval (); Scopul său este de a returna un șir printabil. Dacă nu se dă niciun argument, returnă șirul gol, ".

Cu alte cuvinte, str () va întoarce o reprezentare șir imprimabilă a obiectului. Dar de ce? Să vedem ce se va plânge Python dacă nu am fi folosit str ():

Traceback (ultimul apel ultimul): Fișierul "test.py", rândul 3, în  print 'Apă floare #' + flori TypeError: nu se pot concatena obiectele 'str' și 'int'

Deci, problema este că a str nu poate fi concatenat cu int

Celălalt punct pe care vreau să-l menționez este utilizarea lui flori = flori + 1. Dacă nu am folosi o astfel de declarație, am avea o buclă infinită unde valoarea florilor ar rămâne 1, și astfel întotdeauna mai puțin decât 10 (întotdeauna adevărat).

Pentru buclă

pentru buclă este o iterație care trece prin elementele unui secvența ordonată cum ar fi liste, chei de dicționar, tupluri, șiruri de caractere etc..

Python-ul pentru buclă sintaxa arată după cum urmează:

pentru var în secvență: declarație (s)

Unde var va păstra elementele din secvență (adică, listă, nuplu) că pentru buclă va fi iterând prin, astfel încât pentru buclă corpul va fi executat pentru fiecare element din secvență.

Timp pentru câteva exemple cu privire la pentru buclă!

limbă = ['arabă', 'engleză', 'franceză', 'spaniolă'] counter = 0 pentru lang în limbile: print '

Ce se întâmplă dacă inițializăm contra = 1? În acest caz, veți primi eroarea afișată mai jos, deoarece la un moment dat în buclă, indicele va fi în afara domeniului:

Traceback (cel mai recent apel ultimul): Fișierul "test.py", linia 4, în  print 'Această limbă se află în listă:' + limbi [counter] IndexError: index list out of range

Un test mic. Care ar fi ieșirea din următoarea buclă? (Sugestie: rețineți că Python începe să numere de la 0):

pentru x în intervalul (1,5): tipăriți x 

Declarații utilizate în timp și pentru buclă

Subsectiunile de mai jos vor arata cateva instructiuni care sunt frecvent utilizate in bucle.

pauză

Declaratia pauză determină încetarea ciclului și continuarea execuției programului pe următoarea declarație.

Un exemplu de utilizare pauză este prezentat mai jos. Afișează modul în care programul se oprește (pauză) bucla atunci când în cazul în care-declarație evaluează pentru Adevărat.

numere = [1,2,3,4,5,6,7,8,9,10] valoare = 1 în timp ce valoarea în cifre: if value == 5: break print 'I \' m # '+ str ) value = value + 1 print 'Îmi pare rău, a trebuit să renunț la bucla când valoarea a devenit 5'

continua

Această instrucțiune readuce controlul la începutul buclei, ignorând orice afirmații din bucla care vin după aceea. Să vedem următorul exemplu:

numere = [1,2,3,4,5,6,7,8,9,10] valoare = 1 în timp ce valoarea în cifre: dacă valoare < 5: print 'I\'m # ' + str(value) value = value + 1 continue print 'I\'m in the if-condition, why are you ignoring me?!' elif value == 5: break print ('I have reached the last statement in the program and need to exit') 

Ai dat seama cum continua lucrări? Ce credeți că va fi rezultatul acestui script Python? Mergeți, încercați.

trece

Această afirmație este puțin complicată. trece declarația este a nul declarație, adică nu face nimic. Dar de ce o folosim? Să presupunem că ați scris un program și, într-un anumit moment, nu știați ce ar trebui să faceți pentru-declarație de exemplu, după cum urmează:

numere = [1,2,3,4,5,6,7,8,9,10] valoare = 1 pentru valoarea în cifre: # nu sunteți sigur ce să faceți aici, dar să tipăriți ("Am ajuns la ultima instrucțiune din program și necesitatea de a ieși ") 

Dacă încercați să executați programul, veți primi următoarea eroare:

Fișierul "test.py", linia 6 print ('Am ajuns la ultima instrucțiune din program și trebuie să ieșesc') ^ IndentationError: așteptați un bloc indentat

Prin urmare, Python se plânge că ar trebui să fie o declarație care să intre în interiorul pentru buclă. Dacă tastați trece în pentru buclă, rezultatul programului va fi:

Am ajuns la ultima declarație din program și trebuie să ieșesc

Din aceasta putem concluziona trece acționează ca un substituent pentru a permite programului să ruleze chiar dacă nu ați decis încă ce declarații necesare trebuie să meargă într-un anumit loc al codului.

altfel

altfel declarația este explicită și va conține pur și simplu un bloc de afirmații care se execută atunci când buclă iese în mod normal, și nu printr-o pauză. Un exemplu de utilizare a acestuia este după cum urmează:

numere = [1,2,3] valoare = 1 în timp ce valoarea în numere: print 'I \' m # '+ str (valoare) valoare = valoare + 1 alt: print "Sunt, de asemenea, o parte a blocului de afirmații" 

Concluzie

Pentru a încheia acest articol și pentru a ne imagina importanța looping-ului, îmi amintesc când trebuia să efectuez acele operații de analiză a imaginilor fiecare pixel a unei imagini. 

Faceți acest lucru pe o imagine cu dimensiune 256x256 înseamnă doar că a trebuit să repet operațiunile de 65.536 de ori (ceea ce reprezintă numărul de pixeli)! Înainte de salvare!

Cod