Een soepele opfriscursus op Python's loops

Ik hoop dat het goed gaat met de Python smooth refreshers-serie. Laat me je snel eraan herinneren dat het doel van deze serie is om je op een vloeiende manier de belangrijkste concepten te leren die je moet begrijpen om vooruit te komen in je Python-leertraject.

Herinner je je die dag dat je 10 bloemen water moest geven? Of wanneer je 20 kopjes water moest vullen? Je deed dezelfde taak op elke bloem of beker water. Zo'n herhaling wordt genoemd looping in programmeren. 

Om een ​​idee te geven van het belang van looping, zegt u dat u een programma aan het schrijven was dat dezelfde verklaring 100.000 keer zou moeten afdrukken. Zou je deze verklaring 100.000 keer durven herhalen, manueel ?! Ik zal niet, en ik denk dat je dat ook niet zult doen. Ik weet zeker dat je veel belangrijkere dingen te doen hebt. Hier komt dus de schoonheid van het lussen.

Zonder verder oponthoud, laten we de Python manier van lussen zien.

Herhalingslus

In dit type iteratie, zolang als test is aan het evalueren waar, de verklaring of het blok van verklaringen blijft uitvoeren. Zo blijft de controle behouden looping terug naar het begin van de instructie (d.w.z. test), en zal de controle afhandelen naar de volgende verklaring (en) als de test evalueert vals. Als de test altijd evalueert naar waar, in dit geval is wat we hebben een oneindige lus.

De algemene syntaxis voor de while-statement is heel eenvoudig en ziet er als volgt uit:

while test: # loop test statements # loop body

Denk aan de oneindige lus die ik al een tijdje geleden noemde? Dat wil zeggen, de lus die nooit stopt omdat de test altijd waar is? Laten we een voorbeeld van een dergelijke lus bekijken:

while 1: print 'Ik ben een oneindige lus. Ctrl-C om me te stoppen! '

De waarde 1 is een andere vorm van de booleaanse waarde waar. Dus als je schrijft terwijl het waar is, dit komt overeen met de while-statement in het voorbeeld. Zoals u zult merken, blijft u de afdrukinstructies oneindig laten weergeven. 

Klik gewoon op om de lus te beëindigen Besturing C op je toetsenbord. De onderstaande figuur laat zien hoe het programma oneindig liep en werd onderbroken door het toetsenbord (dat wil zeggen Control-C).

Laten we nu onze 10 prachtige bloemen water geven met Python. Dit kan als volgt worden gedaan:

bloemen = 1 terwijl bloemen <= 10: print 'Water the flower # ' + str(flowers) flowers = flowers + 1 

Het resultaat van het programma kan in de volgende afbeelding worden weergegeven:

Laat me, voordat ik verder ga, enkele punten verduidelijken in het bovenstaande Python-script. Je vraagt ​​je misschien af ​​wat str () is en waarom we het hier hebben gebruikt. Gebaseerd op de documentatie:

Retourneer een tekenreeks met een mooi afdrukbare weergave van een object. Voor strings retourneert dit de tekenreeks zelf. Het verschil met repr (object) is dat str (object) probeert niet altijd een tekenreeks terug te geven die acceptabel is eval (); het doel is om een ​​afdrukbare tekenreeks terug te sturen. Als er geen argument wordt gegeven, wordt de lege tekenreeks geretourneerd, ".

Met andere woorden, str () retourneert een afdrukbare tekenreeksrepresentatie van het object. Maar waarom? Laten we eens kijken wat Python zou klagen als we het niet zouden gebruiken str ():

Traceback (meest recente oproep laatste): bestand 'test.py', regel 3, in  print 'Water the flower #' + flowers TypeError: kan 'str' en 'int' objecten niet aaneenschakelen

Dus het probleem is dat een str kan niet worden samengevoegd met int

Het andere punt dat ik wil noemen, is het gebruik van bloemen = bloemen + 1. Als we een dergelijke verklaring niet zouden gebruiken, zouden we een oneindige lus hebben waar de waarde van bloemen zou blijven 1, en dus altijd minder dan 10 (altijd waar).

For loop

De for loop is een iteratie die door de items van een geordende volgorde zoals lijsten, woordenboeksleutels, tuples, strings, enz.

De Python for loop syntaxis ziet er als volgt uit:

voor var op volgorde: verklaring (en)

Waar var zal de items van de reeks (d.w.z. lijst, tuple) houden die de for loop zal itereren, zodat de for loop body wordt uitgevoerd voor elk item in de reeks.

Tijd voor enkele voorbeelden op de for loop!

languages ​​= ['Arabic', 'English', 'French', 'Spanish'] counter = 0 for lang in languages: print 'Deze taal staat in de lijst:' + languages ​​[counter] counter = counter + 1

Wat gebeurt er als we initialiseren teller = 1? In dit geval krijgt u de onderstaande foutmelding omdat op een bepaald moment in de lus de index buiten het lijstbereik valt:

Traceback (meest recente oproep laatste): bestand 'test.py', regel 4, in  print 'Deze taal staat in de lijst:' + talen [teller] IndexError: lijst index buiten bereik

Een kleine quiz. Wat zou de uitvoer van de volgende lus zijn? (hint: onthoud dat Python begint vanaf te tellen 0):

voor x binnen het bereik (1,5): print x 

Verklaringen gebruikt in while en for loops

De subsecties hieronder tonen enkele uitspraken die vaak binnen lussen worden gebruikt.

breken

De verklaring breken zorgt ervoor dat de lus wordt beëindigd en de uitvoering van het programma wordt voortgezet in de volgende instructie.

Een voorbeeld van gebruik breken wordt hieronder getoond. Het laat zien hoe het programma stopt (breken) de lus wanneer de if-statement evalueert naar waar.

getallen = [1,2,3,4,5,6,7,8,9,10] waarde = 1 terwijl de waarde in cijfers is: if value == 5: break print 'I \' m # '+ str (value ) waarde = waarde + 1 print 'Sorry, ik moest de lus afsluiten toen de waarde 5 werd'

doorgaan met

Deze instructie stuurt de controle terug naar het begin van de lus en negeert eventuele uitspraken in de lus die daarna komt. Laten we het volgende voorbeeld eens bekijken:

getallen = [1,2,3,4,5,6,7,8,9,10] waarde = 1 terwijl waarde in cijfers: als waarde < 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') 

Heb je erachter hoe doorgaan met werken? Wat denk je dat de uitvoer van dit Python-script zou zijn? Ga je gang, probeer het eens.

voorbij lopen

Deze verklaring is een beetje lastig. De voorbij lopen verklaring is een nul verklaring, dat is dat het niets doet. Maar waarom gebruiken we het? Stel dat u een programma aan het schrijven was, en op een gegeven moment wist u niet zeker wat er in het programma moest gaan for-statement bijvoorbeeld, als volgt:

getallen = [1,2,3,4,5,6,7,8,9,10] waarde = 1 voor waarde in getallen: # niet zeker wat hier te doen, print nog ('Ik heb de laatste verklaring bereikt in de programma en moet afsluiten ') 

Als u het programma probeert uit te voeren, krijgt u de volgende foutmelding:

Bestand "test.py", regel 6 print ('Ik heb de laatste verklaring in het programma bereikt en moet afsluiten') ^ IndentationError: verwacht een ingesprongen blok

Dus klaagt Python dat er een verklaring moet zijn binnenin de for loop. Als je typt voorbij lopen in de for loop, de uitvoer van het programma zal zijn:

Ik heb de laatste verklaring in het programma bereikt en moet afsluiten

Hieruit kunnen we concluderen voorbij lopen fungeert als een tijdelijke aanduiding om het programma uit te voeren, zelfs als u nog niet hebt besloten welke vereiste verklaring (en) op een plaats van de code moet gaan.

anders

De anders Deze verklaring spreekt voor zich en bevat eenvoudigweg een blok met instructies die moeten worden uitgevoerd wanneer de lus op een normale manier wordt afgesloten, en niet door een breken. Een voorbeeld van het gebruik ervan is als volgt:

getallen = [1,2,3] waarde = 1 terwijl waarde in cijfers: print 'I \' m # '+ str (waarde) waarde = waarde + 1 anders: print' Ik maak deel uit van het else statement-blok ' print 'Ik maak ook deel uit van het else statement-blok' 

Conclusie

Om dit artikel af te sluiten en me het belang van looping voor te stellen, herinner ik me toen ik die beeldanalyseoperaties moest uitvoeren elke pixel van een afbeelding. 

Dit doen op een afbeelding met formaat 256x256 betekent alleen dat ik de bewerkingen 65.536 keer moest herhalen (dit is het aantal pixels)! Looping om te redden!