while loop Python-en. Nola funtzionatzen duen, erabilera adibideak

Loops edozein hizkuntzaren tresna nagusietako bat dira. Python-en oinarrizko bi begizta daude, horietako bat while da. Kontuan izan, eta, gainera, argazkia hobeto ulertzeko, bat gehiago. Izan ere, antzeko zerbaitekin alderatuta, askoz errazagoa da edozein material ulertzea, ezta?

Ziklo baten kontzeptua

Begizta bat behar da ekintza jakin bat hainbat aldiz egin behar denean. Hau oso sinplista da, errealitatean zikloetarako aplikazioen aukera askoz zabalagoa delako. Python-en bi begizta mota nagusi daude: for eta while. Ezagunena da.

Ekintza espezifikoez gain, kode zati desberdinak puntu jakin batera lotu ditzakezu. Hau aldiz kopuru jakin bat izan daiteke, edo baldintza jakin bat egia den bitartean.

Begizta motak ulertzen hasi baino lehen eta, batez ere, iterazioa zer den ulertu behar dugu. Ekintza edo ekintza sekuentzia baten errepikapen bat da uneko zikloan uneko aplikazioaren exekuzioaren barruan.

Zikloa For

Gure For loop ez da kontagailua, beste hizkuntza askotan bezala. Bere zeregina balio-segida jakin bat zenbatzea da. Zer esan nahi du honek? Demagun elementuen zerrenda bat dugula. Lehenik eta behin, begiztak lehenengo, bigarren, hirugarren eta abar hartzen ditu.

Python-en begizta honen abantaila da ez duzula elementuaren indizea zehaztu behar begiztatik noiz irten jakiteko. Dena automatikoki egingo da.

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

>>> Spisok elementurako:

… inprimatu (elementua + 2)

...

12

42

22

32

Gure adibidean, aldagaia erabili dugu elementu for komandoaren ondoren. Oro har, izena edozein izan daiteke. Adibidez, izendapen ezagun bat i da. Eta errepikapen bakoitzean, aldagai honi zerrendako objektu zehatz bat esleituko zaio, hitz egokia deitu genion.

Gure kasuan, zerrenda 10,40,20,30 zenbakien segida bat da. Iterazio bakoitzean, dagokion balioa agertzen da aldagaian. Adibidez, begizta hasi bezain laster, aldagaia elementu 10 balioa esleitzen zaio. Hurrengo iterazioan, hamar 40 zenbakia bihurtzen da, hirugarren aldiz 20 zenbakia eta azkenik, begiztaren azken iterazioan, 30 bihurtzen da.

Zikloaren amaierako seinalea zerrendako elementuen amaiera da.

Balioen zenbaketa klasiko bat egiteko begizta behar baduzu, beste programazio-lengoaia batzuetan bezala, zenbaki naturalen sekuentzia batekin zerrenda bat sortu beharko zenuke behar dugun balioraino.

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

Edo funtzioa erabili len(), zerrendaren luzera zehazteko. Baina kasu honetan hobe da begizta bat erabiltzea bitartean, aldagairik erabili beharrik ez dagoelako.

Zerrendako balioen sekuentzia aldatu behar baduzu, begizta egiteko eta hemen dator erreskatera. Horretarako, iterazio bakoitzean, zerrendako elementu bakoitzari balio egokia eman behar zaio.

Loop bitartean

Zikloa ez bezala egiteko, sekuentziaren balioen gainean errepikatzen duena, begizta bitartean erabilera gehiago ditu. Mota honetako zikloen izena “oraindik” bezala itzultzen da. Hau da, “arte”.

Programazio-lengoaia guztietan aurkitzen den begizta unibertsala da hau. Eta nolabait baldintzazko operadore baten antza du hagina, baldintza jakin bat betetzen den ikusteko egiaztapen bat egiten duena. Baldintzazko operadorearen aldean soilik, bitartean iterazio bakoitzean egiaztapena egiten du, ez behin bakarrik. Eta baldintza faltsua bada bakarrik, begizta amaitzen da eta ondoren datorren komandoa exekutatzen da. Hitz soiletan, lan egiten duen egoerak balio ez badu.

Ziklo bat marrazten badugu bitartean sinpleki, eskema hori erabiliz egiten da.while loop Python-en. Nola funtzionatzen duen, erabilera adibideak

Programaren adar nagusia (begiztatik kanpo doana) irudi honetan laukizuzen urdinez irudikatzen da. Turkesak zikloaren gorputza adierazten du. Era berean, erronboa iterazio bakoitzean egiaztatzen den baldintza da.

Zikloa bitartean bi salbuespen eragin ditzake:

  1. Begizta hasieran adierazpen logikoa egia itzultzen ez bada, orduan ez da hasten, exekutatu baino lehen amaitu ondoren. Orokorrean, egoera hau normala da, izan ere, zenbait egoeratan, aplikazioak ez du eskaintzea begizta gorputzean esamoldeak egotea.
  2. Adierazpena beti egia bada, horrek begizta bat sor dezake. Hau da, zikloaren korritze amaigabera. Hori dela eta, horrelako programetan beti egon behar da begiztatik edo programatik irteteko adierazpena. Hala ere, egoera hau sortuko da, baldin eta programak baldintza jakin baten egia edo faltsutasuna zehazteko gai izan bada. Hau egin ez badu, errore bat itzuliko da programa amaitzean. Edo errorea kudeatu dezakezu, eta gero, gertatzen bada, kode jakin bat exekutatuko da.

Errore bat kudeatzeko aukera ugari egon daitezke. Adibidez, programak erabiltzaileari datuak behar bezala sartzeko eska diezaioke. Beraz, pertsona batek zenbaki negatibo bat adierazi badu, positiboa izan daitekeen lekuan, edo zenbakiak bakarrik egon behar diren letrak idatzi baditu, programak horren berri eman dezake.

While Loop Adibideak

Hona hemen kasu honetan errore bat kudeatzen duen kodearen adibide bat.

n = sarrera ("Idatzi zenbaki oso bat: ") 

bitartean type(n) != int:

    Saiatu:

        n = int(n)

    ValueError izan ezik:

        inprimatu ("Sarrera okerra!")

        n = sarrera ("Idatzi zenbaki oso bat: ") 

n % 2 == 0 bada:

    inprimatu ("Baita ere")

bestela:

    inprimatu ("Bakoitia")

Gogoan izan Python-ek bi puntuak erabiltzen dituela kode konplexuen eraikuntza deklaratzeko.

Goiko kodean, zenbakia zenbaki oso bat den egiaztatu beharko genukeen baldintza gisa definitu dugu. Baiezkoa bada, false itzuliko da. Ez bada, egia.

Kodearen bigarren zatian, non operadorea erabiltzen den if, % operadorea erabili dugu zatiketa eragiketaren ondoren hondarra aurkitzeko. Hurrengo urratsa zenbakia bikoitia den egiaztatzea da. Hala ez bada, gainerakoa bat da kasu honetan. Horren arabera, zenbakia bakoitia da. 

Termino sinpleetan, goiko kodeak lehenik erabiltzaileak sartutako katea zenbaki bat den egiaztatzen du. Baiezkoa bada, bigarren egiaztapen bat egiten da bi zatiketaren hondarra dagoen ikusteko. Baina bigarren blokea ez da exekutatuko erabiltzaileak sartutako balioa zenbakizkoa izan arte.

Hau da, begizta aldizka exekutatuko da baldintza gertatu arte. Egoera honetan, honela funtzionatzen du. 

Hau da, alderantziz joan zaitezke: ekintza jakin bat begiztatu gertaera faltsu bihurtu arte.

Kode-analisia

Ikus dezagun xehetasun gehiago kode honek nola funtzionatzen duen. Horretarako, pausoz pauso aztertuko dugu.

  1. Lehenik eta behin, erabiltzaileak kate bat sartzen du, n aldagaiak onartzen duena. 
  2. Begizta bat erabiliz bitartean aldagai horren mota egiaztatzen da. Lehenengo sarreran, ez da berdina int. Horregatik, probaren ondorioz, baldintza hori egiazkoa dela ikusten da. Beraz, begizta gorputza sartzen da.
  3. Operadore baten laguntzaz saiatu kate bat zenbaki bihurtzen saiatzen ari gara. Hau egiten bada, ez da errorerik gertatzen. Horren arabera, ez dago prozesatu beharrik. Hori dela eta, interpretea begiztaren hasierara itzultzen da, eta egiaztapenaren emaitzen arabera, zenbaki oso bihurtu dela ematen du. Beraz, goazen 7. urratsera
  4. Bihurketak arrakasta izan ez badu, ValueError bat botako da. Kasu honetan, programaren fluxua salbu kudeatzailera bidaltzen da.
  5. Erabiltzaileak balio berri bat sartzen du, n aldagaiari esleitzen zaiona.
  6. Interpretea 2. urratsera itzultzen da eta berriro egiaztatzen du. Balio oso bat bada, joan 7. urratsera. Hala ez bada, bihurketa berriro saiatuko da 3. urratsaren arabera.
  7. Operadore baten laguntzaz if Zenbaki bat 2z zatitu ondoren hondarra dagoen zehazten du. 
  8. Hala ez bada, “pare” testua itzultzen da.
  9. Hala ez bada, "bakoitia" testua itzultzen da.

Demagun orain horrelako adibide bat. Saiatu zehazten zenbat aldiz igaroko den ziklo hau?

guztira = 100 

i = 0

i < 5 bitartean:

    n = int (sarrera ())

    guztira = guztira — n

    i = i + 1 

inprimatu ("Gaintzen dena", guztira)

Erantzun zuzena 5 da. Hasiera batean, aldagaiaren balioa i – zero. Interpreteak aldagaia berdina den egiaztatzen du i 4 edo gutxiago. Baiezkoa bada, balioa itzultzen da. Egia, eta begizta horren arabera exekutatzen da. Balioa bat handitzen da.

Lehenengo errepikapenaren ondoren, aldagaiaren balioa 1 bihurtzen da. Egiaztapen bat egiten da, eta programak ulertzen du zenbaki hori berriro 5 baino txikiagoa dela. Horren arabera, begizta gorputza bigarren aldiz exekutatzen da. Urratsak antzekoak direnez, balioa ere bat handitzen da, eta aldagaia 2ren berdina da orain.

Balio hori ere bost baino txikiagoa da. Ondoren, begizta hirugarren aldiz exekutatzen da, aldagaiari gehituta i 1 eta 3 balioa esleitzen zaio. Hau berriro bost baino txikiagoa da. Eta, beraz, begiztaren seigarren iteraziora dator, aldagaiaren balioa i 5 berdina da (azken finean, hasiera batean zero zen, gogoratzen dugunez). Horren arabera, baldintza honek ez du proba gainditzen, eta begizta automatikoki amaitzen da eta hurrengo pausorako trantsizioa, hau da, hortik kanpo dagoena (edo programaren amaiera, hurrengo urratsak ematen ez badira) egiten da.

Zikloa kontrako norabidean ere gerta daiteke. Hona hemen kodearen adibide bat non, ondorengo iterazio bakoitzean, aldagaiaren uneko baliotik bat kentzen den. 

guztira = 100 

guztira > 0 bitartean:

    n = int (sarrera ())

    guztira = guztira — n 

print ("Baliabidea agortuta")

Saiatu programa honek zer egiten duen asmatzen! Imajinatu hori aldagai batean guztira programaren baliabideari buruzko informazioa gordetzen da. Interpretatzaileak baliabidea dagoen ala ez egiaztatzen duen bakoitzean. Hala ez bada, "Baliabidea agortuta" testua bistaratuko da eta programa ixten da. Eta begiztaren iterazio bakoitzean, baliabidea gutxitzen da erabiltzaileak zehazten duen kopuruan.

Eta orain etxeko lanak. Saiatu goiko kodea aldatzen aldagaia fisikoki negatiboa izan ez dadin. 

4 Comments

  1. si code ahaan usoo gudbi

Utzi erantzun bat