while-lus in Python. Hoe het werkt, voorbeelden van gebruik

Loops zijn een van de belangrijkste hulpmiddelen van elke taal. Er zijn twee basislussen in Python, waarvan er een while is. Overweeg het, en ook voor een beter begrip van het beeld, nog een. Inderdaad, in vergelijking met iets soortgelijks, is het veel gemakkelijker om welk materiaal dan ook te begrijpen, nietwaar?

Het concept van een cyclus

Een lus is nodig wanneer een bepaalde actie meerdere keren moet worden uitgevoerd. Dit is erg simplistisch, omdat het toepassingsgebied van fietsen in werkelijkheid veel groter is. Er zijn twee hoofdtypen loops in Python: for en while. De meest populaire is voor.

Naast specifieke acties, kun je verschillende stukjes code tot een bepaald punt herhalen. Dit kan een bepaald aantal keren zijn, of zolang een bepaalde voorwaarde waar is.

Voordat we de soorten lussen beginnen te begrijpen, en vooral, moeten we nog steeds begrijpen wat iteratie is. Dit is één herhaling van een actie of reeks acties tijdens de huidige cyclus binnen de huidige toepassingsrun.

Cyclus Voor

Onze For-lus is geen teller, zoals in veel andere talen. Het is zijn taak om een ​​bepaalde reeks waarden op te sommen. Wat betekent dit? Laten we zeggen dat we een lijst met elementen hebben. Ten eerste neemt de lus de eerste, tweede, derde, enzovoort.

Het voordeel van deze lus in Python is dat je de index van het element niet hoeft te bepalen om te weten wanneer je de lus moet verlaten. Alles zal automatisch gebeuren.

>>> spisok = [10, 40, 20, 30]

>>> voor element in spisok:

… print(element + 2)

...

12

42

22

32

In ons voorbeeld hebben we de variabele element na het for-commando. Over het algemeen kan de naam van alles zijn. Een populaire aanduiding is bijvoorbeeld i. En bij elke iteratie krijgt deze variabele een specifiek object uit de lijst toegewezen, dat we het juiste woord hebben genoemd.

In ons geval is de lijst een reeks getallen 10,40,20,30. Bij elke iteratie verschijnt de corresponderende waarde in de variabele. Zodra de lus bijvoorbeeld begint, wordt de variabele element de waarde 10 wordt toegekend. Bij de volgende iteratie verandert de tien in het getal 40, de derde keer verandert het in het getal 20, en ten slotte, bij de laatste iteratie van de lus, verandert het in 30.

Het signaal voor het einde van de cyclus is het einde van de elementen in de lijst.

Als je de lus nodig hebt om een ​​klassieke opsomming van waarden uit te voeren, zoals in andere programmeertalen, moet je een lijst maken met een reeks natuurlijke getallen tot aan de waarde die we nodig hebben.

>>> spisok = [1,2,3,4,5]

Of gebruik de functie lenen(), om de lengte van de lijst te bepalen. Maar in dit geval is het beter om een ​​lus te gebruiken terwijl, omdat het niet nodig is om een ​​variabele te gebruiken.

Als u de reeks waarden in de lijst wilt wijzigen, lus For en hier komt te hulp. Om dit te doen, moet bij elke iteratie aan elk element van de lijst een passende waarde worden toegewezen.

Herhalingslus

In tegenstelling tot de cyclus For, die eenvoudig de waarden van de reeks herhaalt, de lus en heeft meer toepassingen. De naam van dit type cycli wordt vertaald als "nog". Dat wil zeggen, "tot".

Dit is een universele lus die in alle programmeertalen voorkomt. En in sommige opzichten lijkt het op een voorwaardelijke operator taxus, die een controle uitvoert om te zien of aan een bepaalde voorwaarde is voldaan. Alleen in tegenstelling tot de voorwaardelijke operator, en voert de controle bij elke iteratie uit, niet slechts één keer. En alleen als de voorwaarde onwaar is, eindigt de lus en wordt het commando dat erop volgt uitgevoerd. Simpel gezegd, als de situatie waarin hij werkt niet meer geldt.

Als we een cyclus tekenen en simplistisch wordt dit gedaan met behulp van een dergelijk schema.while-lus in Python. Hoe het werkt, voorbeelden van gebruik

De hoofdtak van het programma (die buiten de lus loopt) wordt in deze figuur weergegeven met blauwe rechthoeken. Turkoois vertegenwoordigt het lichaam van de cyclus. Een ruit is op zijn beurt een voorwaarde die bij elke iteratie wordt gecontroleerd.

Cyclus en kan twee uitzonderingen opleveren:

  1. Als aan het begin van de lus de logische expressie niet waar retourneert, begint deze eenvoudigweg niet, nadat deze is voltooid vóór uitvoering. Over het algemeen is deze situatie normaal, omdat de toepassing onder bepaalde omstandigheden mogelijk niet voorziet in de aanwezigheid van expressies in de loop-body.
  2. Als de expressie altijd waar is, kan dit leiden tot een lus. Dat wil zeggen, tot het eindeloos scrollen van de cyclus. Daarom moet er in dergelijke programma's altijd een exit-instructie van de lus of het programma zijn. Deze situatie zal zich echter voordoen als het programma de waarheid of onwaarheid van een bepaalde aandoening heeft kunnen vaststellen. Als ze dit niet heeft gedaan, wordt er een fout geretourneerd met de beëindiging van het programma. Of u kunt de fout afhandelen en dan, als deze zich voordoet, wordt bepaalde code uitgevoerd.

Er kan een enorm aantal opties zijn om met een fout om te gaan. Het programma kan de gebruiker bijvoorbeeld vragen om gegevens correct in te voeren. Dus als een persoon een negatief getal heeft aangegeven waar het alleen positief kan zijn, of letters heeft ingevoerd waar alleen cijfers moeten staan, kan het programma hierover vertellen.

While Loop-voorbeelden

Hier is een voorbeeld van code die in dit geval een fout afhandelt.

n = input(“Voer een geheel getal in: “) 

terwijl type(n) != int:

    Probeer het volgende:

        n = int(n)

    behalve ValueError:

        print(“Verkeerde invoer!”)

        n = input(“Voer een geheel getal in: “) 

als n % 2 == 0:

    afdrukken ("Even")

anders:

    print(“Oneven”)

Houd er rekening mee dat Python dubbele punten gebruikt om complexe codeconstructies te declareren.

In de bovenstaande code hebben we als voorwaarde gedefinieerd dat we moeten controleren of het getal een geheel getal is. Zo ja, dan wordt false geretourneerd. Zo niet, dan waar.

In het tweede deel van de code, waar de operator wordt gebruikt if, hebben we de %-operator gebruikt om de rest te vinden na de delingsbewerking. De volgende stap is om te controleren of het getal even is. Zo niet, dan is de rest in dit geval één. Dienovereenkomstig is het aantal oneven. 

In eenvoudige bewoordingen controleert de bovenstaande code eerst of de door de gebruiker ingevoerde tekenreeks een getal is. Zo ja, dan wordt een tweede controle uitgevoerd om te zien of er een rest is van de deling door twee. Maar het tweede blok wordt pas uitgevoerd als de door de gebruiker ingevoerde waarde numeriek is.

Dat wil zeggen dat de lus regelmatig wordt uitgevoerd totdat de voorwaarde optreedt. In deze situatie werkt het als volgt. 

Dat wil zeggen, je kunt het tegenovergestelde doen: een bepaalde actie herhalen totdat de gebeurtenis onwaar wordt.

Code-parsing

Laten we nu in meer detail bekijken hoe deze code werkt. Om dit te doen, zullen we het stap voor stap analyseren.

  1. Eerst voert de gebruiker een string in, die wordt geaccepteerd door de variabele n. 
  2. Een lus gebruiken en het type van deze variabele wordt gecontroleerd. Bij de eerste invoer is het niet gelijk int. Daarom blijkt uit de test dat deze voorwaarde waar is. Daarom wordt het luslichaam ingevoerd.
  3. Met de hulp van een operator proberen we proberen een string om te zetten in een getal. Als dit wordt gedaan, treedt er geen fout op. Dienovereenkomstig is het niet nodig om het te verwerken. Daarom keert de interpreter terug naar het begin van de lus en volgens de resultaten van de controle blijkt dat het een geheel getal is geworden. Dus laten we naar stap 7 gaan
  4. Als de conversie niet is gelukt, wordt een ValueError gegenereerd. In dit geval wordt de programmastroom naar de behalve-handler verzonden.
  5. De gebruiker voert een nieuwe waarde in, die wordt toegewezen aan de variabele n.
  6. De tolk keert terug naar stap 2 en controleert opnieuw. Als het een geheel getal is, gaat u naar stap 7. Zo niet, dan wordt de conversie opnieuw geprobeerd volgens stap 3.
  7. Met de hulp van een operator if Bepaalt of er een rest is na het delen van een getal door 2. 
  8. Als dit niet het geval is, wordt de tekst "even" geretourneerd.
  9. Als dit niet het geval is, wordt de tekst "oneven" geretourneerd.

Beschouw nu eens zo'n voorbeeld. Probeer te bepalen hoe vaak deze cyclus zal doorlopen?

totaal = 100 

i = 0

terwijl ik < 5:

    n = int(invoer())

    totaal = totaal — n

    i = i + 1 

print(“Overige”, totaal)

Het juiste antwoord is 5. Aanvankelijk is de waarde van de variabele i - nul. De interpreter controleert of de variabele gelijk is i 4 of minder. Zo ja, dan wordt de waarde geretourneerd. waar, en de lus wordt dienovereenkomstig uitgevoerd. De waarde wordt met één verhoogd.

Na de eerste iteratie wordt de waarde van de variabele 1. Er wordt een controle uitgevoerd en het programma begrijpt dat dit aantal weer kleiner is dan 5. Dienovereenkomstig wordt de lusbody voor de tweede keer uitgevoerd. Omdat de stappen vergelijkbaar zijn, wordt de waarde ook met één verhoogd en is de variabele nu gelijk aan 2.

Deze waarde is ook minder dan vijf. Vervolgens wordt de lus voor de derde keer uitgevoerd, toegevoegd aan de variabele i 1 en krijgt de waarde 3. Dit is weer minder dan vijf. En zo komt het tot de zesde iteratie van de lus, waarbij de waarde van de variabele i is gelijk aan 5 (het was immers oorspronkelijk nul, voor zover we ons herinneren). Dienovereenkomstig doorstaat deze voorwaarde de test niet en wordt de lus automatisch beëindigd en wordt de overgang naar de volgende stap, die daarbuiten valt (of programmabeëindiging, als de volgende stappen niet zijn voorzien), uitgevoerd.

De cyclus kan ook in de tegenovergestelde richting plaatsvinden. Hier is een voorbeeld van een code waarbij bij elke volgende iteratie één wordt afgetrokken van de huidige waarde van de variabele. 

totaal = 100 

terwijl totaal > 0:

    n = int(invoer())

    totaal = totaal — n 

print ("Resource uitgeput")

Probeer te raden wat dit programma doet! Stel je voor dat in een variabele totaal informatie over de programmabron wordt opgeslagen. Elke keer controleert de tolk of de bron bestaat. Zo niet, dan wordt de tekst "Resource uitgeput" weergegeven en wordt het programma afgesloten. En bij elke iteratie van de lus neemt de bron af met het aantal dat de gebruiker opgeeft.

En nu huiswerk. Probeer de bovenstaande code te wijzigen zodat de variabele fysiek niet negatief kan worden. 

4 reacties

  1. si code ahaan usoo gudbi

Laat een reactie achter