<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="lt">
	<id>https://wiki.pitonas.lt/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Monika</id>
	<title>Pitonas - Naudotojo indėlis [lt]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.pitonas.lt/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Monika"/>
	<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/Specialus:Ind%C4%97lis/Monika"/>
	<updated>2026-10-07T01:26:03Z</updated>
	<subtitle>Naudotojo indėlis</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Duomen%C5%B3_tyryba_ir_informacija&amp;diff=423</id>
		<title>Vadovėlis/Duomenų tyryba ir informacija</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Duomen%C5%B3_tyryba_ir_informacija&amp;diff=423"/>
		<updated>2023-07-27T11:21:29Z</updated>

		<summary type="html">&lt;p&gt;Monika: /* Viešai prieinami duomenys */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Pažangios funkcijos|next=Pabaiga}}&lt;br /&gt;
==Dirbtinis intelektas==&lt;br /&gt;
&lt;br /&gt;
Dirbtinis intelektas (sutrumpintai DI) - tai tam tikros rūšies kompiuterio programa, galinti atlikti užduotis, kurioms paprastai reikia žmogaus intelekto, pavyzdžiui, mokytis, spręsti problemas ir priimti sprendimus. Šios programos skirtos analizuoti duomenis, atpažinti modelius ir daryti prognozes remiantis gauta informacija.&lt;br /&gt;
&lt;br /&gt;
Vienas tau pažįstamų dirbtinio intelekto pavyzdžių yra &amp;quot;Siri&amp;quot; arba &amp;quot;Alexa&amp;quot; - balso asistentai, kurie gali suprasti tavo komandas ir atsakyti į tavo klausimus. Kitas pavyzdys - savaeigiai automobiliai, kurie, naudodami jutiklius ir algoritmus, orientuojasi keliuose ir išvengia kliūčių.&lt;br /&gt;
&lt;br /&gt;
Dirbtinis intelektas yra sparčiai auganti sritis, kuri keičia daugelį mūsų gyvenimo aspektų - nuo sveikatos priežiūros ir švietimo iki finansų ir transporto. Būdamas vidurinės mokyklos moksleivis gali susidurti su įvairiais AI pavidalais, todėl mokymasis apie jį gali padėti suprasti mūsų pasaulį formuojančią technologiją.&lt;br /&gt;
&lt;br /&gt;
Nors dirbtinis intelektas gali būti labai naudingas, yra ir tam tikrų su šia technologija susijusių pavojų ir rizikos.&lt;br /&gt;
&lt;br /&gt;
Vienas iš didžiausių su dirbtiniu intelektu susijusių rūpesčių - galimybė, kad jis gali pakeisti žmonių darbo vietas. Tobulėjant dirbtiniam intelektui, jis gali atlikti daug užduočių, kurias anksčiau atlikdavo žmonės, o tai gali lemti darbo vietų perkėlimą ir potencialiai didelį nedarbo lygį.&lt;br /&gt;
[[Vaizdas:AI padeda zmonems su kasdieniais darbais.png|miniatiūra|332x332px|AI padeda su kasdieniais darbais]]&lt;br /&gt;
&lt;br /&gt;
Kitas su dirbtiniu intelektu susijęs pavojus - galimybė jį panaudoti piktavališkais tikslais, pavyzdžiui, kibernetinėms atakoms arba autonominių ginklų kūrimui. Taip pat kyla pavojus, kad dirbtinio intelekto sistemos gali priimti neobjektyvius ar diskriminacinius sprendimus, jei jos bus apmokytos pagal neobjektyvius duomenis.&lt;br /&gt;
&lt;br /&gt;
Kitas susirūpinimą keliantis dalykas - galimybė, kad dirbtinis intelektas taps pernelyg galingas ir priims žmonėms žalingus sprendimus. Pavyzdžiui, jei dirbtinio intelekto sistemai būtų perduota valdyti ypatingos svarbos infrastruktūrą, pavyzdžiui, elektros tinklus ar transporto sistemas, dėl gedimo ar įsilaužimo galėtų būti padaryta didelė žala žmonėms ir aplinkai.&lt;br /&gt;
&lt;br /&gt;
Galiausiai kyla pavojus, kad dirbtinis intelektas gali būti naudojamas dezinformacijai skleisti arba viešajai nuomonei manipuliuoti, o tai gali turėti rimtų pasekmių demokratijai ir socialiniam stabilumui.&lt;br /&gt;
&lt;br /&gt;
Siekiant pašalinti šią riziką, svarbu, kad būtų sukurta etiška ir atsakinga praktika, susijusi su dirbtinio intelekto kūrimu ir naudojimu, įskaitant reglamentavimą, skaidrumą ir atskaitomybę.&lt;br /&gt;
&lt;br /&gt;
==Kriptografinės sistemos==&lt;br /&gt;
&lt;br /&gt;
Kriptografija - tai informacijos apsaugos praktika, kai informacija paverčiama į neįskaitomą formatą, vadinamą šifruotuoju tekstu, kad ją perskaityti galėtų tik tie, kurie turi raktą, leidžiantį ją iššifruoti atgal į pradinę formą. Kriptografijos sistemos naudojamos daugelyje programų, siekiant užtikrinti saugų ryšį ir apsaugoti slaptą informaciją.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Yra keletas kriptografijos sistemų tipų, tačiau čia pateikiamos kelios dažniausiai pasitaikančios, su kuriomis galite susidurti:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simetrinio rakto kriptografija&#039;&#039;&#039;: Šio tipo kriptografijoje vienas slaptas raktas naudojamas ir šifruojant, ir iššifruojant pranešimą. Kad būtų užtikrintas saugus ryšys, komunikuojančios šalys raktą turi laikyti paslaptyje. Vienas iš paprastesnių simetrinio kodavimo pavyzdžių - &amp;quot;Atbash&amp;quot; kodavimas, kurio esmė yra pakeisti abėcėlės raides vietomis, t.y. pirmoji raidė tampa paskutine, antroji - priešpaskutine, ir taip toliau. Pvz., žinutė &amp;quot;LABAS&amp;quot; užšifruota &amp;quot;OZYZH&amp;quot;. Atkoduojant, tiesiog reikia pakeisti raidžių vietomis atgal, ir gautume pradinę žinutę &amp;quot;LABAS&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Asimetrinio rakto kriptografija&#039;&#039;&#039;: Šis kriptografijos tipas taip pat žinomas kaip viešojo rakto kriptografija, kai pranešimams šifruoti ir dešifruoti naudojama raktų pora - viešasis ir privatusis raktas. Viešuoju raktu galima dalytis viešai, o privatusis raktas turi būti laikomas paslaptyje. Ši sistema dažniausiai naudojama saugioms internetinėms operacijoms, tokioms kaip internetinė bankininkystė ir apsipirkimas. Pavyzdžiui, norint užšifruoti pranešimą &amp;quot;LABAS&amp;quot;, reikia naudoti gavėjo viešąjį raktą, kuris gali būti naudojamas tik užšifruoti pranešimus, bet ne dekoduoti juos atgal į pradinę formą. Atkoduojant, naudojamas privatus raktas. Asimetrinis kodavimas yra sudėtingas procesas, reikalaujantis specialių žinių ir įrangos.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&#039;&#039;Hash&#039;&#039; šifravimo funkcijos&#039;&#039;&#039;: Tai matematinės funkcijos, kurios priima pranešimą ir sukuria fiksuoto dydžio simbolių eilutę, vadinamą šifravimo reikšmė (hash value). Šifravimo funkcijos dažniausiai naudojamos pranešimo vientisumui patikrinti, nes bet koks pradinio pranešimo pakeitimas lemia kitokią šifravimo reikšmę.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Skaitmeniniai parašai&#039;&#039;&#039;: Tai elektroniniai parašai, naudojami siuntėjo tapatybei patvirtinti ir pranešimo vientisumui užtikrinti. Skaitmeniniai parašai naudoja viešojo rakto kriptografiją, kad būtų sukurtas unikalus skaitmeninis parašas, kurį gavėjas gali patikrinti naudodamas siuntėjo viešąjį raktą.&lt;br /&gt;
&lt;br /&gt;
Kriptografija yra įdomi ir svarbi sritis, kuri naudojama daugelyje sričių, siekiant užtikrinti saugų bendravimą ir apsaugoti slaptą informaciją. Tikiuosi, kad tai leido tau gerai apžvelgti skirtingus kriptografijos sistemų tipus!&lt;br /&gt;
&lt;br /&gt;
==Viešai prieinami duomenys==&lt;br /&gt;
&lt;br /&gt;
Viešai prieinami duomenys yra informacija, kurią galima lengvai rasti ir naudoti be jokių apribojimų ar mokesčio. Tai yra duomenys, kurie yra viešai prieinami internete arba kitose viešose duomenų bazėse, valdžios institucijų tinklalapiuose ir kituose lengvai pasiekiamuose šaltiniuose. Pavyzdžiui, tai gali būti statistiniai duomenys apie gyventojų skaičių, mokyklų rezultatus, oro temperatūrą, populiarią muziką ir t.t.&lt;br /&gt;
&lt;br /&gt;
Automatizuotai renkami duomenys yra informacija, kuri yra surinkta naudojant kompiuterines programas ar įrankius, kad būtų galima greitai ir efektyviai gauti didelius duomenų kiekius. Tai gali būti padaryta naudojant specialias kompiuterines programas, kurios lanko internetinius tinklalapius ir išgrynina duomenis, arba pasitelkus API (programavimo sąsajas), kurios leidžia gauti tam tikrus duomenis iš kitų interneto platformų ar paslaugų.&lt;br /&gt;
&lt;br /&gt;
Pavyzdžiui, jei norėtum sužinoti, kiek daugiausiai balų buvo gauta egzaminuojantis matematiką pastaraisiais metais, galėtum tai padaryti naudodamas viešai prieinamus statistinius duomenis, pateiktus švietimo ministerijos tinklalapyje. Tačiau, jei norėtum surinkti duomenis apie populiariausius dainų atlikėjus iš skirtingų interneto tinklalapių, tai gali būti atlikta naudojant automatizuotą duomenų surinkimo įrankį ar programą.&lt;br /&gt;
&lt;br /&gt;
Viešai prieinami ir automatizuotai renkami duomenys yra naudingi moksliniams tyrimams, rašant mokyklos projektus ar atliekant statistines analizes. Svarbu prisiminti, kad naudojant duomenis, visada reikia atsižvelgti į duomenų šaltinio patikimumą ir pateikti tinkamas šaltinio nuorodas ar citatas, kad būtų galima patikrinti duomenų teisingumą ir atsekamumą.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Pažangios funkcijos|next=Pabaiga}}&lt;br /&gt;
[[Category:Python Vadovėlis]]&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Testavimas&amp;diff=401</id>
		<title>Vadovėlis/Testavimas</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Testavimas&amp;diff=401"/>
		<updated>2023-06-30T12:50:53Z</updated>

		<summary type="html">&lt;p&gt;Monika: Naujas puslapis: === Testavimas ===  Programų testavimas – tai dar vienas svarbus programavimo žingsnis. Ankstesniame skyriuje apie derinimą kalbėjome kaip ieškoti klaidų, kai programa neveikia taip, kaip turėtų. Šiame skyriuje pakalbėsime apie testavimą arba, kaip įvertinti, ar programa veikia tinkamai, ar ne.   === Unit testai ===  Nors egzistuoja įvairių testų kategorijų, unit testai yra viena dažniausiai naudojamų tarp programuotojų. Unit – išvertus iš anglų ka...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Testavimas ===&lt;br /&gt;
&lt;br /&gt;
Programų testavimas – tai dar vienas svarbus programavimo žingsnis. Ankstesniame skyriuje apie derinimą kalbėjome kaip ieškoti klaidų, kai programa neveikia taip, kaip turėtų. Šiame skyriuje pakalbėsime apie testavimą arba, kaip įvertinti, ar programa veikia tinkamai, ar ne.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit testai ===&lt;br /&gt;
&lt;br /&gt;
Nors egzistuoja įvairių testų kategorijų, unit testai yra viena dažniausiai naudojamų tarp programuotojų. Unit – išvertus iš anglų kalbos – tai vienetas. Unit testai – tai tokie testai, kurių metu izoliuotai yra tikrinamos individualios programos dalys (funkcijos, metodai, klasės). Tad pagrindinis unit testų tikslas – patikrinti, kad kiekvienas individualus komponentas veikia taip, kaip turėtų.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unit testų rašymas dažnai yra pirmasis žingsnis programų testavimo procese. Tai užtikrina kodo kokybę ir leidžia atrasti klaidas kodui dar nepasiekus galutinių vartotojų.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programuojant unit testus galima rinktis skirtingas strategijas. Testams naudojant įprastus duomenis galima patikrinti dažniausiai pasitaikančius scenarijus ir įsitikinti, kad individualios programos dalys veikia tinkamai. Kita vertus, testams galima naudoti ir ekstremalius duomenis. Tai reiškia, kad intensyviai tikriname visus galimus komponento limitus norėdami apsisaugoti nuo bet kokių įmanomų netikėtumų. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Geriausia testavimo strategija – naudoti abu testavimo metodus kartu. Patikrinti tiek programos veikimą su įprastais duomenimis, kurių tikimės, tiek su įvairiausiais ekstremaliais scenarijais. Tokiu atveju galime jaustis saugesni, kad programa veiks tinkamai. Be to, pakeitus tam tikrus programos aspektus, galima daug greičiau patikrinti, ar tai nepakenkė jau anksčiau egzistavusiam funkcionalumui.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Šiame vadovėlyje nesimokysime, kaip rašyti unit testus. Tačiau manau, kad jau dabar svarbu žinoti apie jų reikšmę ir svarbą programuotojo kelyje.&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Paie%C5%A1ka_ir_Rikiavimas&amp;diff=385</id>
		<title>Vadovėlis/Paieška ir Rikiavimas</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Paie%C5%A1ka_ir_Rikiavimas&amp;diff=385"/>
		<updated>2023-06-28T13:08:29Z</updated>

		<summary type="html">&lt;p&gt;Monika: /* Suliejimo rikiavimas (Merge sort) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Atlikęs praeito skyriaus uždavinius, jau daug žinai apie sąrašo sukūrimą ir visus bazinius sąrašo metodus. Dabar pasinaudosime įgytomis žiniomis ir susipažinsime su labai dažnai sutinkamais uždaviniais: paieška ir rikiavimas.&lt;br /&gt;
&lt;br /&gt;
= Paieška =&lt;br /&gt;
&lt;br /&gt;
Paieškos algoritmai naudojami norint rasti konkretų elementą sąraše ar duomenų masyve. Yra keletas paieškos algoritmų, tačiau parodysiu du dažniausiai naudojamus - tiesinę paiešką ir dvejetainę paiešką.&lt;br /&gt;
&lt;br /&gt;
== Tiesinė paieška ==&lt;br /&gt;
Tiesinė paieška - tai paprastas paieškos algoritmas, kuris, ieškodamas tikslinės reikšmės, peržiūri kiekvieną sąrašo elementą. Pažiūrėk į tiesinės paieškos funkcijos pavyzdį &amp;quot;Python&amp;quot; kalba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def tiesinė_paieška(sąrašas, ieškomas_žodis):&lt;br /&gt;
    for i in range(len(sąrašas)):&lt;br /&gt;
        if sąrašas[i] == ieškomas_žodis:&lt;br /&gt;
            return i&lt;br /&gt;
    return -1  # ieškomas_žodis nerastas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši funkcija priima masyvą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir tikslinę reikšmę &amp;lt;code&amp;gt;ieškomas_žodis&amp;lt;/code&amp;gt; ir grąžina tikslinės reikšmės indeksą masyve. Jei tikslinė vertė nerandama masyve, funkcija grąžina -1. Labai praprasta ir aišku.&lt;br /&gt;
&lt;br /&gt;
== Dvejetainė paieška ==&lt;br /&gt;
Kita vertus, dvejetainė paieška yra efektyvesnis paieškos algoritmas, kuris veikia tik surikiuotose masyvuose (sąrašuose). Jis veikia pakartotinai dalydamas paieškos intervalą per pusę, kol randama tikslinė reikšmė. Painu? Daug aiškiau bus pažiūrėjus šį pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def dvejetainė_paieška(sąrašas, tikslas):&lt;br /&gt;
    # išsisaugome sąrašo pirmą ir paskutinį indeksą&lt;br /&gt;
    apačia = 0&lt;br /&gt;
    viršus = len(sąrašas) - 1&lt;br /&gt;
    &lt;br /&gt;
    while apačia &amp;lt;= viršus:&lt;br /&gt;
        # atrandame vidurį pagal formulę: (pradžios indeksas + pabaigos indeksas) padalintas per pusę, be liekanos&lt;br /&gt;
        viduriukas = (apačia + viršus) // 2&lt;br /&gt;
        # patikriname, ar `viduriukas` indekse yra mūsų ieškomas tikslas, ir jį atradus grąžiname indeksą.&lt;br /&gt;
        if sąrašas[viduriukas] == tikslas:&lt;br /&gt;
            return viduriukas&lt;br /&gt;
        # jeigu ne, tai pagal tai, kurioje pusėje yra ieškomas elementas pakeičiame viršutinį arba apatinį indeksą&lt;br /&gt;
        elif sąrašas[viduriukas] &amp;lt; tikslas:&lt;br /&gt;
            apačia = viduriukas + 1&lt;br /&gt;
        else:&lt;br /&gt;
            viršus = viduriukas - 1&lt;br /&gt;
        # ir kartojame iš naujo, bet jau su nauju, per pus mažesniu rėžiu&lt;br /&gt;
    &lt;br /&gt;
    return -1  # tikslas nerastas&lt;br /&gt;
&lt;br /&gt;
sąrašas = [1,2,3,4,5,6,7,8,9,10]&lt;br /&gt;
print(dvejetainė_paieška(sąrašas, 7)) # 6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Panagrinėkim detaliai, kaip vyksta procesas. Ieškome, kur yra skaičius 7, sąraše [1,2,3,4,5,6,7,8,9,10]. Funkcijos pradžios kintamieji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 apačia = 0&lt;br /&gt;
 viršus = 9 # (ilgis 10 - 1 )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Pirmas `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 4 # (0 + 9) // 2&lt;br /&gt;
 # sąrašas[4] saugo reikšmę 5. Ne mūsų ieškomas skaičius.&lt;br /&gt;
 # kadangi tikslas yra surasti 7, tai mūsų kito ciklo metu ieškosime viršutinėje sąrašo dalyje, todėl nusistatome naują apačios reikšmę, viduriukas + 1.&lt;br /&gt;
 apačia = 5 # (4 + 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Antras `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 7 # (5 + 9) // 2&lt;br /&gt;
 # sąrašas[7] saugo reikšmę 8. Jau arčiau, bet ne dar vis ne mūsų ieškoma reikšmė 7. Nustatome šįkartą naują viršutinę reikšmę, viduriukas - 1&lt;br /&gt;
 viršus = 6 # (7 - 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Trečias `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 5 # (5 + 6) // 2&lt;br /&gt;
 # sąrašas[5] saugo reikmę 6. Vėl pro šalį. Nustatome naują apatinę reikšmę:&lt;br /&gt;
 apačia = 6 # (5 + 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ketvirtas `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 6 # (6 + 6) // 2&lt;br /&gt;
 sąrašas[6] saugo reikšmę 7. Valio! Radom. Grąžinam indeksą 7.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad dvejetainės paieškos algoritmas atrado reikšmę per 4 ciklus. Kaip manai, kiek ciklų prireiktų tiesinės paieškos algoritmui? Pasufleruosiu... Daugiau :)&lt;br /&gt;
&lt;br /&gt;
= Rikiavimas =&lt;br /&gt;
&lt;br /&gt;
Rikiavimo algoritmai naudojami duomenų sąrašui išdėstyti tam tikra tvarka. Rikiavimo algoritmų yra daug ir įvairių, bet papasakosiu tik kelis naudingiausius. Pateiktus algoritmus tu gelėsi nesunkiai pritaikyti ir kitokiems duomenų tipams, ne tik žodžiams. Bet apie tai vėliau.&lt;br /&gt;
&lt;br /&gt;
== Įterpimo rikiavimas (Insertion Sort) ==&lt;br /&gt;
&lt;br /&gt;
Įterpimo rikiavimas yra paprastas rikiavimo algoritmas, kuris veikia padalydamas sąrašą į dvi dalis: surikiuotą ir nesurikiuotą. Tada iteratyviai paimamas elementas iš nerikiuotos dalies ir įterpiamas į reikiamą vietą surikiuotoje dalyje, kol visas sąrašas surikiuojamas.&lt;br /&gt;
Pažiūrėkim, kaip tai atrodo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def įterpimo_rikiavimas(sąrašas):&lt;br /&gt;
    for i in range(1, len(sąrašas)):&lt;br /&gt;
        raktas = sąrašas[i]&lt;br /&gt;
        j = i - 1&lt;br /&gt;
        while j &amp;gt;= 0 and sąrašas[j] &amp;gt; raktas:&lt;br /&gt;
            sąrašas[j+1] = sąrašas[j]&lt;br /&gt;
            j -= 1&lt;br /&gt;
        sąrašas[j+1] = raktas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši funkcija paima sąrašą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir sutikiuoja jį didėjimo tvarka, naudodama įterpimo rikiavimą. Ji pradeda iteruoti per sąrašą nuo antrojo elemento (indeksas 1) iki galo. Kiekvieno elemento reikšmė išsaugoma kaip &amp;lt;code&amp;gt;raktas&amp;lt;/code&amp;gt;, o jo indeksas - kaip &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;, tada einama atgal per surikiuotą sąrašo dalį (nuo indekso &amp;lt;code&amp;gt;i-1&amp;lt;/code&amp;gt; iki 0) ir ieškoma tinkamos vietos rakto reikšmei įterpti. Tai daroma lyginant rakto vertę su kiekvienu išrikiuotos sąrašo dalies elementu ir perstumiant didesnius elementus viena pozicija į dešinę, kol randama tinkama pozicija. Suradęs tinkamą poziciją, į ją įterpia rakto reikšmę.&lt;br /&gt;
&lt;br /&gt;
Įterpimo rikiavimo laiko sudėtingumas blogiausiu atveju yra O(n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;), o tai reiškia, kad didelių įvesties sąrašų atveju jis gali būti lėtas. Tačiau jis turi mažesnes pridėtines išlaidas nei kai kurie kiti rikiavivmo algoritmai ir gali būti efektyvesnis už juos mažiems įvesties sąrašams arba iš dalies surikiuotiems įvesties sąrašams.&lt;br /&gt;
&lt;br /&gt;
== Burbulinis rikiavimas (Bubble sort) ==&lt;br /&gt;
Burbulinis rikiavimas - tai paprastas rikiavimo algoritmas, kuris pakartotinai pereina per sąrašą, palygina gretimus elementus ir sukeičia juos vietomis, jei jų eiliškumas netinkamas. Pažiūrėkime į burbulinio rikiavimo funkcijos pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def burbulinis_rikiavimas(sąrašas):&lt;br /&gt;
    sąrašo_ilgis = len(sąrašas)&lt;br /&gt;
&lt;br /&gt;
    for i in range(sąrašo_ilgis):&lt;br /&gt;
        for j in range(0, sąrašo_ilgis-i-1):&lt;br /&gt;
            if sąrašas[j] &amp;gt; sąrašas[j+1]:&lt;br /&gt;
                sąrašas[j], sąrašas[j+1] = sąrašas[j+1], sąrašas[j]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ši funkcija paima sąrašą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir surikiuoja jį didėjančia tvarka, naudodama burbulinį rikiavimą.&lt;br /&gt;
&lt;br /&gt;
== Greitasis rikiavimas (Quicksort) ==&lt;br /&gt;
Greitasis rikiavimas yra plačiai naudojamas rikiavimo algoritmas, kuriame taikomas &amp;quot;skaldyk ir valdyk&amp;quot; metodas. Jis veikia iš masyvo (arba sąrašo) išrenkant ašinį elementą ir kitus elementus suskirstant į du papildomus masyvus pagal tai, ar jie mažesni, ar didesni už ašinį elementą. Tada šis procesas rekursiškai kartojamas kiekviename pogrupyje.&lt;br /&gt;
&lt;br /&gt;
Štai greitojo rikiavimo funkcijos pavyzdys &amp;quot;Python&amp;quot; kalba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def greitasis_rikiavimas(masyvas):&lt;br /&gt;
    mažiau = []&lt;br /&gt;
    lygus = []&lt;br /&gt;
    daugiau = []&lt;br /&gt;
    if len(masyvas) &amp;gt; 1:&lt;br /&gt;
        ašis = masyvas[0]&lt;br /&gt;
        for x in masyvas:&lt;br /&gt;
            if x &amp;lt; ašis:&lt;br /&gt;
                mažiau.append(x)&lt;br /&gt;
            elif x == ašis:&lt;br /&gt;
                lygus.append(x)&lt;br /&gt;
            elif x &amp;gt; ašis:&lt;br /&gt;
                daugiau.append(x)&lt;br /&gt;
        # neužmiršk grąžinti rezultato!&lt;br /&gt;
        return greitasis_rikiavimas(mažiau) + lygus + greitasis_rikiavimas(daugiau)&lt;br /&gt;
    # Atkreipk dėmesį, kad naudojame `lygus`, o ne `ašis`&lt;br /&gt;
    else:  &lt;br /&gt;
        return masyvas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funkcijos parametras &amp;lt;code&amp;gt;masyvas&amp;lt;/code&amp;gt; yra sąrašas, kurį norime surikiuoti.&lt;br /&gt;
&lt;br /&gt;
Pagrindinė funkcijos dalis yra sąlyga &amp;lt;code&amp;gt;if len(masyvas) &amp;gt; 1:&amp;lt;/code&amp;gt;, kuri tikrina, ar sąraše yra daugiau nei vienas elementas. Jei sąraše yra tik vienas arba nulis elementų, tai jis jau yra surikiuotas, todėl tiesiog grąžinamas toks pat sąrašas.&lt;br /&gt;
&lt;br /&gt;
Jei sąraše yra daugiau nei vienas elementas, algoritmas tęsiasi. Pirma, parenkamas elementas &amp;lt;code&amp;gt;ašis&amp;lt;/code&amp;gt;, šiuo atveju tai yra pirmas sąrašo elementas &amp;lt;code&amp;gt;masyvas[0]&amp;lt;/code&amp;gt;. Tuomet algoritmas eina per visus sąrašo elementus ir prideda juos į tris skirtingus sąrašus (&amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lygus&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt;), priklausomai nuo to, kaip jie lyginami su &amp;lt;code&amp;gt;ašis&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra mažesnis už &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;mažiau&#039;&#039;&#039; sąrašą.&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra lygus &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;lygus&#039;&#039;&#039; sąrašą.&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra didesnis už &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;daugiau&#039;&#039;&#039; sąrašą.&lt;br /&gt;
&lt;br /&gt;
Tai vadinama &#039;&#039;dalijimo procesu&#039;&#039;. Po šio proceso turime tris naujus sąrašus: &#039;&#039;&#039;mažiau&#039;&#039;&#039;, &#039;&#039;&#039;lygus&#039;&#039;&#039; ir &#039;&#039;&#039;daugiau&#039;&#039;&#039;, kurie yra dalinai surikiuoti (mažesni už &#039;&#039;&#039;ašis&#039;&#039;&#039;, lygūs &#039;&#039;&#039;ašis&#039;&#039;&#039; ir didesni už &#039;&#039;&#039;ašis&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Toliau funkcija naudoja rekursiją ir kviečia save su &amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt; sąrašais, taip pritaikydama dalijimo ir surikiavimo procesą šiems dviejams sąrašams atskirai. Rekursyviai kviečiant save, galiausiai bus pasiektas atvejis, kai sąrašai &amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt; bus sudaryti iš nulio arba vieno elemento, o tai reiškia, kad jie jau surikiuoti. Tada funkcija grąžina sudėtą sąrašą: &amp;lt;code&amp;gt;greitasis_rikiavimas(mažiau) + lygus + greitasis_rikiavimas(daugiau)&amp;lt;/code&amp;gt;, kuris sudarys pilnai surikiuotą sąrašą.&lt;br /&gt;
&lt;br /&gt;
Galutinis rezultatas yra surikiuotas sąrašas, kuris yra grąžinamas iš pradinių sąrašų iškvietimo vietos.&lt;br /&gt;
&lt;br /&gt;
Pvz. jei iškviečiame funkciją &amp;lt;code&amp;gt;greitasis_rikiavimas([3, 1, 4, 1, 5, 9, 2, 6, 5])&amp;lt;/code&amp;gt;, tai gražins &amp;lt;code&amp;gt;[1, 1, 2, 3, 4, 5, 5, 6, 9]&amp;lt;/code&amp;gt;, kuris yra pradinis sąrašas surikiuotas didėjimo tvarka.&lt;br /&gt;
&lt;br /&gt;
== Suliejimo rikiavimas (Merge sort) ==&lt;br /&gt;
Suliejimo rikiavimas - tai rikiavimo algoritmas, kuris veikia pagal dalinimo ir sujungimo principą. Tai efektyvus algoritmas, kuris naudoja rekursiją.&lt;br /&gt;
&lt;br /&gt;
Šis algoritmas veikia taip:&lt;br /&gt;
* Jei sąraše yra nulis arba vienas elementas, tai jis jau yra surikiuotas. Grąžinamas tas pats sąrašas.&lt;br /&gt;
* Jei sąraše yra daugiau nei vienas elementas, sąrašas yra padalinamas į dvi lygias dalis.&lt;br /&gt;
* Kiekviena dalis yra rekursyviai rikiuojama naudojant &#039;&#039;&#039;merge sort&#039;&#039;&#039; algoritmą.&lt;br /&gt;
* Surikiuotos dvi dalys yra sujungiamos į vieną sąrašą. Sujungimo metu elementai yra palyginami ir sudedami į naują sąrašą didėjimo tvarka.&lt;br /&gt;
&lt;br /&gt;
Šis procesas yra pakartojamas tol, kol visi sąrašai yra padalinti iki vieno elemento ir tada sujungti į vieną galutinį surikiuotą sąrašą.&lt;br /&gt;
&lt;br /&gt;
Suliejimo rikiavimo algoritmas yra efektyvus, nes dalijimo ir sujungimo žingsniai yra vykdomi daug kartų, o kiekviename žingsnyje sąrašas yra padalintas į dvi lygias dalis. Tai leidžia efektyviai rikiuoti didelius sąrašus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def suliejimo_rikiavimas(sąrašas):&lt;br /&gt;
    # sąraše yra nulis arba vienas elementas&lt;br /&gt;
    if len(sąrašas) &amp;lt;= 1:&lt;br /&gt;
        return sąrašas&lt;br /&gt;
    &lt;br /&gt;
    # Dalinimo žingsnis: padaliname sąrašą į dvi lygias dalis&lt;br /&gt;
    vidurys = len(sąrašas) // 2&lt;br /&gt;
    kairė = sąrašas[:vidurys]&lt;br /&gt;
    dešinė = sąrašas[vidurys:]&lt;br /&gt;
    &lt;br /&gt;
    # Rekursyviai rikiuojame kiekvieną dalį&lt;br /&gt;
    kairė = suliejimo_rikiavimas(kairė)&lt;br /&gt;
    dešinė = suliejimo_rikiavimas(dešinė)&lt;br /&gt;
    &lt;br /&gt;
    # Sujungimo žingsnis: sujungiame surikiuotas dalis į vieną sąrašą&lt;br /&gt;
    return suliejimas(kairė, dešinė)&lt;br /&gt;
&lt;br /&gt;
def suliejimas(kairė, dešinė):&lt;br /&gt;
    rezultatas = []&lt;br /&gt;
    i = 0  # indeksas kairėje dalyje&lt;br /&gt;
    j = 0  # indeksas dešinėje dalyje&lt;br /&gt;
    &lt;br /&gt;
    # Lyginame ir sujungiame elementus&lt;br /&gt;
    while i &amp;lt; len(kairė) and j &amp;lt; len(dešinė):&lt;br /&gt;
        if kairė[i] &amp;lt;= dešinė[j]:&lt;br /&gt;
            rezultatas.append(kairė[i])&lt;br /&gt;
            i += 1&lt;br /&gt;
        else:&lt;br /&gt;
            rezultatas.append(dešinė[j])&lt;br /&gt;
            j += 1&lt;br /&gt;
    &lt;br /&gt;
    # Jei viena dalis baigiasi anksčiau, pridedame likusius elementus&lt;br /&gt;
    while i &amp;lt; len(kairė):&lt;br /&gt;
        rezultatas.append(kairė[i])&lt;br /&gt;
        i += 1&lt;br /&gt;
    while j &amp;lt; len(dešinė):&lt;br /&gt;
        rezultatas.append(dešinė[j])&lt;br /&gt;
        j += 1&lt;br /&gt;
    &lt;br /&gt;
    return rezultatas&lt;br /&gt;
&lt;br /&gt;
# Pavyzdys naudojant suliejimo_rikiavimas funkciją&lt;br /&gt;
sąrašas = [3, 1, 4, 1, 5, 9, 2, 6, 5]&lt;br /&gt;
surikiuotas_sąrašas = suliejimo_rikiavimas(sąrašas)&lt;br /&gt;
print(surikiuotas_sąrašas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis pavyzdys naudoja dvi funkcijas: &amp;lt;code&amp;gt;suliejimo_rikiavimas&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;suliejimas&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;suliejimo_rikiavimas&amp;lt;/code&amp;gt; funkcija atlieka dalinimo ir rekursyvaus rikiavimo žingsnius, o &amp;lt;code&amp;gt;suliejimas&amp;lt;/code&amp;gt; funkcija atlieka surikiuotų dalių sujungimą.&lt;br /&gt;
&lt;br /&gt;
Šio pavyzdžio rezultatas:&lt;br /&gt;
 [1, 1, 2, 3, 4, 5, 5, 6, 9]&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Paie%C5%A1ka_ir_Rikiavimas&amp;diff=384</id>
		<title>Vadovėlis/Paieška ir Rikiavimas</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Paie%C5%A1ka_ir_Rikiavimas&amp;diff=384"/>
		<updated>2023-06-28T13:07:42Z</updated>

		<summary type="html">&lt;p&gt;Monika: /* Greitasis rikiavimas (Quicksort) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Atlikęs praeito skyriaus uždavinius, jau daug žinai apie sąrašo sukūrimą ir visus bazinius sąrašo metodus. Dabar pasinaudosime įgytomis žiniomis ir susipažinsime su labai dažnai sutinkamais uždaviniais: paieška ir rikiavimas.&lt;br /&gt;
&lt;br /&gt;
= Paieška =&lt;br /&gt;
&lt;br /&gt;
Paieškos algoritmai naudojami norint rasti konkretų elementą sąraše ar duomenų masyve. Yra keletas paieškos algoritmų, tačiau parodysiu du dažniausiai naudojamus - tiesinę paiešką ir dvejetainę paiešką.&lt;br /&gt;
&lt;br /&gt;
== Tiesinė paieška ==&lt;br /&gt;
Tiesinė paieška - tai paprastas paieškos algoritmas, kuris, ieškodamas tikslinės reikšmės, peržiūri kiekvieną sąrašo elementą. Pažiūrėk į tiesinės paieškos funkcijos pavyzdį &amp;quot;Python&amp;quot; kalba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def tiesinė_paieška(sąrašas, ieškomas_žodis):&lt;br /&gt;
    for i in range(len(sąrašas)):&lt;br /&gt;
        if sąrašas[i] == ieškomas_žodis:&lt;br /&gt;
            return i&lt;br /&gt;
    return -1  # ieškomas_žodis nerastas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši funkcija priima masyvą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir tikslinę reikšmę &amp;lt;code&amp;gt;ieškomas_žodis&amp;lt;/code&amp;gt; ir grąžina tikslinės reikšmės indeksą masyve. Jei tikslinė vertė nerandama masyve, funkcija grąžina -1. Labai praprasta ir aišku.&lt;br /&gt;
&lt;br /&gt;
== Dvejetainė paieška ==&lt;br /&gt;
Kita vertus, dvejetainė paieška yra efektyvesnis paieškos algoritmas, kuris veikia tik surikiuotose masyvuose (sąrašuose). Jis veikia pakartotinai dalydamas paieškos intervalą per pusę, kol randama tikslinė reikšmė. Painu? Daug aiškiau bus pažiūrėjus šį pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def dvejetainė_paieška(sąrašas, tikslas):&lt;br /&gt;
    # išsisaugome sąrašo pirmą ir paskutinį indeksą&lt;br /&gt;
    apačia = 0&lt;br /&gt;
    viršus = len(sąrašas) - 1&lt;br /&gt;
    &lt;br /&gt;
    while apačia &amp;lt;= viršus:&lt;br /&gt;
        # atrandame vidurį pagal formulę: (pradžios indeksas + pabaigos indeksas) padalintas per pusę, be liekanos&lt;br /&gt;
        viduriukas = (apačia + viršus) // 2&lt;br /&gt;
        # patikriname, ar `viduriukas` indekse yra mūsų ieškomas tikslas, ir jį atradus grąžiname indeksą.&lt;br /&gt;
        if sąrašas[viduriukas] == tikslas:&lt;br /&gt;
            return viduriukas&lt;br /&gt;
        # jeigu ne, tai pagal tai, kurioje pusėje yra ieškomas elementas pakeičiame viršutinį arba apatinį indeksą&lt;br /&gt;
        elif sąrašas[viduriukas] &amp;lt; tikslas:&lt;br /&gt;
            apačia = viduriukas + 1&lt;br /&gt;
        else:&lt;br /&gt;
            viršus = viduriukas - 1&lt;br /&gt;
        # ir kartojame iš naujo, bet jau su nauju, per pus mažesniu rėžiu&lt;br /&gt;
    &lt;br /&gt;
    return -1  # tikslas nerastas&lt;br /&gt;
&lt;br /&gt;
sąrašas = [1,2,3,4,5,6,7,8,9,10]&lt;br /&gt;
print(dvejetainė_paieška(sąrašas, 7)) # 6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Panagrinėkim detaliai, kaip vyksta procesas. Ieškome, kur yra skaičius 7, sąraše [1,2,3,4,5,6,7,8,9,10]. Funkcijos pradžios kintamieji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 apačia = 0&lt;br /&gt;
 viršus = 9 # (ilgis 10 - 1 )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Pirmas `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 4 # (0 + 9) // 2&lt;br /&gt;
 # sąrašas[4] saugo reikšmę 5. Ne mūsų ieškomas skaičius.&lt;br /&gt;
 # kadangi tikslas yra surasti 7, tai mūsų kito ciklo metu ieškosime viršutinėje sąrašo dalyje, todėl nusistatome naują apačios reikšmę, viduriukas + 1.&lt;br /&gt;
 apačia = 5 # (4 + 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Antras `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 7 # (5 + 9) // 2&lt;br /&gt;
 # sąrašas[7] saugo reikšmę 8. Jau arčiau, bet ne dar vis ne mūsų ieškoma reikšmė 7. Nustatome šįkartą naują viršutinę reikšmę, viduriukas - 1&lt;br /&gt;
 viršus = 6 # (7 - 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Trečias `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 5 # (5 + 6) // 2&lt;br /&gt;
 # sąrašas[5] saugo reikmę 6. Vėl pro šalį. Nustatome naują apatinę reikšmę:&lt;br /&gt;
 apačia = 6 # (5 + 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ketvirtas `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 6 # (6 + 6) // 2&lt;br /&gt;
 sąrašas[6] saugo reikšmę 7. Valio! Radom. Grąžinam indeksą 7.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad dvejetainės paieškos algoritmas atrado reikšmę per 4 ciklus. Kaip manai, kiek ciklų prireiktų tiesinės paieškos algoritmui? Pasufleruosiu... Daugiau :)&lt;br /&gt;
&lt;br /&gt;
= Rikiavimas =&lt;br /&gt;
&lt;br /&gt;
Rikiavimo algoritmai naudojami duomenų sąrašui išdėstyti tam tikra tvarka. Rikiavimo algoritmų yra daug ir įvairių, bet papasakosiu tik kelis naudingiausius. Pateiktus algoritmus tu gelėsi nesunkiai pritaikyti ir kitokiems duomenų tipams, ne tik žodžiams. Bet apie tai vėliau.&lt;br /&gt;
&lt;br /&gt;
== Įterpimo rikiavimas (Insertion Sort) ==&lt;br /&gt;
&lt;br /&gt;
Įterpimo rikiavimas yra paprastas rikiavimo algoritmas, kuris veikia padalydamas sąrašą į dvi dalis: surikiuotą ir nesurikiuotą. Tada iteratyviai paimamas elementas iš nerikiuotos dalies ir įterpiamas į reikiamą vietą surikiuotoje dalyje, kol visas sąrašas surikiuojamas.&lt;br /&gt;
Pažiūrėkim, kaip tai atrodo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def įterpimo_rikiavimas(sąrašas):&lt;br /&gt;
    for i in range(1, len(sąrašas)):&lt;br /&gt;
        raktas = sąrašas[i]&lt;br /&gt;
        j = i - 1&lt;br /&gt;
        while j &amp;gt;= 0 and sąrašas[j] &amp;gt; raktas:&lt;br /&gt;
            sąrašas[j+1] = sąrašas[j]&lt;br /&gt;
            j -= 1&lt;br /&gt;
        sąrašas[j+1] = raktas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši funkcija paima sąrašą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir sutikiuoja jį didėjimo tvarka, naudodama įterpimo rikiavimą. Ji pradeda iteruoti per sąrašą nuo antrojo elemento (indeksas 1) iki galo. Kiekvieno elemento reikšmė išsaugoma kaip &amp;lt;code&amp;gt;raktas&amp;lt;/code&amp;gt;, o jo indeksas - kaip &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;, tada einama atgal per surikiuotą sąrašo dalį (nuo indekso &amp;lt;code&amp;gt;i-1&amp;lt;/code&amp;gt; iki 0) ir ieškoma tinkamos vietos rakto reikšmei įterpti. Tai daroma lyginant rakto vertę su kiekvienu išrikiuotos sąrašo dalies elementu ir perstumiant didesnius elementus viena pozicija į dešinę, kol randama tinkama pozicija. Suradęs tinkamą poziciją, į ją įterpia rakto reikšmę.&lt;br /&gt;
&lt;br /&gt;
Įterpimo rikiavimo laiko sudėtingumas blogiausiu atveju yra O(n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;), o tai reiškia, kad didelių įvesties sąrašų atveju jis gali būti lėtas. Tačiau jis turi mažesnes pridėtines išlaidas nei kai kurie kiti rikiavivmo algoritmai ir gali būti efektyvesnis už juos mažiems įvesties sąrašams arba iš dalies surikiuotiems įvesties sąrašams.&lt;br /&gt;
&lt;br /&gt;
== Burbulinis rikiavimas (Bubble sort) ==&lt;br /&gt;
Burbulinis rikiavimas - tai paprastas rikiavimo algoritmas, kuris pakartotinai pereina per sąrašą, palygina gretimus elementus ir sukeičia juos vietomis, jei jų eiliškumas netinkamas. Pažiūrėkime į burbulinio rikiavimo funkcijos pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def burbulinis_rikiavimas(sąrašas):&lt;br /&gt;
    sąrašo_ilgis = len(sąrašas)&lt;br /&gt;
&lt;br /&gt;
    for i in range(sąrašo_ilgis):&lt;br /&gt;
        for j in range(0, sąrašo_ilgis-i-1):&lt;br /&gt;
            if sąrašas[j] &amp;gt; sąrašas[j+1]:&lt;br /&gt;
                sąrašas[j], sąrašas[j+1] = sąrašas[j+1], sąrašas[j]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ši funkcija paima sąrašą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir surikiuoja jį didėjančia tvarka, naudodama burbulinį rikiavimą.&lt;br /&gt;
&lt;br /&gt;
== Greitasis rikiavimas (Quicksort) ==&lt;br /&gt;
Greitasis rikiavimas yra plačiai naudojamas rikiavimo algoritmas, kuriame taikomas &amp;quot;skaldyk ir valdyk&amp;quot; metodas. Jis veikia iš masyvo (arba sąrašo) išrenkant ašinį elementą ir kitus elementus suskirstant į du papildomus masyvus pagal tai, ar jie mažesni, ar didesni už ašinį elementą. Tada šis procesas rekursiškai kartojamas kiekviename pogrupyje.&lt;br /&gt;
&lt;br /&gt;
Štai greitojo rikiavimo funkcijos pavyzdys &amp;quot;Python&amp;quot; kalba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def greitasis_rikiavimas(masyvas):&lt;br /&gt;
    mažiau = []&lt;br /&gt;
    lygus = []&lt;br /&gt;
    daugiau = []&lt;br /&gt;
    if len(masyvas) &amp;gt; 1:&lt;br /&gt;
        ašis = masyvas[0]&lt;br /&gt;
        for x in masyvas:&lt;br /&gt;
            if x &amp;lt; ašis:&lt;br /&gt;
                mažiau.append(x)&lt;br /&gt;
            elif x == ašis:&lt;br /&gt;
                lygus.append(x)&lt;br /&gt;
            elif x &amp;gt; ašis:&lt;br /&gt;
                daugiau.append(x)&lt;br /&gt;
        # neužmiršk grąžinti rezultato!&lt;br /&gt;
        return greitasis_rikiavimas(mažiau) + lygus + greitasis_rikiavimas(daugiau)&lt;br /&gt;
    # Atkreipk dėmesį, kad naudojame `lygus`, o ne `ašis`&lt;br /&gt;
    else:  &lt;br /&gt;
        return masyvas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funkcijos parametras &amp;lt;code&amp;gt;masyvas&amp;lt;/code&amp;gt; yra sąrašas, kurį norime surikiuoti.&lt;br /&gt;
&lt;br /&gt;
Pagrindinė funkcijos dalis yra sąlyga &amp;lt;code&amp;gt;if len(masyvas) &amp;gt; 1:&amp;lt;/code&amp;gt;, kuri tikrina, ar sąraše yra daugiau nei vienas elementas. Jei sąraše yra tik vienas arba nulis elementų, tai jis jau yra surikiuotas, todėl tiesiog grąžinamas toks pat sąrašas.&lt;br /&gt;
&lt;br /&gt;
Jei sąraše yra daugiau nei vienas elementas, algoritmas tęsiasi. Pirma, parenkamas elementas &amp;lt;code&amp;gt;ašis&amp;lt;/code&amp;gt;, šiuo atveju tai yra pirmas sąrašo elementas &amp;lt;code&amp;gt;masyvas[0]&amp;lt;/code&amp;gt;. Tuomet algoritmas eina per visus sąrašo elementus ir prideda juos į tris skirtingus sąrašus (&amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lygus&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt;), priklausomai nuo to, kaip jie lyginami su &amp;lt;code&amp;gt;ašis&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra mažesnis už &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;mažiau&#039;&#039;&#039; sąrašą.&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra lygus &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;lygus&#039;&#039;&#039; sąrašą.&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra didesnis už &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;daugiau&#039;&#039;&#039; sąrašą.&lt;br /&gt;
&lt;br /&gt;
Tai vadinama &#039;&#039;dalijimo procesu&#039;&#039;. Po šio proceso turime tris naujus sąrašus: &#039;&#039;&#039;mažiau&#039;&#039;&#039;, &#039;&#039;&#039;lygus&#039;&#039;&#039; ir &#039;&#039;&#039;daugiau&#039;&#039;&#039;, kurie yra dalinai surikiuoti (mažesni už &#039;&#039;&#039;ašis&#039;&#039;&#039;, lygūs &#039;&#039;&#039;ašis&#039;&#039;&#039; ir didesni už &#039;&#039;&#039;ašis&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Toliau funkcija naudoja rekursiją ir kviečia save su &amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt; sąrašais, taip pritaikydama dalijimo ir surikiavimo procesą šiems dviejams sąrašams atskirai. Rekursyviai kviečiant save, galiausiai bus pasiektas atvejis, kai sąrašai &amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt; bus sudaryti iš nulio arba vieno elemento, o tai reiškia, kad jie jau surikiuoti. Tada funkcija grąžina sudėtą sąrašą: &amp;lt;code&amp;gt;greitasis_rikiavimas(mažiau) + lygus + greitasis_rikiavimas(daugiau)&amp;lt;/code&amp;gt;, kuris sudarys pilnai surikiuotą sąrašą.&lt;br /&gt;
&lt;br /&gt;
Galutinis rezultatas yra surikiuotas sąrašas, kuris yra grąžinamas iš pradinių sąrašų iškvietimo vietos.&lt;br /&gt;
&lt;br /&gt;
Pvz. jei iškviečiame funkciją &amp;lt;code&amp;gt;greitasis_rikiavimas([3, 1, 4, 1, 5, 9, 2, 6, 5])&amp;lt;/code&amp;gt;, tai gražins &amp;lt;code&amp;gt;[1, 1, 2, 3, 4, 5, 5, 6, 9]&amp;lt;/code&amp;gt;, kuris yra pradinis sąrašas surikiuotas didėjimo tvarka.&lt;br /&gt;
&lt;br /&gt;
== Suliejimo rikiavimas (Merge sort) ==&lt;br /&gt;
Suliejimo rikiavimas - tai rikiavimo algoritmas, kuris veikia pagal dalinimo ir sujungimo principą. Tai efektyvus algoritmas, kuris naudoja rekursiją.&lt;br /&gt;
&lt;br /&gt;
Šis algoritmas veikia taip:&lt;br /&gt;
* Jei sąraše yra nulis arba vienas elementas, tai jis jau yra surikiuotas. Grąžinamas tas pats sąrašas.&lt;br /&gt;
* Jei sąraše yra daugiau nei vienas elementas, sąrašas yra padalinamas į dvi lygias dalis.&lt;br /&gt;
* Kiekviena dalis yra rekursyviai rikiuojama naudojant &#039;&#039;&#039;merge sort&#039;&#039;&#039; algoritmą.&lt;br /&gt;
* Surikiuotos dvi dalys yra sujungiamos į vieną sąrašą. Sujungimo metu elementai yra palyginami ir sudedami į naują sąrašą didėjimo tvarka.&lt;br /&gt;
&lt;br /&gt;
Šis procesas yra pakartojamas tol, kol visi sąrašai yra padalinti iki vieno elemento ir tada sujungti į vieną galutinį surikiuotą sąrašą.&lt;br /&gt;
&lt;br /&gt;
Suliejimo rikiavimo algoritmas yra efektyvus, nes dalijimo ir sujungimo žingsniai yra vykdomi daug kartų, o kiekviename žingsnyje sąrašas yra padalintas į dvi lygias dalis. Tai leidžia efektyviai rikiuoti didelius sąrašus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def suliejimo_rikiavimas(sąrašas):&lt;br /&gt;
    # sąraše yra nulis arba vienas elementas&lt;br /&gt;
    if len(sąrašas) &amp;lt;= 1:&lt;br /&gt;
        return sąrašas&lt;br /&gt;
    &lt;br /&gt;
    # Dalinimo žingsnis: padaliname sąrašą į dvi lygias dalis&lt;br /&gt;
    vidurys = len(sąrašas) // 2&lt;br /&gt;
    kairė = sąrašas[:vidurys]&lt;br /&gt;
    dešinė = sąrašas[vidurys:]&lt;br /&gt;
    &lt;br /&gt;
    # Rekursyviai rikiuojame kiekvieną dalį&lt;br /&gt;
    kairė = suliejimo_rikiavimas(kairė)&lt;br /&gt;
    dešinė = suliejimo_rikiavimas(dešinė)&lt;br /&gt;
    &lt;br /&gt;
    # Sujungimo žingsnis: sujungiame surikiuotas dalis į vieną sąrašą&lt;br /&gt;
    return suliejimas(kairė, dešinė)&lt;br /&gt;
&lt;br /&gt;
def suliejimas(kairė, dešinė):&lt;br /&gt;
    rezultatas = []&lt;br /&gt;
    i = 0  # indeksas kairėje dalyje&lt;br /&gt;
    j = 0  # indeksas dešinėje dalyje&lt;br /&gt;
    &lt;br /&gt;
    # Lyginame ir sujungiame elementus&lt;br /&gt;
    while i &amp;lt; len(kairė) and j &amp;lt; len(dešinė):&lt;br /&gt;
        if kairė[i] &amp;lt;= dešinė[j]:&lt;br /&gt;
            rezultatas.append(kairė[i])&lt;br /&gt;
            i += 1&lt;br /&gt;
        else:&lt;br /&gt;
            rezultatas.append(dešinė[j])&lt;br /&gt;
            j += 1&lt;br /&gt;
    &lt;br /&gt;
    # Jei viena dalis baigiasi anksčiau, pridedame likusius elementus&lt;br /&gt;
    while i &amp;lt; len(kairė):&lt;br /&gt;
        rezultatas.append(kairė[i])&lt;br /&gt;
        i += 1&lt;br /&gt;
    while j &amp;lt; len(dešinė):&lt;br /&gt;
        rezultatas.append(dešinė[j])&lt;br /&gt;
        j += 1&lt;br /&gt;
    &lt;br /&gt;
    return rezultatas&lt;br /&gt;
&lt;br /&gt;
# Pavyzdys naudojant suliejimo_rikiavimas funkciją&lt;br /&gt;
sąrašas = [3, 1, 4, 1, 5, 9, 2, 6, 5]&lt;br /&gt;
surikiuotas_sąrašas = suliejimo_rikiavimas(sąrašas)&lt;br /&gt;
print(surikiuotas_sąrašas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis pavyzdys naudoja dvi funkcijas: &amp;lt;code&amp;gt;suliejimo_rikiavimas&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;suliejimas&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;suliejimo_rikiavimas&amp;lt;/code&amp;gt; funkcija atlieka dalinimo ir rekursyvaus rikiavimo žingsnius, o &amp;lt;code&amp;gt;suliejimas&amp;lt;/code&amp;gt; funkcija atlieka surikiuotų dalių sujungimą.&lt;br /&gt;
&lt;br /&gt;
Rezultatas šio pavyzdžio bus:&lt;br /&gt;
 [1, 1, 2, 3, 4, 5, 5, 6, 9]&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Paie%C5%A1ka_ir_Rikiavimas&amp;diff=383</id>
		<title>Vadovėlis/Paieška ir Rikiavimas</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Paie%C5%A1ka_ir_Rikiavimas&amp;diff=383"/>
		<updated>2023-06-28T13:06:59Z</updated>

		<summary type="html">&lt;p&gt;Monika: /* Suliejimo rikiavimas (Merge sort) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Atlikęs praeito skyriaus uždavinius, jau daug žinai apie sąrašo sukūrimą ir visus bazinius sąrašo metodus. Dabar pasinaudosime įgytomis žiniomis ir susipažinsime su labai dažnai sutinkamais uždaviniais: paieška ir rikiavimas.&lt;br /&gt;
&lt;br /&gt;
= Paieška =&lt;br /&gt;
&lt;br /&gt;
Paieškos algoritmai naudojami norint rasti konkretų elementą sąraše ar duomenų masyve. Yra keletas paieškos algoritmų, tačiau parodysiu du dažniausiai naudojamus - tiesinę paiešką ir dvejetainę paiešką.&lt;br /&gt;
&lt;br /&gt;
== Tiesinė paieška ==&lt;br /&gt;
Tiesinė paieška - tai paprastas paieškos algoritmas, kuris, ieškodamas tikslinės reikšmės, peržiūri kiekvieną sąrašo elementą. Pažiūrėk į tiesinės paieškos funkcijos pavyzdį &amp;quot;Python&amp;quot; kalba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def tiesinė_paieška(sąrašas, ieškomas_žodis):&lt;br /&gt;
    for i in range(len(sąrašas)):&lt;br /&gt;
        if sąrašas[i] == ieškomas_žodis:&lt;br /&gt;
            return i&lt;br /&gt;
    return -1  # ieškomas_žodis nerastas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši funkcija priima masyvą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir tikslinę reikšmę &amp;lt;code&amp;gt;ieškomas_žodis&amp;lt;/code&amp;gt; ir grąžina tikslinės reikšmės indeksą masyve. Jei tikslinė vertė nerandama masyve, funkcija grąžina -1. Labai praprasta ir aišku.&lt;br /&gt;
&lt;br /&gt;
== Dvejetainė paieška ==&lt;br /&gt;
Kita vertus, dvejetainė paieška yra efektyvesnis paieškos algoritmas, kuris veikia tik surikiuotose masyvuose (sąrašuose). Jis veikia pakartotinai dalydamas paieškos intervalą per pusę, kol randama tikslinė reikšmė. Painu? Daug aiškiau bus pažiūrėjus šį pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def dvejetainė_paieška(sąrašas, tikslas):&lt;br /&gt;
    # išsisaugome sąrašo pirmą ir paskutinį indeksą&lt;br /&gt;
    apačia = 0&lt;br /&gt;
    viršus = len(sąrašas) - 1&lt;br /&gt;
    &lt;br /&gt;
    while apačia &amp;lt;= viršus:&lt;br /&gt;
        # atrandame vidurį pagal formulę: (pradžios indeksas + pabaigos indeksas) padalintas per pusę, be liekanos&lt;br /&gt;
        viduriukas = (apačia + viršus) // 2&lt;br /&gt;
        # patikriname, ar `viduriukas` indekse yra mūsų ieškomas tikslas, ir jį atradus grąžiname indeksą.&lt;br /&gt;
        if sąrašas[viduriukas] == tikslas:&lt;br /&gt;
            return viduriukas&lt;br /&gt;
        # jeigu ne, tai pagal tai, kurioje pusėje yra ieškomas elementas pakeičiame viršutinį arba apatinį indeksą&lt;br /&gt;
        elif sąrašas[viduriukas] &amp;lt; tikslas:&lt;br /&gt;
            apačia = viduriukas + 1&lt;br /&gt;
        else:&lt;br /&gt;
            viršus = viduriukas - 1&lt;br /&gt;
        # ir kartojame iš naujo, bet jau su nauju, per pus mažesniu rėžiu&lt;br /&gt;
    &lt;br /&gt;
    return -1  # tikslas nerastas&lt;br /&gt;
&lt;br /&gt;
sąrašas = [1,2,3,4,5,6,7,8,9,10]&lt;br /&gt;
print(dvejetainė_paieška(sąrašas, 7)) # 6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Panagrinėkim detaliai, kaip vyksta procesas. Ieškome, kur yra skaičius 7, sąraše [1,2,3,4,5,6,7,8,9,10]. Funkcijos pradžios kintamieji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 apačia = 0&lt;br /&gt;
 viršus = 9 # (ilgis 10 - 1 )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Pirmas `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 4 # (0 + 9) // 2&lt;br /&gt;
 # sąrašas[4] saugo reikšmę 5. Ne mūsų ieškomas skaičius.&lt;br /&gt;
 # kadangi tikslas yra surasti 7, tai mūsų kito ciklo metu ieškosime viršutinėje sąrašo dalyje, todėl nusistatome naują apačios reikšmę, viduriukas + 1.&lt;br /&gt;
 apačia = 5 # (4 + 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Antras `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 7 # (5 + 9) // 2&lt;br /&gt;
 # sąrašas[7] saugo reikšmę 8. Jau arčiau, bet ne dar vis ne mūsų ieškoma reikšmė 7. Nustatome šįkartą naują viršutinę reikšmę, viduriukas - 1&lt;br /&gt;
 viršus = 6 # (7 - 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Trečias `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 5 # (5 + 6) // 2&lt;br /&gt;
 # sąrašas[5] saugo reikmę 6. Vėl pro šalį. Nustatome naują apatinę reikšmę:&lt;br /&gt;
 apačia = 6 # (5 + 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ketvirtas `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 6 # (6 + 6) // 2&lt;br /&gt;
 sąrašas[6] saugo reikšmę 7. Valio! Radom. Grąžinam indeksą 7.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad dvejetainės paieškos algoritmas atrado reikšmę per 4 ciklus. Kaip manai, kiek ciklų prireiktų tiesinės paieškos algoritmui? Pasufleruosiu... Daugiau :)&lt;br /&gt;
&lt;br /&gt;
= Rikiavimas =&lt;br /&gt;
&lt;br /&gt;
Rikiavimo algoritmai naudojami duomenų sąrašui išdėstyti tam tikra tvarka. Rikiavimo algoritmų yra daug ir įvairių, bet papasakosiu tik kelis naudingiausius. Pateiktus algoritmus tu gelėsi nesunkiai pritaikyti ir kitokiems duomenų tipams, ne tik žodžiams. Bet apie tai vėliau.&lt;br /&gt;
&lt;br /&gt;
== Įterpimo rikiavimas (Insertion Sort) ==&lt;br /&gt;
&lt;br /&gt;
Įterpimo rikiavimas yra paprastas rikiavimo algoritmas, kuris veikia padalydamas sąrašą į dvi dalis: surikiuotą ir nesurikiuotą. Tada iteratyviai paimamas elementas iš nerikiuotos dalies ir įterpiamas į reikiamą vietą surikiuotoje dalyje, kol visas sąrašas surikiuojamas.&lt;br /&gt;
Pažiūrėkim, kaip tai atrodo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def įterpimo_rikiavimas(sąrašas):&lt;br /&gt;
    for i in range(1, len(sąrašas)):&lt;br /&gt;
        raktas = sąrašas[i]&lt;br /&gt;
        j = i - 1&lt;br /&gt;
        while j &amp;gt;= 0 and sąrašas[j] &amp;gt; raktas:&lt;br /&gt;
            sąrašas[j+1] = sąrašas[j]&lt;br /&gt;
            j -= 1&lt;br /&gt;
        sąrašas[j+1] = raktas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši funkcija paima sąrašą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir sutikiuoja jį didėjimo tvarka, naudodama įterpimo rikiavimą. Ji pradeda iteruoti per sąrašą nuo antrojo elemento (indeksas 1) iki galo. Kiekvieno elemento reikšmė išsaugoma kaip &amp;lt;code&amp;gt;raktas&amp;lt;/code&amp;gt;, o jo indeksas - kaip &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;, tada einama atgal per surikiuotą sąrašo dalį (nuo indekso &amp;lt;code&amp;gt;i-1&amp;lt;/code&amp;gt; iki 0) ir ieškoma tinkamos vietos rakto reikšmei įterpti. Tai daroma lyginant rakto vertę su kiekvienu išrikiuotos sąrašo dalies elementu ir perstumiant didesnius elementus viena pozicija į dešinę, kol randama tinkama pozicija. Suradęs tinkamą poziciją, į ją įterpia rakto reikšmę.&lt;br /&gt;
&lt;br /&gt;
Įterpimo rikiavimo laiko sudėtingumas blogiausiu atveju yra O(n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;), o tai reiškia, kad didelių įvesties sąrašų atveju jis gali būti lėtas. Tačiau jis turi mažesnes pridėtines išlaidas nei kai kurie kiti rikiavivmo algoritmai ir gali būti efektyvesnis už juos mažiems įvesties sąrašams arba iš dalies surikiuotiems įvesties sąrašams.&lt;br /&gt;
&lt;br /&gt;
== Burbulinis rikiavimas (Bubble sort) ==&lt;br /&gt;
Burbulinis rikiavimas - tai paprastas rikiavimo algoritmas, kuris pakartotinai pereina per sąrašą, palygina gretimus elementus ir sukeičia juos vietomis, jei jų eiliškumas netinkamas. Pažiūrėkime į burbulinio rikiavimo funkcijos pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def burbulinis_rikiavimas(sąrašas):&lt;br /&gt;
    sąrašo_ilgis = len(sąrašas)&lt;br /&gt;
&lt;br /&gt;
    for i in range(sąrašo_ilgis):&lt;br /&gt;
        for j in range(0, sąrašo_ilgis-i-1):&lt;br /&gt;
            if sąrašas[j] &amp;gt; sąrašas[j+1]:&lt;br /&gt;
                sąrašas[j], sąrašas[j+1] = sąrašas[j+1], sąrašas[j]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ši funkcija paima sąrašą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir surikiuoja jį didėjančia tvarka, naudodama burbulinį rikiavimą.&lt;br /&gt;
&lt;br /&gt;
== Greitasis rikiavimas (Quicksort) ==&lt;br /&gt;
Greitasis rikiavimas yra plačiai naudojamas rikiavimo algoritmas, kuriame taikomas &amp;quot;skaldyk ir valdyk&amp;quot; metodas. Jis veikia iš masyvo (arba sąrašo) išrenkant ašinį elementą ir kitus elementus suskirstant į du papildomus masyvus pagal tai, ar jie mažesni, ar didesni už ašinį elementą. Tada šis procesas rekursiškai kartojamas kiekviename pogrupyje.&lt;br /&gt;
&lt;br /&gt;
Štai &amp;quot;Quicksort&amp;quot; funkcijos pavyzdys &amp;quot;Python&amp;quot; kalba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def quicksort(masyvas):&lt;br /&gt;
    mažiau = []&lt;br /&gt;
    lygus = []&lt;br /&gt;
    daugiau = []&lt;br /&gt;
    if len(masyvas) &amp;gt; 1:&lt;br /&gt;
        ašis = masyvas[0]&lt;br /&gt;
        for x in masyvas:&lt;br /&gt;
            if x &amp;lt; ašis:&lt;br /&gt;
                mažiau.append(x)&lt;br /&gt;
            elif x == ašis:&lt;br /&gt;
                lygus.append(x)&lt;br /&gt;
            elif x &amp;gt; ašis:&lt;br /&gt;
                daugiau.append(x)&lt;br /&gt;
        # neužmiršk grąžinti rezultato!&lt;br /&gt;
        return quicksort(mažiau) + lygus + quicksort(daugiau)&lt;br /&gt;
    # Atkreipk dėmesį, kad naudojame `lygus`, o ne `ašis`&lt;br /&gt;
    else:  &lt;br /&gt;
        return masyvas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funkcijos parametras &amp;lt;code&amp;gt;masyvas&amp;lt;/code&amp;gt; yra sąrašas, kurį norime surikiuoti.&lt;br /&gt;
&lt;br /&gt;
Pagrindinė funkcijos dalis yra sąlyga &amp;lt;code&amp;gt;if len(masyvas) &amp;gt; 1:&amp;lt;/code&amp;gt;, kuri tikrina, ar sąraše yra daugiau nei vienas elementas. Jei sąraše yra tik vienas arba nulis elementų, tai jis jau yra surikiuotas, todėl tiesiog grąžinamas toks pat sąrašas.&lt;br /&gt;
&lt;br /&gt;
Jei sąraše yra daugiau nei vienas elementas, algoritmas tęsiasi. Pirma, parenkamas elementas &amp;lt;code&amp;gt;ašis&amp;lt;/code&amp;gt;, šiuo atveju tai yra pirmas sąrašo elementas &amp;lt;code&amp;gt;masyvas[0]&amp;lt;/code&amp;gt;. Tuomet algoritmas eina per visus sąrašo elementus ir prideda juos į tris skirtingus sąrašus (&amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lygus&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt;), priklausomai nuo to, kaip jie lyginami su &amp;lt;code&amp;gt;ašis&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra mažesnis už &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;mažiau&#039;&#039;&#039; sąrašą.&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra lygus &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;lygus&#039;&#039;&#039; sąrašą.&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra didesnis už &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;daugiau&#039;&#039;&#039; sąrašą.&lt;br /&gt;
&lt;br /&gt;
Tai vadinama &#039;&#039;dalijimo procesu&#039;&#039;. Po šio proceso turime tris naujus sąrašus: &#039;&#039;&#039;mažiau&#039;&#039;&#039;, &#039;&#039;&#039;lygus&#039;&#039;&#039; ir &#039;&#039;&#039;daugiau&#039;&#039;&#039;, kurie yra dalinai surikiuoti (mažesni už &#039;&#039;&#039;ašis&#039;&#039;&#039;, lygūs &#039;&#039;&#039;ašis&#039;&#039;&#039; ir didesni už &#039;&#039;&#039;ašis&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Toliau funkcija naudoja rekursiją ir kviečia save su &amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt; sąrašais, taip pritaikydama dalijimo ir surikiavimo procesą šiems dviejams sąrašams atskirai. Rekursyviai kviečiant save, galiausiai bus pasiektas atvejis, kai sąrašai &amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt; bus sudaryti iš nulio arba vieno elemento, o tai reiškia, kad jie jau surikiuoti. Tada funkcija grąžina sudėtą sąrašą: &amp;lt;code&amp;gt;quicksort(mažiau) + lygus + quicksort(daugiau)&amp;lt;/code&amp;gt;, kuris sudarys pilnai surikiuotą sąrašą.&lt;br /&gt;
&lt;br /&gt;
Galutinis rezultatas yra surikiuotas sąrašas, kuris yra grąžinamas iš pradinių sąrašų iškvietimo vietos.&lt;br /&gt;
&lt;br /&gt;
Pvz. jei iškviečiame funkciją &amp;lt;code&amp;gt;quicksort([3, 1, 4, 1, 5, 9, 2, 6, 5])&amp;lt;/code&amp;gt;, tai gražins &amp;lt;code&amp;gt;[1, 1, 2, 3, 4, 5, 5, 6, 9]&amp;lt;/code&amp;gt;, kuris yra pradinis sąrašas surikiuotas didėjimo tvarka.&lt;br /&gt;
&lt;br /&gt;
== Suliejimo rikiavimas (Merge sort) ==&lt;br /&gt;
Suliejimo rikiavimas - tai rikiavimo algoritmas, kuris veikia pagal dalinimo ir sujungimo principą. Tai efektyvus algoritmas, kuris naudoja rekursiją.&lt;br /&gt;
&lt;br /&gt;
Šis algoritmas veikia taip:&lt;br /&gt;
* Jei sąraše yra nulis arba vienas elementas, tai jis jau yra surikiuotas. Grąžinamas tas pats sąrašas.&lt;br /&gt;
* Jei sąraše yra daugiau nei vienas elementas, sąrašas yra padalinamas į dvi lygias dalis.&lt;br /&gt;
* Kiekviena dalis yra rekursyviai rikiuojama naudojant &#039;&#039;&#039;merge sort&#039;&#039;&#039; algoritmą.&lt;br /&gt;
* Surikiuotos dvi dalys yra sujungiamos į vieną sąrašą. Sujungimo metu elementai yra palyginami ir sudedami į naują sąrašą didėjimo tvarka.&lt;br /&gt;
&lt;br /&gt;
Šis procesas yra pakartojamas tol, kol visi sąrašai yra padalinti iki vieno elemento ir tada sujungti į vieną galutinį surikiuotą sąrašą.&lt;br /&gt;
&lt;br /&gt;
Suliejimo rikiavimo algoritmas yra efektyvus, nes dalijimo ir sujungimo žingsniai yra vykdomi daug kartų, o kiekviename žingsnyje sąrašas yra padalintas į dvi lygias dalis. Tai leidžia efektyviai rikiuoti didelius sąrašus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def suliejimo_rikiavimas(sąrašas):&lt;br /&gt;
    # sąraše yra nulis arba vienas elementas&lt;br /&gt;
    if len(sąrašas) &amp;lt;= 1:&lt;br /&gt;
        return sąrašas&lt;br /&gt;
    &lt;br /&gt;
    # Dalinimo žingsnis: padaliname sąrašą į dvi lygias dalis&lt;br /&gt;
    vidurys = len(sąrašas) // 2&lt;br /&gt;
    kairė = sąrašas[:vidurys]&lt;br /&gt;
    dešinė = sąrašas[vidurys:]&lt;br /&gt;
    &lt;br /&gt;
    # Rekursyviai rikiuojame kiekvieną dalį&lt;br /&gt;
    kairė = suliejimo_rikiavimas(kairė)&lt;br /&gt;
    dešinė = suliejimo_rikiavimas(dešinė)&lt;br /&gt;
    &lt;br /&gt;
    # Sujungimo žingsnis: sujungiame surikiuotas dalis į vieną sąrašą&lt;br /&gt;
    return suliejimas(kairė, dešinė)&lt;br /&gt;
&lt;br /&gt;
def suliejimas(kairė, dešinė):&lt;br /&gt;
    rezultatas = []&lt;br /&gt;
    i = 0  # indeksas kairėje dalyje&lt;br /&gt;
    j = 0  # indeksas dešinėje dalyje&lt;br /&gt;
    &lt;br /&gt;
    # Lyginame ir sujungiame elementus&lt;br /&gt;
    while i &amp;lt; len(kairė) and j &amp;lt; len(dešinė):&lt;br /&gt;
        if kairė[i] &amp;lt;= dešinė[j]:&lt;br /&gt;
            rezultatas.append(kairė[i])&lt;br /&gt;
            i += 1&lt;br /&gt;
        else:&lt;br /&gt;
            rezultatas.append(dešinė[j])&lt;br /&gt;
            j += 1&lt;br /&gt;
    &lt;br /&gt;
    # Jei viena dalis baigiasi anksčiau, pridedame likusius elementus&lt;br /&gt;
    while i &amp;lt; len(kairė):&lt;br /&gt;
        rezultatas.append(kairė[i])&lt;br /&gt;
        i += 1&lt;br /&gt;
    while j &amp;lt; len(dešinė):&lt;br /&gt;
        rezultatas.append(dešinė[j])&lt;br /&gt;
        j += 1&lt;br /&gt;
    &lt;br /&gt;
    return rezultatas&lt;br /&gt;
&lt;br /&gt;
# Pavyzdys naudojant suliejimo_rikiavimas funkciją&lt;br /&gt;
sąrašas = [3, 1, 4, 1, 5, 9, 2, 6, 5]&lt;br /&gt;
surikiuotas_sąrašas = suliejimo_rikiavimas(sąrašas)&lt;br /&gt;
print(surikiuotas_sąrašas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis pavyzdys naudoja dvi funkcijas: &amp;lt;code&amp;gt;suliejimo_rikiavimas&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;suliejimas&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;suliejimo_rikiavimas&amp;lt;/code&amp;gt; funkcija atlieka dalinimo ir rekursyvaus rikiavimo žingsnius, o &amp;lt;code&amp;gt;suliejimas&amp;lt;/code&amp;gt; funkcija atlieka surikiuotų dalių sujungimą.&lt;br /&gt;
&lt;br /&gt;
Rezultatas šio pavyzdžio bus:&lt;br /&gt;
 [1, 1, 2, 3, 4, 5, 5, 6, 9]&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Paie%C5%A1ka_ir_Rikiavimas&amp;diff=382</id>
		<title>Vadovėlis/Paieška ir Rikiavimas</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Paie%C5%A1ka_ir_Rikiavimas&amp;diff=382"/>
		<updated>2023-06-28T13:03:41Z</updated>

		<summary type="html">&lt;p&gt;Monika: /* Greitasis rikiavimas (Quicksort) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Atlikęs praeito skyriaus uždavinius, jau daug žinai apie sąrašo sukūrimą ir visus bazinius sąrašo metodus. Dabar pasinaudosime įgytomis žiniomis ir susipažinsime su labai dažnai sutinkamais uždaviniais: paieška ir rikiavimas.&lt;br /&gt;
&lt;br /&gt;
= Paieška =&lt;br /&gt;
&lt;br /&gt;
Paieškos algoritmai naudojami norint rasti konkretų elementą sąraše ar duomenų masyve. Yra keletas paieškos algoritmų, tačiau parodysiu du dažniausiai naudojamus - tiesinę paiešką ir dvejetainę paiešką.&lt;br /&gt;
&lt;br /&gt;
== Tiesinė paieška ==&lt;br /&gt;
Tiesinė paieška - tai paprastas paieškos algoritmas, kuris, ieškodamas tikslinės reikšmės, peržiūri kiekvieną sąrašo elementą. Pažiūrėk į tiesinės paieškos funkcijos pavyzdį &amp;quot;Python&amp;quot; kalba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def tiesinė_paieška(sąrašas, ieškomas_žodis):&lt;br /&gt;
    for i in range(len(sąrašas)):&lt;br /&gt;
        if sąrašas[i] == ieškomas_žodis:&lt;br /&gt;
            return i&lt;br /&gt;
    return -1  # ieškomas_žodis nerastas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši funkcija priima masyvą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir tikslinę reikšmę &amp;lt;code&amp;gt;ieškomas_žodis&amp;lt;/code&amp;gt; ir grąžina tikslinės reikšmės indeksą masyve. Jei tikslinė vertė nerandama masyve, funkcija grąžina -1. Labai praprasta ir aišku.&lt;br /&gt;
&lt;br /&gt;
== Dvejetainė paieška ==&lt;br /&gt;
Kita vertus, dvejetainė paieška yra efektyvesnis paieškos algoritmas, kuris veikia tik surikiuotose masyvuose (sąrašuose). Jis veikia pakartotinai dalydamas paieškos intervalą per pusę, kol randama tikslinė reikšmė. Painu? Daug aiškiau bus pažiūrėjus šį pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def dvejetainė_paieška(sąrašas, tikslas):&lt;br /&gt;
    # išsisaugome sąrašo pirmą ir paskutinį indeksą&lt;br /&gt;
    apačia = 0&lt;br /&gt;
    viršus = len(sąrašas) - 1&lt;br /&gt;
    &lt;br /&gt;
    while apačia &amp;lt;= viršus:&lt;br /&gt;
        # atrandame vidurį pagal formulę: (pradžios indeksas + pabaigos indeksas) padalintas per pusę, be liekanos&lt;br /&gt;
        viduriukas = (apačia + viršus) // 2&lt;br /&gt;
        # patikriname, ar `viduriukas` indekse yra mūsų ieškomas tikslas, ir jį atradus grąžiname indeksą.&lt;br /&gt;
        if sąrašas[viduriukas] == tikslas:&lt;br /&gt;
            return viduriukas&lt;br /&gt;
        # jeigu ne, tai pagal tai, kurioje pusėje yra ieškomas elementas pakeičiame viršutinį arba apatinį indeksą&lt;br /&gt;
        elif sąrašas[viduriukas] &amp;lt; tikslas:&lt;br /&gt;
            apačia = viduriukas + 1&lt;br /&gt;
        else:&lt;br /&gt;
            viršus = viduriukas - 1&lt;br /&gt;
        # ir kartojame iš naujo, bet jau su nauju, per pus mažesniu rėžiu&lt;br /&gt;
    &lt;br /&gt;
    return -1  # tikslas nerastas&lt;br /&gt;
&lt;br /&gt;
sąrašas = [1,2,3,4,5,6,7,8,9,10]&lt;br /&gt;
print(dvejetainė_paieška(sąrašas, 7)) # 6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Panagrinėkim detaliai, kaip vyksta procesas. Ieškome, kur yra skaičius 7, sąraše [1,2,3,4,5,6,7,8,9,10]. Funkcijos pradžios kintamieji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 apačia = 0&lt;br /&gt;
 viršus = 9 # (ilgis 10 - 1 )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Pirmas `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 4 # (0 + 9) // 2&lt;br /&gt;
 # sąrašas[4] saugo reikšmę 5. Ne mūsų ieškomas skaičius.&lt;br /&gt;
 # kadangi tikslas yra surasti 7, tai mūsų kito ciklo metu ieškosime viršutinėje sąrašo dalyje, todėl nusistatome naują apačios reikšmę, viduriukas + 1.&lt;br /&gt;
 apačia = 5 # (4 + 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Antras `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 7 # (5 + 9) // 2&lt;br /&gt;
 # sąrašas[7] saugo reikšmę 8. Jau arčiau, bet ne dar vis ne mūsų ieškoma reikšmė 7. Nustatome šįkartą naują viršutinę reikšmę, viduriukas - 1&lt;br /&gt;
 viršus = 6 # (7 - 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Trečias `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 5 # (5 + 6) // 2&lt;br /&gt;
 # sąrašas[5] saugo reikmę 6. Vėl pro šalį. Nustatome naują apatinę reikšmę:&lt;br /&gt;
 apačia = 6 # (5 + 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ketvirtas `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 6 # (6 + 6) // 2&lt;br /&gt;
 sąrašas[6] saugo reikšmę 7. Valio! Radom. Grąžinam indeksą 7.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad dvejetainės paieškos algoritmas atrado reikšmę per 4 ciklus. Kaip manai, kiek ciklų prireiktų tiesinės paieškos algoritmui? Pasufleruosiu... Daugiau :)&lt;br /&gt;
&lt;br /&gt;
= Rikiavimas =&lt;br /&gt;
&lt;br /&gt;
Rikiavimo algoritmai naudojami duomenų sąrašui išdėstyti tam tikra tvarka. Rikiavimo algoritmų yra daug ir įvairių, bet papasakosiu tik kelis naudingiausius. Pateiktus algoritmus tu gelėsi nesunkiai pritaikyti ir kitokiems duomenų tipams, ne tik žodžiams. Bet apie tai vėliau.&lt;br /&gt;
&lt;br /&gt;
== Įterpimo rikiavimas (Insertion Sort) ==&lt;br /&gt;
&lt;br /&gt;
Įterpimo rikiavimas yra paprastas rikiavimo algoritmas, kuris veikia padalydamas sąrašą į dvi dalis: surikiuotą ir nesurikiuotą. Tada iteratyviai paimamas elementas iš nerikiuotos dalies ir įterpiamas į reikiamą vietą surikiuotoje dalyje, kol visas sąrašas surikiuojamas.&lt;br /&gt;
Pažiūrėkim, kaip tai atrodo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def įterpimo_rikiavimas(sąrašas):&lt;br /&gt;
    for i in range(1, len(sąrašas)):&lt;br /&gt;
        raktas = sąrašas[i]&lt;br /&gt;
        j = i - 1&lt;br /&gt;
        while j &amp;gt;= 0 and sąrašas[j] &amp;gt; raktas:&lt;br /&gt;
            sąrašas[j+1] = sąrašas[j]&lt;br /&gt;
            j -= 1&lt;br /&gt;
        sąrašas[j+1] = raktas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši funkcija paima sąrašą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir sutikiuoja jį didėjimo tvarka, naudodama įterpimo rikiavimą. Ji pradeda iteruoti per sąrašą nuo antrojo elemento (indeksas 1) iki galo. Kiekvieno elemento reikšmė išsaugoma kaip &amp;lt;code&amp;gt;raktas&amp;lt;/code&amp;gt;, o jo indeksas - kaip &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;, tada einama atgal per surikiuotą sąrašo dalį (nuo indekso &amp;lt;code&amp;gt;i-1&amp;lt;/code&amp;gt; iki 0) ir ieškoma tinkamos vietos rakto reikšmei įterpti. Tai daroma lyginant rakto vertę su kiekvienu išrikiuotos sąrašo dalies elementu ir perstumiant didesnius elementus viena pozicija į dešinę, kol randama tinkama pozicija. Suradęs tinkamą poziciją, į ją įterpia rakto reikšmę.&lt;br /&gt;
&lt;br /&gt;
Įterpimo rikiavimo laiko sudėtingumas blogiausiu atveju yra O(n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;), o tai reiškia, kad didelių įvesties sąrašų atveju jis gali būti lėtas. Tačiau jis turi mažesnes pridėtines išlaidas nei kai kurie kiti rikiavivmo algoritmai ir gali būti efektyvesnis už juos mažiems įvesties sąrašams arba iš dalies surikiuotiems įvesties sąrašams.&lt;br /&gt;
&lt;br /&gt;
== Burbulinis rikiavimas (Bubble sort) ==&lt;br /&gt;
Burbulinis rikiavimas - tai paprastas rikiavimo algoritmas, kuris pakartotinai pereina per sąrašą, palygina gretimus elementus ir sukeičia juos vietomis, jei jų eiliškumas netinkamas. Pažiūrėkime į burbulinio rikiavimo funkcijos pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def burbulinis_rikiavimas(sąrašas):&lt;br /&gt;
    sąrašo_ilgis = len(sąrašas)&lt;br /&gt;
&lt;br /&gt;
    for i in range(sąrašo_ilgis):&lt;br /&gt;
        for j in range(0, sąrašo_ilgis-i-1):&lt;br /&gt;
            if sąrašas[j] &amp;gt; sąrašas[j+1]:&lt;br /&gt;
                sąrašas[j], sąrašas[j+1] = sąrašas[j+1], sąrašas[j]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ši funkcija paima sąrašą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir surikiuoja jį didėjančia tvarka, naudodama burbulinį rikiavimą.&lt;br /&gt;
&lt;br /&gt;
== Greitasis rikiavimas (Quicksort) ==&lt;br /&gt;
Greitasis rikiavimas yra plačiai naudojamas rikiavimo algoritmas, kuriame taikomas &amp;quot;skaldyk ir valdyk&amp;quot; metodas. Jis veikia iš masyvo (arba sąrašo) išrenkant ašinį elementą ir kitus elementus suskirstant į du papildomus masyvus pagal tai, ar jie mažesni, ar didesni už ašinį elementą. Tada šis procesas rekursiškai kartojamas kiekviename pogrupyje.&lt;br /&gt;
&lt;br /&gt;
Štai &amp;quot;Quicksort&amp;quot; funkcijos pavyzdys &amp;quot;Python&amp;quot; kalba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def quicksort(masyvas):&lt;br /&gt;
    mažiau = []&lt;br /&gt;
    lygus = []&lt;br /&gt;
    daugiau = []&lt;br /&gt;
    if len(masyvas) &amp;gt; 1:&lt;br /&gt;
        ašis = masyvas[0]&lt;br /&gt;
        for x in masyvas:&lt;br /&gt;
            if x &amp;lt; ašis:&lt;br /&gt;
                mažiau.append(x)&lt;br /&gt;
            elif x == ašis:&lt;br /&gt;
                lygus.append(x)&lt;br /&gt;
            elif x &amp;gt; ašis:&lt;br /&gt;
                daugiau.append(x)&lt;br /&gt;
        # neužmiršk grąžinti rezultato!&lt;br /&gt;
        return quicksort(mažiau) + lygus + quicksort(daugiau)&lt;br /&gt;
    # Atkreipk dėmesį, kad naudojame `lygus`, o ne `ašis`&lt;br /&gt;
    else:  &lt;br /&gt;
        return masyvas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funkcijos parametras &amp;lt;code&amp;gt;masyvas&amp;lt;/code&amp;gt; yra sąrašas, kurį norime surikiuoti.&lt;br /&gt;
&lt;br /&gt;
Pagrindinė funkcijos dalis yra sąlyga &amp;lt;code&amp;gt;if len(masyvas) &amp;gt; 1:&amp;lt;/code&amp;gt;, kuri tikrina, ar sąraše yra daugiau nei vienas elementas. Jei sąraše yra tik vienas arba nulis elementų, tai jis jau yra surikiuotas, todėl tiesiog grąžinamas toks pat sąrašas.&lt;br /&gt;
&lt;br /&gt;
Jei sąraše yra daugiau nei vienas elementas, algoritmas tęsiasi. Pirma, parenkamas elementas &amp;lt;code&amp;gt;ašis&amp;lt;/code&amp;gt;, šiuo atveju tai yra pirmas sąrašo elementas &amp;lt;code&amp;gt;masyvas[0]&amp;lt;/code&amp;gt;. Tuomet algoritmas eina per visus sąrašo elementus ir prideda juos į tris skirtingus sąrašus (&amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lygus&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt;), priklausomai nuo to, kaip jie lyginami su &amp;lt;code&amp;gt;ašis&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra mažesnis už &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;mažiau&#039;&#039;&#039; sąrašą.&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra lygus &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;lygus&#039;&#039;&#039; sąrašą.&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra didesnis už &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;daugiau&#039;&#039;&#039; sąrašą.&lt;br /&gt;
&lt;br /&gt;
Tai vadinama &#039;&#039;dalijimo procesu&#039;&#039;. Po šio proceso turime tris naujus sąrašus: &#039;&#039;&#039;mažiau&#039;&#039;&#039;, &#039;&#039;&#039;lygus&#039;&#039;&#039; ir &#039;&#039;&#039;daugiau&#039;&#039;&#039;, kurie yra dalinai surikiuoti (mažesni už &#039;&#039;&#039;ašis&#039;&#039;&#039;, lygūs &#039;&#039;&#039;ašis&#039;&#039;&#039; ir didesni už &#039;&#039;&#039;ašis&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Toliau funkcija naudoja rekursiją ir kviečia save su &amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt; sąrašais, taip pritaikydama dalijimo ir surikiavimo procesą šiems dviejams sąrašams atskirai. Rekursyviai kviečiant save, galiausiai bus pasiektas atvejis, kai sąrašai &amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt; bus sudaryti iš nulio arba vieno elemento, o tai reiškia, kad jie jau surikiuoti. Tada funkcija grąžina sudėtą sąrašą: &amp;lt;code&amp;gt;quicksort(mažiau) + lygus + quicksort(daugiau)&amp;lt;/code&amp;gt;, kuris sudarys pilnai surikiuotą sąrašą.&lt;br /&gt;
&lt;br /&gt;
Galutinis rezultatas yra surikiuotas sąrašas, kuris yra grąžinamas iš pradinių sąrašų iškvietimo vietos.&lt;br /&gt;
&lt;br /&gt;
Pvz. jei iškviečiame funkciją &amp;lt;code&amp;gt;quicksort([3, 1, 4, 1, 5, 9, 2, 6, 5])&amp;lt;/code&amp;gt;, tai gražins &amp;lt;code&amp;gt;[1, 1, 2, 3, 4, 5, 5, 6, 9]&amp;lt;/code&amp;gt;, kuris yra pradinis sąrašas surikiuotas didėjimo tvarka.&lt;br /&gt;
&lt;br /&gt;
== Suliejimo rikiavimas (Merge sort) ==&lt;br /&gt;
&amp;quot;Merge sort&amp;quot; yra rikiavimo algoritmas, kuris veikia pagal dalinimo ir sujungimo principą. Tai efektyvus algoritmas, kuris naudoja rekursiją.&lt;br /&gt;
&lt;br /&gt;
Merge sort algoritmas veikia taip:&lt;br /&gt;
* Jei sąraše yra nulis arba vienas elementas, tai jis jau yra surikiuotas. Grąžinamas tas pats sąrašas.&lt;br /&gt;
* Jei sąraše yra daugiau nei vienas elementas, sąrašas yra padalinamas į dvi lygias dalis.&lt;br /&gt;
* Kiekviena dalis yra rekursyviai rikiuojama naudojant &#039;&#039;&#039;merge sort&#039;&#039;&#039; algoritmą.&lt;br /&gt;
* Surikiuotos dvi dalys yra sujungiamos į vieną sąrašą. Sujungimo metu elementai yra palyginami ir sudedami į naują sąrašą didėjimo tvarka.&lt;br /&gt;
&lt;br /&gt;
Šis procesas yra pakartojamas tol, kol visi sąrašai yra padalinti iki vieno elemento ir tada sujungti į vieną galutinį surikiuotą sąrašą.&lt;br /&gt;
&lt;br /&gt;
Merge sort algoritmas yra efektyvus, nes dalijimo ir sujungimo žingsniai yra vykdomi daug kartų, o kiekviename žingsnyje sąrašas yra padalintas į dvi lygias dalis. Tai leidžia efektyviai rikiuoti didelius sąrašus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def merge_sort(sąrašas):&lt;br /&gt;
    # sąraše yra nulis arba vienas elementas&lt;br /&gt;
    if len(sąrašas) &amp;lt;= 1:&lt;br /&gt;
        return sąrašas&lt;br /&gt;
    &lt;br /&gt;
    # Dalinimo žingsnis: padaliname sąrašą į dvi lygias dalis&lt;br /&gt;
    vidurys = len(sąrašas) // 2&lt;br /&gt;
    kairė = sąrašas[:vidurys]&lt;br /&gt;
    dešinė = sąrašas[vidurys:]&lt;br /&gt;
    &lt;br /&gt;
    # Rekursyviai rikiuojame kiekvieną dalį&lt;br /&gt;
    kairė = merge_sort(kairė)&lt;br /&gt;
    dešinė = merge_sort(dešinė)&lt;br /&gt;
    &lt;br /&gt;
    # Sujungimo žingsnis: sujungiame surikiuotas dalis į vieną sąrašą&lt;br /&gt;
    return merge(kairė, dešinė)&lt;br /&gt;
&lt;br /&gt;
def merge(kairė, dešinė):&lt;br /&gt;
    rezultatas = []&lt;br /&gt;
    i = 0  # indeksas kairėje dalyje&lt;br /&gt;
    j = 0  # indeksas dešinėje dalyje&lt;br /&gt;
    &lt;br /&gt;
    # Lyginame ir sujungiame elementus&lt;br /&gt;
    while i &amp;lt; len(kairė) and j &amp;lt; len(dešinė):&lt;br /&gt;
        if kairė[i] &amp;lt;= dešinė[j]:&lt;br /&gt;
            rezultatas.append(kairė[i])&lt;br /&gt;
            i += 1&lt;br /&gt;
        else:&lt;br /&gt;
            rezultatas.append(dešinė[j])&lt;br /&gt;
            j += 1&lt;br /&gt;
    &lt;br /&gt;
    # Jei viena dalis baigiasi anksčiau, pridedame likusius elementus&lt;br /&gt;
    while i &amp;lt; len(kairė):&lt;br /&gt;
        rezultatas.append(kairė[i])&lt;br /&gt;
        i += 1&lt;br /&gt;
    while j &amp;lt; len(dešinė):&lt;br /&gt;
        rezultatas.append(dešinė[j])&lt;br /&gt;
        j += 1&lt;br /&gt;
    &lt;br /&gt;
    return rezultatas&lt;br /&gt;
&lt;br /&gt;
# Pavyzdys naudojant merge_sort funkciją&lt;br /&gt;
sąrašas = [3, 1, 4, 1, 5, 9, 2, 6, 5]&lt;br /&gt;
surikiuotas_sąrašas = merge_sort(sąrašas)&lt;br /&gt;
print(surikiuotas_sąrašas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis pavyzdys naudoja dvi funkcijas: &amp;lt;code&amp;gt;merge_sort&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;merge&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;merge_sort&amp;lt;/code&amp;gt; funkcija atlieka dalinimo ir rekursyvaus rikiavimo žingsnius, o &amp;lt;code&amp;gt;merge&amp;lt;/code&amp;gt; funkcija atlieka surikiuotų dalių sujungimą.&lt;br /&gt;
&lt;br /&gt;
Rezultatas šio pavyzdžio bus:&lt;br /&gt;
 [1, 1, 2, 3, 4, 5, 5, 6, 9]&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Paie%C5%A1ka_ir_Rikiavimas&amp;diff=381</id>
		<title>Vadovėlis/Paieška ir Rikiavimas</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Paie%C5%A1ka_ir_Rikiavimas&amp;diff=381"/>
		<updated>2023-06-28T13:01:51Z</updated>

		<summary type="html">&lt;p&gt;Monika: /* Burbulinis rikiavimas (Bubble sort) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Atlikęs praeito skyriaus uždavinius, jau daug žinai apie sąrašo sukūrimą ir visus bazinius sąrašo metodus. Dabar pasinaudosime įgytomis žiniomis ir susipažinsime su labai dažnai sutinkamais uždaviniais: paieška ir rikiavimas.&lt;br /&gt;
&lt;br /&gt;
= Paieška =&lt;br /&gt;
&lt;br /&gt;
Paieškos algoritmai naudojami norint rasti konkretų elementą sąraše ar duomenų masyve. Yra keletas paieškos algoritmų, tačiau parodysiu du dažniausiai naudojamus - tiesinę paiešką ir dvejetainę paiešką.&lt;br /&gt;
&lt;br /&gt;
== Tiesinė paieška ==&lt;br /&gt;
Tiesinė paieška - tai paprastas paieškos algoritmas, kuris, ieškodamas tikslinės reikšmės, peržiūri kiekvieną sąrašo elementą. Pažiūrėk į tiesinės paieškos funkcijos pavyzdį &amp;quot;Python&amp;quot; kalba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def tiesinė_paieška(sąrašas, ieškomas_žodis):&lt;br /&gt;
    for i in range(len(sąrašas)):&lt;br /&gt;
        if sąrašas[i] == ieškomas_žodis:&lt;br /&gt;
            return i&lt;br /&gt;
    return -1  # ieškomas_žodis nerastas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši funkcija priima masyvą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir tikslinę reikšmę &amp;lt;code&amp;gt;ieškomas_žodis&amp;lt;/code&amp;gt; ir grąžina tikslinės reikšmės indeksą masyve. Jei tikslinė vertė nerandama masyve, funkcija grąžina -1. Labai praprasta ir aišku.&lt;br /&gt;
&lt;br /&gt;
== Dvejetainė paieška ==&lt;br /&gt;
Kita vertus, dvejetainė paieška yra efektyvesnis paieškos algoritmas, kuris veikia tik surikiuotose masyvuose (sąrašuose). Jis veikia pakartotinai dalydamas paieškos intervalą per pusę, kol randama tikslinė reikšmė. Painu? Daug aiškiau bus pažiūrėjus šį pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def dvejetainė_paieška(sąrašas, tikslas):&lt;br /&gt;
    # išsisaugome sąrašo pirmą ir paskutinį indeksą&lt;br /&gt;
    apačia = 0&lt;br /&gt;
    viršus = len(sąrašas) - 1&lt;br /&gt;
    &lt;br /&gt;
    while apačia &amp;lt;= viršus:&lt;br /&gt;
        # atrandame vidurį pagal formulę: (pradžios indeksas + pabaigos indeksas) padalintas per pusę, be liekanos&lt;br /&gt;
        viduriukas = (apačia + viršus) // 2&lt;br /&gt;
        # patikriname, ar `viduriukas` indekse yra mūsų ieškomas tikslas, ir jį atradus grąžiname indeksą.&lt;br /&gt;
        if sąrašas[viduriukas] == tikslas:&lt;br /&gt;
            return viduriukas&lt;br /&gt;
        # jeigu ne, tai pagal tai, kurioje pusėje yra ieškomas elementas pakeičiame viršutinį arba apatinį indeksą&lt;br /&gt;
        elif sąrašas[viduriukas] &amp;lt; tikslas:&lt;br /&gt;
            apačia = viduriukas + 1&lt;br /&gt;
        else:&lt;br /&gt;
            viršus = viduriukas - 1&lt;br /&gt;
        # ir kartojame iš naujo, bet jau su nauju, per pus mažesniu rėžiu&lt;br /&gt;
    &lt;br /&gt;
    return -1  # tikslas nerastas&lt;br /&gt;
&lt;br /&gt;
sąrašas = [1,2,3,4,5,6,7,8,9,10]&lt;br /&gt;
print(dvejetainė_paieška(sąrašas, 7)) # 6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Panagrinėkim detaliai, kaip vyksta procesas. Ieškome, kur yra skaičius 7, sąraše [1,2,3,4,5,6,7,8,9,10]. Funkcijos pradžios kintamieji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 apačia = 0&lt;br /&gt;
 viršus = 9 # (ilgis 10 - 1 )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Pirmas `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 4 # (0 + 9) // 2&lt;br /&gt;
 # sąrašas[4] saugo reikšmę 5. Ne mūsų ieškomas skaičius.&lt;br /&gt;
 # kadangi tikslas yra surasti 7, tai mūsų kito ciklo metu ieškosime viršutinėje sąrašo dalyje, todėl nusistatome naują apačios reikšmę, viduriukas + 1.&lt;br /&gt;
 apačia = 5 # (4 + 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Antras `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 7 # (5 + 9) // 2&lt;br /&gt;
 # sąrašas[7] saugo reikšmę 8. Jau arčiau, bet ne dar vis ne mūsų ieškoma reikšmė 7. Nustatome šįkartą naują viršutinę reikšmę, viduriukas - 1&lt;br /&gt;
 viršus = 6 # (7 - 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Trečias `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 5 # (5 + 6) // 2&lt;br /&gt;
 # sąrašas[5] saugo reikmę 6. Vėl pro šalį. Nustatome naują apatinę reikšmę:&lt;br /&gt;
 apačia = 6 # (5 + 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ketvirtas `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 6 # (6 + 6) // 2&lt;br /&gt;
 sąrašas[6] saugo reikšmę 7. Valio! Radom. Grąžinam indeksą 7.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad dvejetainės paieškos algoritmas atrado reikšmę per 4 ciklus. Kaip manai, kiek ciklų prireiktų tiesinės paieškos algoritmui? Pasufleruosiu... Daugiau :)&lt;br /&gt;
&lt;br /&gt;
= Rikiavimas =&lt;br /&gt;
&lt;br /&gt;
Rikiavimo algoritmai naudojami duomenų sąrašui išdėstyti tam tikra tvarka. Rikiavimo algoritmų yra daug ir įvairių, bet papasakosiu tik kelis naudingiausius. Pateiktus algoritmus tu gelėsi nesunkiai pritaikyti ir kitokiems duomenų tipams, ne tik žodžiams. Bet apie tai vėliau.&lt;br /&gt;
&lt;br /&gt;
== Įterpimo rikiavimas (Insertion Sort) ==&lt;br /&gt;
&lt;br /&gt;
Įterpimo rikiavimas yra paprastas rikiavimo algoritmas, kuris veikia padalydamas sąrašą į dvi dalis: surikiuotą ir nesurikiuotą. Tada iteratyviai paimamas elementas iš nerikiuotos dalies ir įterpiamas į reikiamą vietą surikiuotoje dalyje, kol visas sąrašas surikiuojamas.&lt;br /&gt;
Pažiūrėkim, kaip tai atrodo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def įterpimo_rikiavimas(sąrašas):&lt;br /&gt;
    for i in range(1, len(sąrašas)):&lt;br /&gt;
        raktas = sąrašas[i]&lt;br /&gt;
        j = i - 1&lt;br /&gt;
        while j &amp;gt;= 0 and sąrašas[j] &amp;gt; raktas:&lt;br /&gt;
            sąrašas[j+1] = sąrašas[j]&lt;br /&gt;
            j -= 1&lt;br /&gt;
        sąrašas[j+1] = raktas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši funkcija paima sąrašą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir sutikiuoja jį didėjimo tvarka, naudodama įterpimo rikiavimą. Ji pradeda iteruoti per sąrašą nuo antrojo elemento (indeksas 1) iki galo. Kiekvieno elemento reikšmė išsaugoma kaip &amp;lt;code&amp;gt;raktas&amp;lt;/code&amp;gt;, o jo indeksas - kaip &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;, tada einama atgal per surikiuotą sąrašo dalį (nuo indekso &amp;lt;code&amp;gt;i-1&amp;lt;/code&amp;gt; iki 0) ir ieškoma tinkamos vietos rakto reikšmei įterpti. Tai daroma lyginant rakto vertę su kiekvienu išrikiuotos sąrašo dalies elementu ir perstumiant didesnius elementus viena pozicija į dešinę, kol randama tinkama pozicija. Suradęs tinkamą poziciją, į ją įterpia rakto reikšmę.&lt;br /&gt;
&lt;br /&gt;
Įterpimo rikiavimo laiko sudėtingumas blogiausiu atveju yra O(n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;), o tai reiškia, kad didelių įvesties sąrašų atveju jis gali būti lėtas. Tačiau jis turi mažesnes pridėtines išlaidas nei kai kurie kiti rikiavivmo algoritmai ir gali būti efektyvesnis už juos mažiems įvesties sąrašams arba iš dalies surikiuotiems įvesties sąrašams.&lt;br /&gt;
&lt;br /&gt;
== Burbulinis rikiavimas (Bubble sort) ==&lt;br /&gt;
Burbulinis rikiavimas - tai paprastas rikiavimo algoritmas, kuris pakartotinai pereina per sąrašą, palygina gretimus elementus ir sukeičia juos vietomis, jei jų eiliškumas netinkamas. Pažiūrėkime į burbulinio rikiavimo funkcijos pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def burbulinis_rikiavimas(sąrašas):&lt;br /&gt;
    sąrašo_ilgis = len(sąrašas)&lt;br /&gt;
&lt;br /&gt;
    for i in range(sąrašo_ilgis):&lt;br /&gt;
        for j in range(0, sąrašo_ilgis-i-1):&lt;br /&gt;
            if sąrašas[j] &amp;gt; sąrašas[j+1]:&lt;br /&gt;
                sąrašas[j], sąrašas[j+1] = sąrašas[j+1], sąrašas[j]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ši funkcija paima sąrašą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir surikiuoja jį didėjančia tvarka, naudodama burbulinį rikiavimą.&lt;br /&gt;
&lt;br /&gt;
== Greitasis rikiavimas (Quicksort) ==&lt;br /&gt;
&amp;quot;Quicksort&amp;quot; yra plačiai naudojamas rikiavimo algoritmas, kuriame taikomas &amp;quot;skaldyk ir valdyk&amp;quot; metodas. Jis veikia iš masyvo (arba sąrašo) išrenkant ašinį elementą ir kitus elementus suskirstant į du papildomus masyvus pagal tai, ar jie mažesni, ar didesni už ašinį elementą. Tada šis procesas rekursiškai kartojamas kiekviename pogrupyje.&lt;br /&gt;
&lt;br /&gt;
Štai &amp;quot;Quicksort&amp;quot; funkcijos pavyzdys &amp;quot;Python&amp;quot; kalba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def quicksort(masyvas):&lt;br /&gt;
    mažiau = []&lt;br /&gt;
    lygus = []&lt;br /&gt;
    daugiau = []&lt;br /&gt;
    if len(masyvas) &amp;gt; 1:&lt;br /&gt;
        ašis = masyvas[0]&lt;br /&gt;
        for x in masyvas:&lt;br /&gt;
            if x &amp;lt; ašis:&lt;br /&gt;
                mažiau.append(x)&lt;br /&gt;
            elif x == ašis:&lt;br /&gt;
                lygus.append(x)&lt;br /&gt;
            elif x &amp;gt; ašis:&lt;br /&gt;
                daugiau.append(x)&lt;br /&gt;
        # neužmiršk grąžinti rezultato!&lt;br /&gt;
        return quicksort(mažiau)+lygus+quicksort(daugiau)&lt;br /&gt;
    # Atkreipk dėmesį, kad naudojame `lygus`, o ne `ašis`&lt;br /&gt;
    else:  &lt;br /&gt;
        return masyvas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funkcijos parametras &amp;lt;code&amp;gt;masyvas&amp;lt;/code&amp;gt; yra sąrašas, kurį norime surikiuoti.&lt;br /&gt;
&lt;br /&gt;
Pagrindinė funkcijos dalis yra sąlyga &amp;lt;code&amp;gt;if len(masyvas) &amp;gt; 1:&amp;lt;/code&amp;gt;, kuri tikrina, ar sąraše yra daugiau nei vienas elementas. Jei sąraše yra tik vienas arba nulis elementų, tai jis jau yra surikiuotas, todėl tiesiog grąžinamas toks pat sąrašas.&lt;br /&gt;
&lt;br /&gt;
Jei sąraše yra daugiau nei vienas elementas, algoritmas tęsiasi. Pirma, parenkamas elementas &amp;lt;code&amp;gt;ašis&amp;lt;/code&amp;gt;, šiuo atveju tai yra pirmas sąrašo elementas &amp;lt;code&amp;gt;masyvas[0]&amp;lt;/code&amp;gt;. Tuomet algoritmas eina per visus sąrašo elementus ir prideda juos į tris skirtingus sąrašus (&amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lygus&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt;), priklausomai nuo to, kaip jie lyginami su &amp;lt;code&amp;gt;ašis&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra mažesnis už &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;mažiau&#039;&#039;&#039; sąrašą.&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra lygus &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;lygus&#039;&#039;&#039; sąrašą.&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra didesnis už &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;daugiau&#039;&#039;&#039; sąrašą.&lt;br /&gt;
&lt;br /&gt;
Tai vadinama &#039;&#039;dalijimo procesu&#039;&#039;. Po šio proceso turime tris naujus sąrašus: &#039;&#039;&#039;mažiau&#039;&#039;&#039;, &#039;&#039;&#039;lygus&#039;&#039;&#039; ir &#039;&#039;&#039;daugiau&#039;&#039;&#039;, kurie yra dalinai surikiuoti (mažesni už &#039;&#039;&#039;ašis&#039;&#039;&#039;, lygūs &#039;&#039;&#039;ašis&#039;&#039;&#039; ir didesni už &#039;&#039;&#039;ašis&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Toliau funkcija naudoja rekursiją ir kviečia save su &amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt; sąrašais, taip pritaikydama dalijimo ir surikiavimo procesą šiems dviejams sąrašams atskirai. Rekursyviai kviečiant save, galiausiai bus pasiektas atvejis, kai sąrašai &amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt; bus sudaryti iš nulio arba vieno elemento, o tai reiškia, kad jie jau surikiuoti. Tada funkcija grąžina sudėtą sąrašą: &amp;lt;code&amp;gt;quicksort(mažiau) + lygus + quicksort(daugiau)&amp;lt;/code&amp;gt;, kuris sudarys pilnai surikiuotą sąrašą.&lt;br /&gt;
&lt;br /&gt;
Galutinis rezultatas yra surikiuotas sąrašas, kuris yra grąžinamas iš pradinių sąrašų iškvietimo vietos.&lt;br /&gt;
&lt;br /&gt;
Pvz. jei iškviečiame funkciją &amp;lt;code&amp;gt;quicksort([3, 1, 4, 1, 5, 9, 2, 6, 5])&amp;lt;/code&amp;gt;, tai gražins &amp;lt;code&amp;gt;[1, 1, 2, 3, 4, 5, 5, 6, 9]&amp;lt;/code&amp;gt;, kuris yra pradinis sąrašas surikiuotas didėjimo tvarka.&lt;br /&gt;
&lt;br /&gt;
== Suliejimo rikiavimas (Merge sort) ==&lt;br /&gt;
&amp;quot;Merge sort&amp;quot; yra rikiavimo algoritmas, kuris veikia pagal dalinimo ir sujungimo principą. Tai efektyvus algoritmas, kuris naudoja rekursiją.&lt;br /&gt;
&lt;br /&gt;
Merge sort algoritmas veikia taip:&lt;br /&gt;
* Jei sąraše yra nulis arba vienas elementas, tai jis jau yra surikiuotas. Grąžinamas tas pats sąrašas.&lt;br /&gt;
* Jei sąraše yra daugiau nei vienas elementas, sąrašas yra padalinamas į dvi lygias dalis.&lt;br /&gt;
* Kiekviena dalis yra rekursyviai rikiuojama naudojant &#039;&#039;&#039;merge sort&#039;&#039;&#039; algoritmą.&lt;br /&gt;
* Surikiuotos dvi dalys yra sujungiamos į vieną sąrašą. Sujungimo metu elementai yra palyginami ir sudedami į naują sąrašą didėjimo tvarka.&lt;br /&gt;
&lt;br /&gt;
Šis procesas yra pakartojamas tol, kol visi sąrašai yra padalinti iki vieno elemento ir tada sujungti į vieną galutinį surikiuotą sąrašą.&lt;br /&gt;
&lt;br /&gt;
Merge sort algoritmas yra efektyvus, nes dalijimo ir sujungimo žingsniai yra vykdomi daug kartų, o kiekviename žingsnyje sąrašas yra padalintas į dvi lygias dalis. Tai leidžia efektyviai rikiuoti didelius sąrašus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def merge_sort(sąrašas):&lt;br /&gt;
    # sąraše yra nulis arba vienas elementas&lt;br /&gt;
    if len(sąrašas) &amp;lt;= 1:&lt;br /&gt;
        return sąrašas&lt;br /&gt;
    &lt;br /&gt;
    # Dalinimo žingsnis: padaliname sąrašą į dvi lygias dalis&lt;br /&gt;
    vidurys = len(sąrašas) // 2&lt;br /&gt;
    kairė = sąrašas[:vidurys]&lt;br /&gt;
    dešinė = sąrašas[vidurys:]&lt;br /&gt;
    &lt;br /&gt;
    # Rekursyviai rikiuojame kiekvieną dalį&lt;br /&gt;
    kairė = merge_sort(kairė)&lt;br /&gt;
    dešinė = merge_sort(dešinė)&lt;br /&gt;
    &lt;br /&gt;
    # Sujungimo žingsnis: sujungiame surikiuotas dalis į vieną sąrašą&lt;br /&gt;
    return merge(kairė, dešinė)&lt;br /&gt;
&lt;br /&gt;
def merge(kairė, dešinė):&lt;br /&gt;
    rezultatas = []&lt;br /&gt;
    i = 0  # indeksas kairėje dalyje&lt;br /&gt;
    j = 0  # indeksas dešinėje dalyje&lt;br /&gt;
    &lt;br /&gt;
    # Lyginame ir sujungiame elementus&lt;br /&gt;
    while i &amp;lt; len(kairė) and j &amp;lt; len(dešinė):&lt;br /&gt;
        if kairė[i] &amp;lt;= dešinė[j]:&lt;br /&gt;
            rezultatas.append(kairė[i])&lt;br /&gt;
            i += 1&lt;br /&gt;
        else:&lt;br /&gt;
            rezultatas.append(dešinė[j])&lt;br /&gt;
            j += 1&lt;br /&gt;
    &lt;br /&gt;
    # Jei viena dalis baigiasi anksčiau, pridedame likusius elementus&lt;br /&gt;
    while i &amp;lt; len(kairė):&lt;br /&gt;
        rezultatas.append(kairė[i])&lt;br /&gt;
        i += 1&lt;br /&gt;
    while j &amp;lt; len(dešinė):&lt;br /&gt;
        rezultatas.append(dešinė[j])&lt;br /&gt;
        j += 1&lt;br /&gt;
    &lt;br /&gt;
    return rezultatas&lt;br /&gt;
&lt;br /&gt;
# Pavyzdys naudojant merge_sort funkciją&lt;br /&gt;
sąrašas = [3, 1, 4, 1, 5, 9, 2, 6, 5]&lt;br /&gt;
surikiuotas_sąrašas = merge_sort(sąrašas)&lt;br /&gt;
print(surikiuotas_sąrašas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis pavyzdys naudoja dvi funkcijas: &amp;lt;code&amp;gt;merge_sort&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;merge&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;merge_sort&amp;lt;/code&amp;gt; funkcija atlieka dalinimo ir rekursyvaus rikiavimo žingsnius, o &amp;lt;code&amp;gt;merge&amp;lt;/code&amp;gt; funkcija atlieka surikiuotų dalių sujungimą.&lt;br /&gt;
&lt;br /&gt;
Rezultatas šio pavyzdžio bus:&lt;br /&gt;
 [1, 1, 2, 3, 4, 5, 5, 6, 9]&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Paie%C5%A1ka_ir_Rikiavimas&amp;diff=380</id>
		<title>Vadovėlis/Paieška ir Rikiavimas</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Paie%C5%A1ka_ir_Rikiavimas&amp;diff=380"/>
		<updated>2023-06-28T13:01:19Z</updated>

		<summary type="html">&lt;p&gt;Monika: /* Burbulinis rikiavimas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Atlikęs praeito skyriaus uždavinius, jau daug žinai apie sąrašo sukūrimą ir visus bazinius sąrašo metodus. Dabar pasinaudosime įgytomis žiniomis ir susipažinsime su labai dažnai sutinkamais uždaviniais: paieška ir rikiavimas.&lt;br /&gt;
&lt;br /&gt;
= Paieška =&lt;br /&gt;
&lt;br /&gt;
Paieškos algoritmai naudojami norint rasti konkretų elementą sąraše ar duomenų masyve. Yra keletas paieškos algoritmų, tačiau parodysiu du dažniausiai naudojamus - tiesinę paiešką ir dvejetainę paiešką.&lt;br /&gt;
&lt;br /&gt;
== Tiesinė paieška ==&lt;br /&gt;
Tiesinė paieška - tai paprastas paieškos algoritmas, kuris, ieškodamas tikslinės reikšmės, peržiūri kiekvieną sąrašo elementą. Pažiūrėk į tiesinės paieškos funkcijos pavyzdį &amp;quot;Python&amp;quot; kalba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def tiesinė_paieška(sąrašas, ieškomas_žodis):&lt;br /&gt;
    for i in range(len(sąrašas)):&lt;br /&gt;
        if sąrašas[i] == ieškomas_žodis:&lt;br /&gt;
            return i&lt;br /&gt;
    return -1  # ieškomas_žodis nerastas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši funkcija priima masyvą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir tikslinę reikšmę &amp;lt;code&amp;gt;ieškomas_žodis&amp;lt;/code&amp;gt; ir grąžina tikslinės reikšmės indeksą masyve. Jei tikslinė vertė nerandama masyve, funkcija grąžina -1. Labai praprasta ir aišku.&lt;br /&gt;
&lt;br /&gt;
== Dvejetainė paieška ==&lt;br /&gt;
Kita vertus, dvejetainė paieška yra efektyvesnis paieškos algoritmas, kuris veikia tik surikiuotose masyvuose (sąrašuose). Jis veikia pakartotinai dalydamas paieškos intervalą per pusę, kol randama tikslinė reikšmė. Painu? Daug aiškiau bus pažiūrėjus šį pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def dvejetainė_paieška(sąrašas, tikslas):&lt;br /&gt;
    # išsisaugome sąrašo pirmą ir paskutinį indeksą&lt;br /&gt;
    apačia = 0&lt;br /&gt;
    viršus = len(sąrašas) - 1&lt;br /&gt;
    &lt;br /&gt;
    while apačia &amp;lt;= viršus:&lt;br /&gt;
        # atrandame vidurį pagal formulę: (pradžios indeksas + pabaigos indeksas) padalintas per pusę, be liekanos&lt;br /&gt;
        viduriukas = (apačia + viršus) // 2&lt;br /&gt;
        # patikriname, ar `viduriukas` indekse yra mūsų ieškomas tikslas, ir jį atradus grąžiname indeksą.&lt;br /&gt;
        if sąrašas[viduriukas] == tikslas:&lt;br /&gt;
            return viduriukas&lt;br /&gt;
        # jeigu ne, tai pagal tai, kurioje pusėje yra ieškomas elementas pakeičiame viršutinį arba apatinį indeksą&lt;br /&gt;
        elif sąrašas[viduriukas] &amp;lt; tikslas:&lt;br /&gt;
            apačia = viduriukas + 1&lt;br /&gt;
        else:&lt;br /&gt;
            viršus = viduriukas - 1&lt;br /&gt;
        # ir kartojame iš naujo, bet jau su nauju, per pus mažesniu rėžiu&lt;br /&gt;
    &lt;br /&gt;
    return -1  # tikslas nerastas&lt;br /&gt;
&lt;br /&gt;
sąrašas = [1,2,3,4,5,6,7,8,9,10]&lt;br /&gt;
print(dvejetainė_paieška(sąrašas, 7)) # 6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Panagrinėkim detaliai, kaip vyksta procesas. Ieškome, kur yra skaičius 7, sąraše [1,2,3,4,5,6,7,8,9,10]. Funkcijos pradžios kintamieji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 apačia = 0&lt;br /&gt;
 viršus = 9 # (ilgis 10 - 1 )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Pirmas `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 4 # (0 + 9) // 2&lt;br /&gt;
 # sąrašas[4] saugo reikšmę 5. Ne mūsų ieškomas skaičius.&lt;br /&gt;
 # kadangi tikslas yra surasti 7, tai mūsų kito ciklo metu ieškosime viršutinėje sąrašo dalyje, todėl nusistatome naują apačios reikšmę, viduriukas + 1.&lt;br /&gt;
 apačia = 5 # (4 + 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Antras `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 7 # (5 + 9) // 2&lt;br /&gt;
 # sąrašas[7] saugo reikšmę 8. Jau arčiau, bet ne dar vis ne mūsų ieškoma reikšmė 7. Nustatome šįkartą naują viršutinę reikšmę, viduriukas - 1&lt;br /&gt;
 viršus = 6 # (7 - 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Trečias `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 5 # (5 + 6) // 2&lt;br /&gt;
 # sąrašas[5] saugo reikmę 6. Vėl pro šalį. Nustatome naują apatinę reikšmę:&lt;br /&gt;
 apačia = 6 # (5 + 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ketvirtas `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 6 # (6 + 6) // 2&lt;br /&gt;
 sąrašas[6] saugo reikšmę 7. Valio! Radom. Grąžinam indeksą 7.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad dvejetainės paieškos algoritmas atrado reikšmę per 4 ciklus. Kaip manai, kiek ciklų prireiktų tiesinės paieškos algoritmui? Pasufleruosiu... Daugiau :)&lt;br /&gt;
&lt;br /&gt;
= Rikiavimas =&lt;br /&gt;
&lt;br /&gt;
Rikiavimo algoritmai naudojami duomenų sąrašui išdėstyti tam tikra tvarka. Rikiavimo algoritmų yra daug ir įvairių, bet papasakosiu tik kelis naudingiausius. Pateiktus algoritmus tu gelėsi nesunkiai pritaikyti ir kitokiems duomenų tipams, ne tik žodžiams. Bet apie tai vėliau.&lt;br /&gt;
&lt;br /&gt;
== Įterpimo rikiavimas (Insertion Sort) ==&lt;br /&gt;
&lt;br /&gt;
Įterpimo rikiavimas yra paprastas rikiavimo algoritmas, kuris veikia padalydamas sąrašą į dvi dalis: surikiuotą ir nesurikiuotą. Tada iteratyviai paimamas elementas iš nerikiuotos dalies ir įterpiamas į reikiamą vietą surikiuotoje dalyje, kol visas sąrašas surikiuojamas.&lt;br /&gt;
Pažiūrėkim, kaip tai atrodo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def įterpimo_rikiavimas(sąrašas):&lt;br /&gt;
    for i in range(1, len(sąrašas)):&lt;br /&gt;
        raktas = sąrašas[i]&lt;br /&gt;
        j = i - 1&lt;br /&gt;
        while j &amp;gt;= 0 and sąrašas[j] &amp;gt; raktas:&lt;br /&gt;
            sąrašas[j+1] = sąrašas[j]&lt;br /&gt;
            j -= 1&lt;br /&gt;
        sąrašas[j+1] = raktas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši funkcija paima sąrašą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir sutikiuoja jį didėjimo tvarka, naudodama įterpimo rikiavimą. Ji pradeda iteruoti per sąrašą nuo antrojo elemento (indeksas 1) iki galo. Kiekvieno elemento reikšmė išsaugoma kaip &amp;lt;code&amp;gt;raktas&amp;lt;/code&amp;gt;, o jo indeksas - kaip &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;, tada einama atgal per surikiuotą sąrašo dalį (nuo indekso &amp;lt;code&amp;gt;i-1&amp;lt;/code&amp;gt; iki 0) ir ieškoma tinkamos vietos rakto reikšmei įterpti. Tai daroma lyginant rakto vertę su kiekvienu išrikiuotos sąrašo dalies elementu ir perstumiant didesnius elementus viena pozicija į dešinę, kol randama tinkama pozicija. Suradęs tinkamą poziciją, į ją įterpia rakto reikšmę.&lt;br /&gt;
&lt;br /&gt;
Įterpimo rikiavimo laiko sudėtingumas blogiausiu atveju yra O(n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;), o tai reiškia, kad didelių įvesties sąrašų atveju jis gali būti lėtas. Tačiau jis turi mažesnes pridėtines išlaidas nei kai kurie kiti rikiavivmo algoritmai ir gali būti efektyvesnis už juos mažiems įvesties sąrašams arba iš dalies surikiuotiems įvesties sąrašams.&lt;br /&gt;
&lt;br /&gt;
== Burbulinis rikiavimas (Bubble sort) ==&lt;br /&gt;
Burbulinis rikiavimas - tai paprastas rikiavimo algoritmas, kuris pakartotinai pereina per sąrašą, palygina gretimus elementus ir sukeičia juos vietomis, jei jų eiliškumas netinkamas. Pažiūrėkim burbulinio rikiavimo funkcijos pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def burbulinis_rikiavimas(sąrašas):&lt;br /&gt;
    sąrašo_ilgis = len(sąrašas)&lt;br /&gt;
&lt;br /&gt;
    for i in range(sąrašo_ilgis):&lt;br /&gt;
        for j in range(0, sąrašo_ilgis-i-1):&lt;br /&gt;
            if sąrašas[j] &amp;gt; sąrašas[j+1]:&lt;br /&gt;
                sąrašas[j], sąrašas[j+1] = sąrašas[j+1], sąrašas[j]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ši funkcija paima sąrašą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir surikiuoja jį didėjančia tvarka, naudodama burbulinį rikiavimą.&lt;br /&gt;
&lt;br /&gt;
== Greitasis rikiavimas (Quicksort) ==&lt;br /&gt;
&amp;quot;Quicksort&amp;quot; yra plačiai naudojamas rikiavimo algoritmas, kuriame taikomas &amp;quot;skaldyk ir valdyk&amp;quot; metodas. Jis veikia iš masyvo (arba sąrašo) išrenkant ašinį elementą ir kitus elementus suskirstant į du papildomus masyvus pagal tai, ar jie mažesni, ar didesni už ašinį elementą. Tada šis procesas rekursiškai kartojamas kiekviename pogrupyje.&lt;br /&gt;
&lt;br /&gt;
Štai &amp;quot;Quicksort&amp;quot; funkcijos pavyzdys &amp;quot;Python&amp;quot; kalba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def quicksort(masyvas):&lt;br /&gt;
    mažiau = []&lt;br /&gt;
    lygus = []&lt;br /&gt;
    daugiau = []&lt;br /&gt;
    if len(masyvas) &amp;gt; 1:&lt;br /&gt;
        ašis = masyvas[0]&lt;br /&gt;
        for x in masyvas:&lt;br /&gt;
            if x &amp;lt; ašis:&lt;br /&gt;
                mažiau.append(x)&lt;br /&gt;
            elif x == ašis:&lt;br /&gt;
                lygus.append(x)&lt;br /&gt;
            elif x &amp;gt; ašis:&lt;br /&gt;
                daugiau.append(x)&lt;br /&gt;
        # neužmiršk grąžinti rezultato!&lt;br /&gt;
        return quicksort(mažiau)+lygus+quicksort(daugiau)&lt;br /&gt;
    # Atkreipk dėmesį, kad naudojame `lygus`, o ne `ašis`&lt;br /&gt;
    else:  &lt;br /&gt;
        return masyvas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funkcijos parametras &amp;lt;code&amp;gt;masyvas&amp;lt;/code&amp;gt; yra sąrašas, kurį norime surikiuoti.&lt;br /&gt;
&lt;br /&gt;
Pagrindinė funkcijos dalis yra sąlyga &amp;lt;code&amp;gt;if len(masyvas) &amp;gt; 1:&amp;lt;/code&amp;gt;, kuri tikrina, ar sąraše yra daugiau nei vienas elementas. Jei sąraše yra tik vienas arba nulis elementų, tai jis jau yra surikiuotas, todėl tiesiog grąžinamas toks pat sąrašas.&lt;br /&gt;
&lt;br /&gt;
Jei sąraše yra daugiau nei vienas elementas, algoritmas tęsiasi. Pirma, parenkamas elementas &amp;lt;code&amp;gt;ašis&amp;lt;/code&amp;gt;, šiuo atveju tai yra pirmas sąrašo elementas &amp;lt;code&amp;gt;masyvas[0]&amp;lt;/code&amp;gt;. Tuomet algoritmas eina per visus sąrašo elementus ir prideda juos į tris skirtingus sąrašus (&amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lygus&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt;), priklausomai nuo to, kaip jie lyginami su &amp;lt;code&amp;gt;ašis&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra mažesnis už &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;mažiau&#039;&#039;&#039; sąrašą.&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra lygus &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;lygus&#039;&#039;&#039; sąrašą.&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra didesnis už &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;daugiau&#039;&#039;&#039; sąrašą.&lt;br /&gt;
&lt;br /&gt;
Tai vadinama &#039;&#039;dalijimo procesu&#039;&#039;. Po šio proceso turime tris naujus sąrašus: &#039;&#039;&#039;mažiau&#039;&#039;&#039;, &#039;&#039;&#039;lygus&#039;&#039;&#039; ir &#039;&#039;&#039;daugiau&#039;&#039;&#039;, kurie yra dalinai surikiuoti (mažesni už &#039;&#039;&#039;ašis&#039;&#039;&#039;, lygūs &#039;&#039;&#039;ašis&#039;&#039;&#039; ir didesni už &#039;&#039;&#039;ašis&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Toliau funkcija naudoja rekursiją ir kviečia save su &amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt; sąrašais, taip pritaikydama dalijimo ir surikiavimo procesą šiems dviejams sąrašams atskirai. Rekursyviai kviečiant save, galiausiai bus pasiektas atvejis, kai sąrašai &amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt; bus sudaryti iš nulio arba vieno elemento, o tai reiškia, kad jie jau surikiuoti. Tada funkcija grąžina sudėtą sąrašą: &amp;lt;code&amp;gt;quicksort(mažiau) + lygus + quicksort(daugiau)&amp;lt;/code&amp;gt;, kuris sudarys pilnai surikiuotą sąrašą.&lt;br /&gt;
&lt;br /&gt;
Galutinis rezultatas yra surikiuotas sąrašas, kuris yra grąžinamas iš pradinių sąrašų iškvietimo vietos.&lt;br /&gt;
&lt;br /&gt;
Pvz. jei iškviečiame funkciją &amp;lt;code&amp;gt;quicksort([3, 1, 4, 1, 5, 9, 2, 6, 5])&amp;lt;/code&amp;gt;, tai gražins &amp;lt;code&amp;gt;[1, 1, 2, 3, 4, 5, 5, 6, 9]&amp;lt;/code&amp;gt;, kuris yra pradinis sąrašas surikiuotas didėjimo tvarka.&lt;br /&gt;
&lt;br /&gt;
== Suliejimo rikiavimas (Merge sort) ==&lt;br /&gt;
&amp;quot;Merge sort&amp;quot; yra rikiavimo algoritmas, kuris veikia pagal dalinimo ir sujungimo principą. Tai efektyvus algoritmas, kuris naudoja rekursiją.&lt;br /&gt;
&lt;br /&gt;
Merge sort algoritmas veikia taip:&lt;br /&gt;
* Jei sąraše yra nulis arba vienas elementas, tai jis jau yra surikiuotas. Grąžinamas tas pats sąrašas.&lt;br /&gt;
* Jei sąraše yra daugiau nei vienas elementas, sąrašas yra padalinamas į dvi lygias dalis.&lt;br /&gt;
* Kiekviena dalis yra rekursyviai rikiuojama naudojant &#039;&#039;&#039;merge sort&#039;&#039;&#039; algoritmą.&lt;br /&gt;
* Surikiuotos dvi dalys yra sujungiamos į vieną sąrašą. Sujungimo metu elementai yra palyginami ir sudedami į naują sąrašą didėjimo tvarka.&lt;br /&gt;
&lt;br /&gt;
Šis procesas yra pakartojamas tol, kol visi sąrašai yra padalinti iki vieno elemento ir tada sujungti į vieną galutinį surikiuotą sąrašą.&lt;br /&gt;
&lt;br /&gt;
Merge sort algoritmas yra efektyvus, nes dalijimo ir sujungimo žingsniai yra vykdomi daug kartų, o kiekviename žingsnyje sąrašas yra padalintas į dvi lygias dalis. Tai leidžia efektyviai rikiuoti didelius sąrašus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def merge_sort(sąrašas):&lt;br /&gt;
    # sąraše yra nulis arba vienas elementas&lt;br /&gt;
    if len(sąrašas) &amp;lt;= 1:&lt;br /&gt;
        return sąrašas&lt;br /&gt;
    &lt;br /&gt;
    # Dalinimo žingsnis: padaliname sąrašą į dvi lygias dalis&lt;br /&gt;
    vidurys = len(sąrašas) // 2&lt;br /&gt;
    kairė = sąrašas[:vidurys]&lt;br /&gt;
    dešinė = sąrašas[vidurys:]&lt;br /&gt;
    &lt;br /&gt;
    # Rekursyviai rikiuojame kiekvieną dalį&lt;br /&gt;
    kairė = merge_sort(kairė)&lt;br /&gt;
    dešinė = merge_sort(dešinė)&lt;br /&gt;
    &lt;br /&gt;
    # Sujungimo žingsnis: sujungiame surikiuotas dalis į vieną sąrašą&lt;br /&gt;
    return merge(kairė, dešinė)&lt;br /&gt;
&lt;br /&gt;
def merge(kairė, dešinė):&lt;br /&gt;
    rezultatas = []&lt;br /&gt;
    i = 0  # indeksas kairėje dalyje&lt;br /&gt;
    j = 0  # indeksas dešinėje dalyje&lt;br /&gt;
    &lt;br /&gt;
    # Lyginame ir sujungiame elementus&lt;br /&gt;
    while i &amp;lt; len(kairė) and j &amp;lt; len(dešinė):&lt;br /&gt;
        if kairė[i] &amp;lt;= dešinė[j]:&lt;br /&gt;
            rezultatas.append(kairė[i])&lt;br /&gt;
            i += 1&lt;br /&gt;
        else:&lt;br /&gt;
            rezultatas.append(dešinė[j])&lt;br /&gt;
            j += 1&lt;br /&gt;
    &lt;br /&gt;
    # Jei viena dalis baigiasi anksčiau, pridedame likusius elementus&lt;br /&gt;
    while i &amp;lt; len(kairė):&lt;br /&gt;
        rezultatas.append(kairė[i])&lt;br /&gt;
        i += 1&lt;br /&gt;
    while j &amp;lt; len(dešinė):&lt;br /&gt;
        rezultatas.append(dešinė[j])&lt;br /&gt;
        j += 1&lt;br /&gt;
    &lt;br /&gt;
    return rezultatas&lt;br /&gt;
&lt;br /&gt;
# Pavyzdys naudojant merge_sort funkciją&lt;br /&gt;
sąrašas = [3, 1, 4, 1, 5, 9, 2, 6, 5]&lt;br /&gt;
surikiuotas_sąrašas = merge_sort(sąrašas)&lt;br /&gt;
print(surikiuotas_sąrašas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis pavyzdys naudoja dvi funkcijas: &amp;lt;code&amp;gt;merge_sort&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;merge&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;merge_sort&amp;lt;/code&amp;gt; funkcija atlieka dalinimo ir rekursyvaus rikiavimo žingsnius, o &amp;lt;code&amp;gt;merge&amp;lt;/code&amp;gt; funkcija atlieka surikiuotų dalių sujungimą.&lt;br /&gt;
&lt;br /&gt;
Rezultatas šio pavyzdžio bus:&lt;br /&gt;
 [1, 1, 2, 3, 4, 5, 5, 6, 9]&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Paie%C5%A1ka_ir_Rikiavimas&amp;diff=379</id>
		<title>Vadovėlis/Paieška ir Rikiavimas</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Paie%C5%A1ka_ir_Rikiavimas&amp;diff=379"/>
		<updated>2023-06-28T12:59:17Z</updated>

		<summary type="html">&lt;p&gt;Monika: /* Dvejetainė paieška */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Atlikęs praeito skyriaus uždavinius, jau daug žinai apie sąrašo sukūrimą ir visus bazinius sąrašo metodus. Dabar pasinaudosime įgytomis žiniomis ir susipažinsime su labai dažnai sutinkamais uždaviniais: paieška ir rikiavimas.&lt;br /&gt;
&lt;br /&gt;
= Paieška =&lt;br /&gt;
&lt;br /&gt;
Paieškos algoritmai naudojami norint rasti konkretų elementą sąraše ar duomenų masyve. Yra keletas paieškos algoritmų, tačiau parodysiu du dažniausiai naudojamus - tiesinę paiešką ir dvejetainę paiešką.&lt;br /&gt;
&lt;br /&gt;
== Tiesinė paieška ==&lt;br /&gt;
Tiesinė paieška - tai paprastas paieškos algoritmas, kuris, ieškodamas tikslinės reikšmės, peržiūri kiekvieną sąrašo elementą. Pažiūrėk į tiesinės paieškos funkcijos pavyzdį &amp;quot;Python&amp;quot; kalba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def tiesinė_paieška(sąrašas, ieškomas_žodis):&lt;br /&gt;
    for i in range(len(sąrašas)):&lt;br /&gt;
        if sąrašas[i] == ieškomas_žodis:&lt;br /&gt;
            return i&lt;br /&gt;
    return -1  # ieškomas_žodis nerastas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši funkcija priima masyvą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir tikslinę reikšmę &amp;lt;code&amp;gt;ieškomas_žodis&amp;lt;/code&amp;gt; ir grąžina tikslinės reikšmės indeksą masyve. Jei tikslinė vertė nerandama masyve, funkcija grąžina -1. Labai praprasta ir aišku.&lt;br /&gt;
&lt;br /&gt;
== Dvejetainė paieška ==&lt;br /&gt;
Kita vertus, dvejetainė paieška yra efektyvesnis paieškos algoritmas, kuris veikia tik surikiuotose masyvuose (sąrašuose). Jis veikia pakartotinai dalydamas paieškos intervalą per pusę, kol randama tikslinė reikšmė. Painu? Daug aiškiau bus pažiūrėjus šį pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def dvejetainė_paieška(sąrašas, tikslas):&lt;br /&gt;
    # išsisaugome sąrašo pirmą ir paskutinį indeksą&lt;br /&gt;
    apačia = 0&lt;br /&gt;
    viršus = len(sąrašas) - 1&lt;br /&gt;
    &lt;br /&gt;
    while apačia &amp;lt;= viršus:&lt;br /&gt;
        # atrandame vidurį pagal formulę: (pradžios indeksas + pabaigos indeksas) padalintas per pusę, be liekanos&lt;br /&gt;
        viduriukas = (apačia + viršus) // 2&lt;br /&gt;
        # patikriname, ar `viduriukas` indekse yra mūsų ieškomas tikslas, ir jį atradus grąžiname indeksą.&lt;br /&gt;
        if sąrašas[viduriukas] == tikslas:&lt;br /&gt;
            return viduriukas&lt;br /&gt;
        # jeigu ne, tai pagal tai, kurioje pusėje yra ieškomas elementas pakeičiame viršutinį arba apatinį indeksą&lt;br /&gt;
        elif sąrašas[viduriukas] &amp;lt; tikslas:&lt;br /&gt;
            apačia = viduriukas + 1&lt;br /&gt;
        else:&lt;br /&gt;
            viršus = viduriukas - 1&lt;br /&gt;
        # ir kartojame iš naujo, bet jau su nauju, per pus mažesniu rėžiu&lt;br /&gt;
    &lt;br /&gt;
    return -1  # tikslas nerastas&lt;br /&gt;
&lt;br /&gt;
sąrašas = [1,2,3,4,5,6,7,8,9,10]&lt;br /&gt;
print(dvejetainė_paieška(sąrašas, 7)) # 6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Panagrinėkim detaliai, kaip vyksta procesas. Ieškome, kur yra skaičius 7, sąraše [1,2,3,4,5,6,7,8,9,10]. Funkcijos pradžios kintamieji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 apačia = 0&lt;br /&gt;
 viršus = 9 # (ilgis 10 - 1 )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Pirmas `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 4 # (0 + 9) // 2&lt;br /&gt;
 # sąrašas[4] saugo reikšmę 5. Ne mūsų ieškomas skaičius.&lt;br /&gt;
 # kadangi tikslas yra surasti 7, tai mūsų kito ciklo metu ieškosime viršutinėje sąrašo dalyje, todėl nusistatome naują apačios reikšmę, viduriukas + 1.&lt;br /&gt;
 apačia = 5 # (4 + 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Antras `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 7 # (5 + 9) // 2&lt;br /&gt;
 # sąrašas[7] saugo reikšmę 8. Jau arčiau, bet ne dar vis ne mūsų ieškoma reikšmė 7. Nustatome šįkartą naują viršutinę reikšmę, viduriukas - 1&lt;br /&gt;
 viršus = 6 # (7 - 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Trečias `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 5 # (5 + 6) // 2&lt;br /&gt;
 # sąrašas[5] saugo reikmę 6. Vėl pro šalį. Nustatome naują apatinę reikšmę:&lt;br /&gt;
 apačia = 6 # (5 + 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ketvirtas `while` ciklas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 viduriukas = 6 # (6 + 6) // 2&lt;br /&gt;
 sąrašas[6] saugo reikšmę 7. Valio! Radom. Grąžinam indeksą 7.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad dvejetainės paieškos algoritmas atrado reikšmę per 4 ciklus. Kaip manai, kiek ciklų prireiktų tiesinės paieškos algoritmui? Pasufleruosiu... Daugiau :)&lt;br /&gt;
&lt;br /&gt;
= Rikiavimas =&lt;br /&gt;
&lt;br /&gt;
Rikiavimo algoritmai naudojami duomenų sąrašui išdėstyti tam tikra tvarka. Rikiavimo algoritmų yra daug ir įvairių, bet papasakosiu tik kelis naudingiausius. Pateiktus algoritmus tu gelėsi nesunkiai pritaikyti ir kitokiems duomenų tipams, ne tik žodžiams. Bet apie tai vėliau.&lt;br /&gt;
&lt;br /&gt;
== Įterpimo rikiavimas (Insertion Sort) ==&lt;br /&gt;
&lt;br /&gt;
Įterpimo rikiavimas yra paprastas rikiavimo algoritmas, kuris veikia padalydamas sąrašą į dvi dalis: surikiuotą ir nesurikiuotą. Tada iteratyviai paimamas elementas iš nerikiuotos dalies ir įterpiamas į reikiamą vietą surikiuotoje dalyje, kol visas sąrašas surikiuojamas.&lt;br /&gt;
Pažiūrėkim, kaip tai atrodo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def įterpimo_rikiavimas(sąrašas):&lt;br /&gt;
    for i in range(1, len(sąrašas)):&lt;br /&gt;
        raktas = sąrašas[i]&lt;br /&gt;
        j = i - 1&lt;br /&gt;
        while j &amp;gt;= 0 and sąrašas[j] &amp;gt; raktas:&lt;br /&gt;
            sąrašas[j+1] = sąrašas[j]&lt;br /&gt;
            j -= 1&lt;br /&gt;
        sąrašas[j+1] = raktas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši funkcija paima sąrašą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir sutikiuoja jį didėjimo tvarka, naudodama įterpimo rikiavimą. Ji pradeda iteruoti per sąrašą nuo antrojo elemento (indeksas 1) iki galo. Kiekvieno elemento reikšmė išsaugoma kaip &amp;lt;code&amp;gt;raktas&amp;lt;/code&amp;gt;, o jo indeksas - kaip &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;, tada einama atgal per surikiuotą sąrašo dalį (nuo indekso &amp;lt;code&amp;gt;i-1&amp;lt;/code&amp;gt; iki 0) ir ieškoma tinkamos vietos rakto reikšmei įterpti. Tai daroma lyginant rakto vertę su kiekvienu išrikiuotos sąrašo dalies elementu ir perstumiant didesnius elementus viena pozicija į dešinę, kol randama tinkama pozicija. Suradęs tinkamą poziciją, į ją įterpia rakto reikšmę.&lt;br /&gt;
&lt;br /&gt;
Įterpimo rikiavimo laiko sudėtingumas blogiausiu atveju yra O(n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;), o tai reiškia, kad didelių įvesties sąrašų atveju jis gali būti lėtas. Tačiau jis turi mažesnes pridėtines išlaidas nei kai kurie kiti rikiavivmo algoritmai ir gali būti efektyvesnis už juos mažiems įvesties sąrašams arba iš dalies surikiuotiems įvesties sąrašams.&lt;br /&gt;
&lt;br /&gt;
== Burbulinis rikiavimas ==&lt;br /&gt;
Burbulinis rikiavimas ( angliškai &amp;quot;Bubble sort&amp;quot; ) - tai paprastas rikiavimo algoritmas, kuris pakartotinai pereina per sąrašą, palygina gretimus elementus ir sukeičia juos vietomis, jei jų eiliškumas netinkamas. Pažiūrėkim burbulinio rikiavimo funkcijos pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def burbulinis_rikiavimas(sąrašas):&lt;br /&gt;
    sąrašo_ilgis = len(sąrašas)&lt;br /&gt;
&lt;br /&gt;
    for i in range(sąrašo_ilgis):&lt;br /&gt;
        for j in range(0, sąrašo_ilgis-i-1):&lt;br /&gt;
            if sąrašas[j] &amp;gt; sąrašas[j+1]:&lt;br /&gt;
                sąrašas[j], sąrašas[j+1] = sąrašas[j+1], sąrašas[j]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ši funkcija paima sąrašą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir surikiuoja jį didėjančia tvarka, naudodama burbulinį rikiavimą.&lt;br /&gt;
&lt;br /&gt;
== Greitasis rikiavimas (Quicksort) ==&lt;br /&gt;
&amp;quot;Quicksort&amp;quot; yra plačiai naudojamas rikiavimo algoritmas, kuriame taikomas &amp;quot;skaldyk ir valdyk&amp;quot; metodas. Jis veikia iš masyvo (arba sąrašo) išrenkant ašinį elementą ir kitus elementus suskirstant į du papildomus masyvus pagal tai, ar jie mažesni, ar didesni už ašinį elementą. Tada šis procesas rekursiškai kartojamas kiekviename pogrupyje.&lt;br /&gt;
&lt;br /&gt;
Štai &amp;quot;Quicksort&amp;quot; funkcijos pavyzdys &amp;quot;Python&amp;quot; kalba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def quicksort(masyvas):&lt;br /&gt;
    mažiau = []&lt;br /&gt;
    lygus = []&lt;br /&gt;
    daugiau = []&lt;br /&gt;
    if len(masyvas) &amp;gt; 1:&lt;br /&gt;
        ašis = masyvas[0]&lt;br /&gt;
        for x in masyvas:&lt;br /&gt;
            if x &amp;lt; ašis:&lt;br /&gt;
                mažiau.append(x)&lt;br /&gt;
            elif x == ašis:&lt;br /&gt;
                lygus.append(x)&lt;br /&gt;
            elif x &amp;gt; ašis:&lt;br /&gt;
                daugiau.append(x)&lt;br /&gt;
        # neužmiršk grąžinti rezultato!&lt;br /&gt;
        return quicksort(mažiau)+lygus+quicksort(daugiau)&lt;br /&gt;
    # Atkreipk dėmesį, kad naudojame `lygus`, o ne `ašis`&lt;br /&gt;
    else:  &lt;br /&gt;
        return masyvas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funkcijos parametras &amp;lt;code&amp;gt;masyvas&amp;lt;/code&amp;gt; yra sąrašas, kurį norime surikiuoti.&lt;br /&gt;
&lt;br /&gt;
Pagrindinė funkcijos dalis yra sąlyga &amp;lt;code&amp;gt;if len(masyvas) &amp;gt; 1:&amp;lt;/code&amp;gt;, kuri tikrina, ar sąraše yra daugiau nei vienas elementas. Jei sąraše yra tik vienas arba nulis elementų, tai jis jau yra surikiuotas, todėl tiesiog grąžinamas toks pat sąrašas.&lt;br /&gt;
&lt;br /&gt;
Jei sąraše yra daugiau nei vienas elementas, algoritmas tęsiasi. Pirma, parenkamas elementas &amp;lt;code&amp;gt;ašis&amp;lt;/code&amp;gt;, šiuo atveju tai yra pirmas sąrašo elementas &amp;lt;code&amp;gt;masyvas[0]&amp;lt;/code&amp;gt;. Tuomet algoritmas eina per visus sąrašo elementus ir prideda juos į tris skirtingus sąrašus (&amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lygus&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt;), priklausomai nuo to, kaip jie lyginami su &amp;lt;code&amp;gt;ašis&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra mažesnis už &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;mažiau&#039;&#039;&#039; sąrašą.&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra lygus &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;lygus&#039;&#039;&#039; sąrašą.&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra didesnis už &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;daugiau&#039;&#039;&#039; sąrašą.&lt;br /&gt;
&lt;br /&gt;
Tai vadinama &#039;&#039;dalijimo procesu&#039;&#039;. Po šio proceso turime tris naujus sąrašus: &#039;&#039;&#039;mažiau&#039;&#039;&#039;, &#039;&#039;&#039;lygus&#039;&#039;&#039; ir &#039;&#039;&#039;daugiau&#039;&#039;&#039;, kurie yra dalinai surikiuoti (mažesni už &#039;&#039;&#039;ašis&#039;&#039;&#039;, lygūs &#039;&#039;&#039;ašis&#039;&#039;&#039; ir didesni už &#039;&#039;&#039;ašis&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Toliau funkcija naudoja rekursiją ir kviečia save su &amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt; sąrašais, taip pritaikydama dalijimo ir surikiavimo procesą šiems dviejams sąrašams atskirai. Rekursyviai kviečiant save, galiausiai bus pasiektas atvejis, kai sąrašai &amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt; bus sudaryti iš nulio arba vieno elemento, o tai reiškia, kad jie jau surikiuoti. Tada funkcija grąžina sudėtą sąrašą: &amp;lt;code&amp;gt;quicksort(mažiau) + lygus + quicksort(daugiau)&amp;lt;/code&amp;gt;, kuris sudarys pilnai surikiuotą sąrašą.&lt;br /&gt;
&lt;br /&gt;
Galutinis rezultatas yra surikiuotas sąrašas, kuris yra grąžinamas iš pradinių sąrašų iškvietimo vietos.&lt;br /&gt;
&lt;br /&gt;
Pvz. jei iškviečiame funkciją &amp;lt;code&amp;gt;quicksort([3, 1, 4, 1, 5, 9, 2, 6, 5])&amp;lt;/code&amp;gt;, tai gražins &amp;lt;code&amp;gt;[1, 1, 2, 3, 4, 5, 5, 6, 9]&amp;lt;/code&amp;gt;, kuris yra pradinis sąrašas surikiuotas didėjimo tvarka.&lt;br /&gt;
&lt;br /&gt;
== Suliejimo rikiavimas (Merge sort) ==&lt;br /&gt;
&amp;quot;Merge sort&amp;quot; yra rikiavimo algoritmas, kuris veikia pagal dalinimo ir sujungimo principą. Tai efektyvus algoritmas, kuris naudoja rekursiją.&lt;br /&gt;
&lt;br /&gt;
Merge sort algoritmas veikia taip:&lt;br /&gt;
* Jei sąraše yra nulis arba vienas elementas, tai jis jau yra surikiuotas. Grąžinamas tas pats sąrašas.&lt;br /&gt;
* Jei sąraše yra daugiau nei vienas elementas, sąrašas yra padalinamas į dvi lygias dalis.&lt;br /&gt;
* Kiekviena dalis yra rekursyviai rikiuojama naudojant &#039;&#039;&#039;merge sort&#039;&#039;&#039; algoritmą.&lt;br /&gt;
* Surikiuotos dvi dalys yra sujungiamos į vieną sąrašą. Sujungimo metu elementai yra palyginami ir sudedami į naują sąrašą didėjimo tvarka.&lt;br /&gt;
&lt;br /&gt;
Šis procesas yra pakartojamas tol, kol visi sąrašai yra padalinti iki vieno elemento ir tada sujungti į vieną galutinį surikiuotą sąrašą.&lt;br /&gt;
&lt;br /&gt;
Merge sort algoritmas yra efektyvus, nes dalijimo ir sujungimo žingsniai yra vykdomi daug kartų, o kiekviename žingsnyje sąrašas yra padalintas į dvi lygias dalis. Tai leidžia efektyviai rikiuoti didelius sąrašus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def merge_sort(sąrašas):&lt;br /&gt;
    # sąraše yra nulis arba vienas elementas&lt;br /&gt;
    if len(sąrašas) &amp;lt;= 1:&lt;br /&gt;
        return sąrašas&lt;br /&gt;
    &lt;br /&gt;
    # Dalinimo žingsnis: padaliname sąrašą į dvi lygias dalis&lt;br /&gt;
    vidurys = len(sąrašas) // 2&lt;br /&gt;
    kairė = sąrašas[:vidurys]&lt;br /&gt;
    dešinė = sąrašas[vidurys:]&lt;br /&gt;
    &lt;br /&gt;
    # Rekursyviai rikiuojame kiekvieną dalį&lt;br /&gt;
    kairė = merge_sort(kairė)&lt;br /&gt;
    dešinė = merge_sort(dešinė)&lt;br /&gt;
    &lt;br /&gt;
    # Sujungimo žingsnis: sujungiame surikiuotas dalis į vieną sąrašą&lt;br /&gt;
    return merge(kairė, dešinė)&lt;br /&gt;
&lt;br /&gt;
def merge(kairė, dešinė):&lt;br /&gt;
    rezultatas = []&lt;br /&gt;
    i = 0  # indeksas kairėje dalyje&lt;br /&gt;
    j = 0  # indeksas dešinėje dalyje&lt;br /&gt;
    &lt;br /&gt;
    # Lyginame ir sujungiame elementus&lt;br /&gt;
    while i &amp;lt; len(kairė) and j &amp;lt; len(dešinė):&lt;br /&gt;
        if kairė[i] &amp;lt;= dešinė[j]:&lt;br /&gt;
            rezultatas.append(kairė[i])&lt;br /&gt;
            i += 1&lt;br /&gt;
        else:&lt;br /&gt;
            rezultatas.append(dešinė[j])&lt;br /&gt;
            j += 1&lt;br /&gt;
    &lt;br /&gt;
    # Jei viena dalis baigiasi anksčiau, pridedame likusius elementus&lt;br /&gt;
    while i &amp;lt; len(kairė):&lt;br /&gt;
        rezultatas.append(kairė[i])&lt;br /&gt;
        i += 1&lt;br /&gt;
    while j &amp;lt; len(dešinė):&lt;br /&gt;
        rezultatas.append(dešinė[j])&lt;br /&gt;
        j += 1&lt;br /&gt;
    &lt;br /&gt;
    return rezultatas&lt;br /&gt;
&lt;br /&gt;
# Pavyzdys naudojant merge_sort funkciją&lt;br /&gt;
sąrašas = [3, 1, 4, 1, 5, 9, 2, 6, 5]&lt;br /&gt;
surikiuotas_sąrašas = merge_sort(sąrašas)&lt;br /&gt;
print(surikiuotas_sąrašas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis pavyzdys naudoja dvi funkcijas: &amp;lt;code&amp;gt;merge_sort&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;merge&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;merge_sort&amp;lt;/code&amp;gt; funkcija atlieka dalinimo ir rekursyvaus rikiavimo žingsnius, o &amp;lt;code&amp;gt;merge&amp;lt;/code&amp;gt; funkcija atlieka surikiuotų dalių sujungimą.&lt;br /&gt;
&lt;br /&gt;
Rezultatas šio pavyzdžio bus:&lt;br /&gt;
 [1, 1, 2, 3, 4, 5, 5, 6, 9]&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Paie%C5%A1ka_ir_Rikiavimas&amp;diff=378</id>
		<title>Vadovėlis/Paieška ir Rikiavimas</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Paie%C5%A1ka_ir_Rikiavimas&amp;diff=378"/>
		<updated>2023-06-28T12:54:30Z</updated>

		<summary type="html">&lt;p&gt;Monika: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Atlikęs praeito skyriaus uždavinius, jau daug žinai apie sąrašo sukūrimą ir visus bazinius sąrašo metodus. Dabar pasinaudosime įgytomis žiniomis ir susipažinsime su labai dažnai sutinkamais uždaviniais: paieška ir rikiavimas.&lt;br /&gt;
&lt;br /&gt;
= Paieška =&lt;br /&gt;
&lt;br /&gt;
Paieškos algoritmai naudojami norint rasti konkretų elementą sąraše ar duomenų masyve. Yra keletas paieškos algoritmų, tačiau parodysiu du dažniausiai naudojamus - tiesinę paiešką ir dvejetainę paiešką.&lt;br /&gt;
&lt;br /&gt;
== Tiesinė paieška ==&lt;br /&gt;
Tiesinė paieška - tai paprastas paieškos algoritmas, kuris, ieškodamas tikslinės reikšmės, peržiūri kiekvieną sąrašo elementą. Pažiūrėk į tiesinės paieškos funkcijos pavyzdį &amp;quot;Python&amp;quot; kalba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def tiesinė_paieška(sąrašas, ieškomas_žodis):&lt;br /&gt;
    for i in range(len(sąrašas)):&lt;br /&gt;
        if sąrašas[i] == ieškomas_žodis:&lt;br /&gt;
            return i&lt;br /&gt;
    return -1  # ieškomas_žodis nerastas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši funkcija priima masyvą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir tikslinę reikšmę &amp;lt;code&amp;gt;ieškomas_žodis&amp;lt;/code&amp;gt; ir grąžina tikslinės reikšmės indeksą masyve. Jei tikslinė vertė nerandama masyve, funkcija grąžina -1. Labai praprasta ir aišku.&lt;br /&gt;
&lt;br /&gt;
== Dvejetainė paieška ==&lt;br /&gt;
Kita vertus, dvejetainė paieška yra efektyvesnis paieškos algoritmas, kuris veikia tik surikiuotose masyvuose (sąrašuose). Jis veikia pakartotinai dalydamas paieškos intervalą per pusę, kol randama tikslinė reikšmė. Painu? Daug aiškiau bus pažiūrėjus šį pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def dvejetainė_paieška(sąrašas, tikslas):&lt;br /&gt;
    # išsisaugome sąrašo pirmą ir paskutinį indeksą&lt;br /&gt;
    apačia = 0&lt;br /&gt;
    viršus = len(sąrašas) - 1&lt;br /&gt;
    &lt;br /&gt;
    while apačia &amp;lt;= viršus:&lt;br /&gt;
        # atrandame vidurį pagal formulę: (pradžios indeksas + pabaigos indeksas) padalintas per pusę, be liekanos&lt;br /&gt;
        viduriukas = (apačia + viršus) // 2&lt;br /&gt;
        # patikriname, ar `viduriukas` indekse yra mūsų ieškomas tikslas, ir jį atradus grąžiname indeksą.&lt;br /&gt;
        if sąrašas[viduriukas] == tikslas:&lt;br /&gt;
            return viduriukas&lt;br /&gt;
        # jeigu ne, tai pagal tai, kurioje pusėje yra ieškomas elementas pakeičiame viršutinį arba apatinį indeksą&lt;br /&gt;
        elif sąrašas[viduriukas] &amp;lt; tikslas:&lt;br /&gt;
            apačia = viduriukas + 1&lt;br /&gt;
        else:&lt;br /&gt;
            viršus = viduriukas - 1&lt;br /&gt;
        # ir kartojame iš naujo, bet jau su nauju, per pus mažesniu rėžiu&lt;br /&gt;
    &lt;br /&gt;
    return -1  # tikslas nerastas&lt;br /&gt;
&lt;br /&gt;
sąrašas = [1,2,3,4,5,6,7,8,9,10]&lt;br /&gt;
print(dvejetainė_paieška(sąrašas, 7)) # 6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Panagrinėkim detaliai, kaip vyksta procesas. Ieškome, kur yra skaičius 7, sąraše [1,2,3,4,5,6,7,8,9,10]. Funkcijos pradžios kintamieji:&lt;br /&gt;
 apačia = 0&lt;br /&gt;
 viršus = 9 (ilgis 10 - 1 )&lt;br /&gt;
Pirmas `while` ciklas:&lt;br /&gt;
 viduriukas = 4 # (0 + 9) // 2&lt;br /&gt;
 sąrašas[4] saugo reikšmę 5. Ne mūsų ieškomas skaičius.&lt;br /&gt;
 kadangi tikslas yra surasti 7, tai mūsų kito ciklo metu ieškosime viršutinėje sąrašo dalyje, todėl nusistatome naują apačios reikšmę, viduriukas + 1.&lt;br /&gt;
 apačia = 4 + 1 = 5.&lt;br /&gt;
Antras `while` ciklas:&lt;br /&gt;
 viduriukas = 7 # (5 + 9) // 2&lt;br /&gt;
 sąrašas[7] saugo reikšmę 8. Jau arčiau, bet ne dar vis ne mūsų ieškoma reikšmė 7. Nustatome šįkartą naują viršutinę reikšmę, viduriukas - 1&lt;br /&gt;
 viršus = 7 - 1 = 6&lt;br /&gt;
Trečias `while` ciklas:&lt;br /&gt;
 viduriukas = 5 # (5 + 6) // 2&lt;br /&gt;
 sąrašas[5] saugo reikmę 6. Vėl pro šalį. Nustatome naują apatinę reikšmę:&lt;br /&gt;
 apačia = 5 + 1 = 6&lt;br /&gt;
Ketvirtas `while` ciklas:&lt;br /&gt;
 viduriukas = 6 # (6 + 6) // 2&lt;br /&gt;
 sąrašas[6] saugo reikšmę 7. Valio! Radom. Grąžinam indeksą 7.&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad dvejetainės paieškos algoritmas atrado reikšmę per 4 ciklus. Kaip manai, kiek ciklų prireiktų tiesinės paieškos algoritmui? Pasufleruosiu... Daugiau :)&lt;br /&gt;
&lt;br /&gt;
= Rikiavimas =&lt;br /&gt;
&lt;br /&gt;
Rikiavimo algoritmai naudojami duomenų sąrašui išdėstyti tam tikra tvarka. Rikiavimo algoritmų yra daug ir įvairių, bet papasakosiu tik kelis naudingiausius. Pateiktus algoritmus tu gelėsi nesunkiai pritaikyti ir kitokiems duomenų tipams, ne tik žodžiams. Bet apie tai vėliau.&lt;br /&gt;
&lt;br /&gt;
== Įterpimo rikiavimas (Insertion Sort) ==&lt;br /&gt;
&lt;br /&gt;
Įterpimo rikiavimas yra paprastas rikiavimo algoritmas, kuris veikia padalydamas sąrašą į dvi dalis: surikiuotą ir nesurikiuotą. Tada iteratyviai paimamas elementas iš nerikiuotos dalies ir įterpiamas į reikiamą vietą surikiuotoje dalyje, kol visas sąrašas surikiuojamas.&lt;br /&gt;
Pažiūrėkim, kaip tai atrodo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def įterpimo_rikiavimas(sąrašas):&lt;br /&gt;
    for i in range(1, len(sąrašas)):&lt;br /&gt;
        raktas = sąrašas[i]&lt;br /&gt;
        j = i - 1&lt;br /&gt;
        while j &amp;gt;= 0 and sąrašas[j] &amp;gt; raktas:&lt;br /&gt;
            sąrašas[j+1] = sąrašas[j]&lt;br /&gt;
            j -= 1&lt;br /&gt;
        sąrašas[j+1] = raktas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši funkcija paima sąrašą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir sutikiuoja jį didėjimo tvarka, naudodama įterpimo rikiavimą. Ji pradeda iteruoti per sąrašą nuo antrojo elemento (indeksas 1) iki galo. Kiekvieno elemento reikšmė išsaugoma kaip &amp;lt;code&amp;gt;raktas&amp;lt;/code&amp;gt;, o jo indeksas - kaip &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;, tada einama atgal per surikiuotą sąrašo dalį (nuo indekso &amp;lt;code&amp;gt;i-1&amp;lt;/code&amp;gt; iki 0) ir ieškoma tinkamos vietos rakto reikšmei įterpti. Tai daroma lyginant rakto vertę su kiekvienu išrikiuotos sąrašo dalies elementu ir perstumiant didesnius elementus viena pozicija į dešinę, kol randama tinkama pozicija. Suradęs tinkamą poziciją, į ją įterpia rakto reikšmę.&lt;br /&gt;
&lt;br /&gt;
Įterpimo rikiavimo laiko sudėtingumas blogiausiu atveju yra O(n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;), o tai reiškia, kad didelių įvesties sąrašų atveju jis gali būti lėtas. Tačiau jis turi mažesnes pridėtines išlaidas nei kai kurie kiti rikiavivmo algoritmai ir gali būti efektyvesnis už juos mažiems įvesties sąrašams arba iš dalies surikiuotiems įvesties sąrašams.&lt;br /&gt;
&lt;br /&gt;
== Burbulinis rikiavimas ==&lt;br /&gt;
Burbulinis rikiavimas ( angliškai &amp;quot;Bubble sort&amp;quot; ) - tai paprastas rikiavimo algoritmas, kuris pakartotinai pereina per sąrašą, palygina gretimus elementus ir sukeičia juos vietomis, jei jų eiliškumas netinkamas. Pažiūrėkim burbulinio rikiavimo funkcijos pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def burbulinis_rikiavimas(sąrašas):&lt;br /&gt;
    sąrašo_ilgis = len(sąrašas)&lt;br /&gt;
&lt;br /&gt;
    for i in range(sąrašo_ilgis):&lt;br /&gt;
        for j in range(0, sąrašo_ilgis-i-1):&lt;br /&gt;
            if sąrašas[j] &amp;gt; sąrašas[j+1]:&lt;br /&gt;
                sąrašas[j], sąrašas[j+1] = sąrašas[j+1], sąrašas[j]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ši funkcija paima sąrašą &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; ir surikiuoja jį didėjančia tvarka, naudodama burbulinį rikiavimą.&lt;br /&gt;
&lt;br /&gt;
== Greitasis rikiavimas (Quicksort) ==&lt;br /&gt;
&amp;quot;Quicksort&amp;quot; yra plačiai naudojamas rikiavimo algoritmas, kuriame taikomas &amp;quot;skaldyk ir valdyk&amp;quot; metodas. Jis veikia iš masyvo (arba sąrašo) išrenkant ašinį elementą ir kitus elementus suskirstant į du papildomus masyvus pagal tai, ar jie mažesni, ar didesni už ašinį elementą. Tada šis procesas rekursiškai kartojamas kiekviename pogrupyje.&lt;br /&gt;
&lt;br /&gt;
Štai &amp;quot;Quicksort&amp;quot; funkcijos pavyzdys &amp;quot;Python&amp;quot; kalba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def quicksort(masyvas):&lt;br /&gt;
    mažiau = []&lt;br /&gt;
    lygus = []&lt;br /&gt;
    daugiau = []&lt;br /&gt;
    if len(masyvas) &amp;gt; 1:&lt;br /&gt;
        ašis = masyvas[0]&lt;br /&gt;
        for x in masyvas:&lt;br /&gt;
            if x &amp;lt; ašis:&lt;br /&gt;
                mažiau.append(x)&lt;br /&gt;
            elif x == ašis:&lt;br /&gt;
                lygus.append(x)&lt;br /&gt;
            elif x &amp;gt; ašis:&lt;br /&gt;
                daugiau.append(x)&lt;br /&gt;
        # neužmiršk grąžinti rezultato!&lt;br /&gt;
        return quicksort(mažiau)+lygus+quicksort(daugiau)&lt;br /&gt;
    # Atkreipk dėmesį, kad naudojame `lygus`, o ne `ašis`&lt;br /&gt;
    else:  &lt;br /&gt;
        return masyvas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funkcijos parametras &amp;lt;code&amp;gt;masyvas&amp;lt;/code&amp;gt; yra sąrašas, kurį norime surikiuoti.&lt;br /&gt;
&lt;br /&gt;
Pagrindinė funkcijos dalis yra sąlyga &amp;lt;code&amp;gt;if len(masyvas) &amp;gt; 1:&amp;lt;/code&amp;gt;, kuri tikrina, ar sąraše yra daugiau nei vienas elementas. Jei sąraše yra tik vienas arba nulis elementų, tai jis jau yra surikiuotas, todėl tiesiog grąžinamas toks pat sąrašas.&lt;br /&gt;
&lt;br /&gt;
Jei sąraše yra daugiau nei vienas elementas, algoritmas tęsiasi. Pirma, parenkamas elementas &amp;lt;code&amp;gt;ašis&amp;lt;/code&amp;gt;, šiuo atveju tai yra pirmas sąrašo elementas &amp;lt;code&amp;gt;masyvas[0]&amp;lt;/code&amp;gt;. Tuomet algoritmas eina per visus sąrašo elementus ir prideda juos į tris skirtingus sąrašus (&amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lygus&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt;), priklausomai nuo to, kaip jie lyginami su &amp;lt;code&amp;gt;ašis&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra mažesnis už &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;mažiau&#039;&#039;&#039; sąrašą.&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra lygus &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;lygus&#039;&#039;&#039; sąrašą.&lt;br /&gt;
* Jei elementas &#039;&#039;&#039;x&#039;&#039;&#039; yra didesnis už &#039;&#039;&#039;ašis&#039;&#039;&#039;, jis pridedamas į &#039;&#039;&#039;daugiau&#039;&#039;&#039; sąrašą.&lt;br /&gt;
&lt;br /&gt;
Tai vadinama &#039;&#039;dalijimo procesu&#039;&#039;. Po šio proceso turime tris naujus sąrašus: &#039;&#039;&#039;mažiau&#039;&#039;&#039;, &#039;&#039;&#039;lygus&#039;&#039;&#039; ir &#039;&#039;&#039;daugiau&#039;&#039;&#039;, kurie yra dalinai surikiuoti (mažesni už &#039;&#039;&#039;ašis&#039;&#039;&#039;, lygūs &#039;&#039;&#039;ašis&#039;&#039;&#039; ir didesni už &#039;&#039;&#039;ašis&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Toliau funkcija naudoja rekursiją ir kviečia save su &amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt; sąrašais, taip pritaikydama dalijimo ir surikiavimo procesą šiems dviejams sąrašams atskirai. Rekursyviai kviečiant save, galiausiai bus pasiektas atvejis, kai sąrašai &amp;lt;code&amp;gt;mažiau&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;daugiau&amp;lt;/code&amp;gt; bus sudaryti iš nulio arba vieno elemento, o tai reiškia, kad jie jau surikiuoti. Tada funkcija grąžina sudėtą sąrašą: &amp;lt;code&amp;gt;quicksort(mažiau) + lygus + quicksort(daugiau)&amp;lt;/code&amp;gt;, kuris sudarys pilnai surikiuotą sąrašą.&lt;br /&gt;
&lt;br /&gt;
Galutinis rezultatas yra surikiuotas sąrašas, kuris yra grąžinamas iš pradinių sąrašų iškvietimo vietos.&lt;br /&gt;
&lt;br /&gt;
Pvz. jei iškviečiame funkciją &amp;lt;code&amp;gt;quicksort([3, 1, 4, 1, 5, 9, 2, 6, 5])&amp;lt;/code&amp;gt;, tai gražins &amp;lt;code&amp;gt;[1, 1, 2, 3, 4, 5, 5, 6, 9]&amp;lt;/code&amp;gt;, kuris yra pradinis sąrašas surikiuotas didėjimo tvarka.&lt;br /&gt;
&lt;br /&gt;
== Suliejimo rikiavimas (Merge sort) ==&lt;br /&gt;
&amp;quot;Merge sort&amp;quot; yra rikiavimo algoritmas, kuris veikia pagal dalinimo ir sujungimo principą. Tai efektyvus algoritmas, kuris naudoja rekursiją.&lt;br /&gt;
&lt;br /&gt;
Merge sort algoritmas veikia taip:&lt;br /&gt;
* Jei sąraše yra nulis arba vienas elementas, tai jis jau yra surikiuotas. Grąžinamas tas pats sąrašas.&lt;br /&gt;
* Jei sąraše yra daugiau nei vienas elementas, sąrašas yra padalinamas į dvi lygias dalis.&lt;br /&gt;
* Kiekviena dalis yra rekursyviai rikiuojama naudojant &#039;&#039;&#039;merge sort&#039;&#039;&#039; algoritmą.&lt;br /&gt;
* Surikiuotos dvi dalys yra sujungiamos į vieną sąrašą. Sujungimo metu elementai yra palyginami ir sudedami į naują sąrašą didėjimo tvarka.&lt;br /&gt;
&lt;br /&gt;
Šis procesas yra pakartojamas tol, kol visi sąrašai yra padalinti iki vieno elemento ir tada sujungti į vieną galutinį surikiuotą sąrašą.&lt;br /&gt;
&lt;br /&gt;
Merge sort algoritmas yra efektyvus, nes dalijimo ir sujungimo žingsniai yra vykdomi daug kartų, o kiekviename žingsnyje sąrašas yra padalintas į dvi lygias dalis. Tai leidžia efektyviai rikiuoti didelius sąrašus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def merge_sort(sąrašas):&lt;br /&gt;
    # sąraše yra nulis arba vienas elementas&lt;br /&gt;
    if len(sąrašas) &amp;lt;= 1:&lt;br /&gt;
        return sąrašas&lt;br /&gt;
    &lt;br /&gt;
    # Dalinimo žingsnis: padaliname sąrašą į dvi lygias dalis&lt;br /&gt;
    vidurys = len(sąrašas) // 2&lt;br /&gt;
    kairė = sąrašas[:vidurys]&lt;br /&gt;
    dešinė = sąrašas[vidurys:]&lt;br /&gt;
    &lt;br /&gt;
    # Rekursyviai rikiuojame kiekvieną dalį&lt;br /&gt;
    kairė = merge_sort(kairė)&lt;br /&gt;
    dešinė = merge_sort(dešinė)&lt;br /&gt;
    &lt;br /&gt;
    # Sujungimo žingsnis: sujungiame surikiuotas dalis į vieną sąrašą&lt;br /&gt;
    return merge(kairė, dešinė)&lt;br /&gt;
&lt;br /&gt;
def merge(kairė, dešinė):&lt;br /&gt;
    rezultatas = []&lt;br /&gt;
    i = 0  # indeksas kairėje dalyje&lt;br /&gt;
    j = 0  # indeksas dešinėje dalyje&lt;br /&gt;
    &lt;br /&gt;
    # Lyginame ir sujungiame elementus&lt;br /&gt;
    while i &amp;lt; len(kairė) and j &amp;lt; len(dešinė):&lt;br /&gt;
        if kairė[i] &amp;lt;= dešinė[j]:&lt;br /&gt;
            rezultatas.append(kairė[i])&lt;br /&gt;
            i += 1&lt;br /&gt;
        else:&lt;br /&gt;
            rezultatas.append(dešinė[j])&lt;br /&gt;
            j += 1&lt;br /&gt;
    &lt;br /&gt;
    # Jei viena dalis baigiasi anksčiau, pridedame likusius elementus&lt;br /&gt;
    while i &amp;lt; len(kairė):&lt;br /&gt;
        rezultatas.append(kairė[i])&lt;br /&gt;
        i += 1&lt;br /&gt;
    while j &amp;lt; len(dešinė):&lt;br /&gt;
        rezultatas.append(dešinė[j])&lt;br /&gt;
        j += 1&lt;br /&gt;
    &lt;br /&gt;
    return rezultatas&lt;br /&gt;
&lt;br /&gt;
# Pavyzdys naudojant merge_sort funkciją&lt;br /&gt;
sąrašas = [3, 1, 4, 1, 5, 9, 2, 6, 5]&lt;br /&gt;
surikiuotas_sąrašas = merge_sort(sąrašas)&lt;br /&gt;
print(surikiuotas_sąrašas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis pavyzdys naudoja dvi funkcijas: &amp;lt;code&amp;gt;merge_sort&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;merge&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;merge_sort&amp;lt;/code&amp;gt; funkcija atlieka dalinimo ir rekursyvaus rikiavimo žingsnius, o &amp;lt;code&amp;gt;merge&amp;lt;/code&amp;gt; funkcija atlieka surikiuotų dalių sujungimą.&lt;br /&gt;
&lt;br /&gt;
Rezultatas šio pavyzdžio bus:&lt;br /&gt;
 [1, 1, 2, 3, 4, 5, 5, 6, 9]&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Daugiau_apie_funkcijas&amp;diff=377</id>
		<title>Vadovėlis/Daugiau apie funkcijas</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Daugiau_apie_funkcijas&amp;diff=377"/>
		<updated>2023-06-24T10:57:58Z</updated>

		<summary type="html">&lt;p&gt;Monika: /* Skaldyk ir valdyk */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Daugiau apie tekstines eilutes |next=Failų tvarkymas}}&lt;br /&gt;
&lt;br /&gt;
=== Funkcijų parametrai ===&lt;br /&gt;
Python kalboje parametrų perdavimo būdas priklauso nuo to, kaip jie deklaruojami funkcijos apibrėžime. Perduodant parametrą į funkciją Python naudoja nuorodų perdavimo mechanizmą, tačiau priklausomai nuo to, kaip parametras perduodamas, galime stebėti skirtingą elgesį.&lt;br /&gt;
&lt;br /&gt;
Kai parametras yra perduodamas kaip reikšmė, funkcija sukuria savo kopiją, ir kai ji yra modifikuojama funkcijoje, originali reikšmė nepasikeičia. Čia yra pavyzdys:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def keisti_reikšmę(x):&lt;br /&gt;
  x += 5&lt;br /&gt;
  print(&amp;quot;Funkcijos viduje x=&amp;quot;, x)&lt;br /&gt;
    &lt;br /&gt;
# pagrindinė programa&lt;br /&gt;
a = 10&lt;br /&gt;
keisti_reikšmę(a)&lt;br /&gt;
print(&amp;quot;Po funkcijos a=&amp;quot;, a)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funkcijoje keisti_reikšmę() sukuriame naują kintamajį x, kuris yra lygus a reikšmei, ir prie jo pridedame 5. Tačiau, kai funkcija yra baigta, a reikšmė nepasikeičia, nes funkcija veikia su x reikšme, kuri yra jos kopija.&lt;br /&gt;
&lt;br /&gt;
Kai parametras yra perduodamas kaip kintamojo adresas, funkcija gali modifikuoti kintamąjį tiesiogiai. Tai reiškia, kad, kai funkcija yra baigta, originalus kintamasis taip pat bus modifikuotas. Čia yra pavyzdys:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def keisti_adresą(x):&lt;br /&gt;
  x.append(5)&lt;br /&gt;
  print(&amp;quot;Funkcijos viduje x=&amp;quot;, x)&lt;br /&gt;
    &lt;br /&gt;
# pagrindinė programa&lt;br /&gt;
a = [1, 2, 3, 4]&lt;br /&gt;
keisti_adresą(a)&lt;br /&gt;
print(&amp;quot;Po funkcijos a=&amp;quot;, a)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funkcijoje keisti_adresą() mes paduodame a adresą, o ne jo kopiją, todėl funkcija gali tiesiogiai modifikuoti originalų kintamąjį. Šiuo atveju a yra papildoma nauja reikšme, ir kai funkcija yra baigta, a reikšmė pasikeičia, nes ji tiesiogiai buvo modifikuota funkcijos.&lt;br /&gt;
&lt;br /&gt;
Tai yra svarbus skirtumas tarp reikšmių ir adreso perdavimo mechanizmų Python kalboje. Pasirinkęs tinkamą perdavimo mechanizmą, gali užtikrinti, kad tavo funkcijos veikia taip, kaip tikiesi.&lt;br /&gt;
&lt;br /&gt;
=== Skaldyk ir valdyk ===&lt;br /&gt;
Kai norėsi spręsti didelę ir sudėtingą užduotį - visų pirma išskaidyk ją į mažesnes dalis (funkcijas). Toks programavimo metodas vadinamas “Skaldyk ir valdyk”.&lt;br /&gt;
&lt;br /&gt;
Taikant &amp;quot;skaldyk ir valdyk&amp;quot; metodą, sprendžiama užduotį mes padaliname į mažesnius uždavinius ir kiekvienas uždavinys sprendžiamas atskirai. Toliau dalijant uždavinius į dar mažesnius uždavinius, galiausiai galime pasiekti etapą, kai padalyti uždavinių nebebus įmanoma. Tuomet yra sprendžiamos šios mažiausios įmanomos mini užduotėlės (frakcijos). Galiausiai visų dalinių uždavinių sprendiniai sujungiami, kad būtų gautas pradinio uždavinio sprendinys.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Vaizdas:Skaldyk_ir_valdyk.jpg|alt=Skaldyk ir valdyk.|frameless|401x401px]]&lt;br /&gt;
&lt;br /&gt;
Programos skaldymas į mažesnes dalis dar vadinamas “&#039;&#039;smulkinamasis programavimas&#039;&#039;”. Tuo tarpu priešingas veiksmas - sujungimas funkcijų į vis stambesnes funkcijas, kol galiausiai į vieną didelę programą vadinamas “&#039;&#039;stambinamasis programavimas&#039;&#039;”&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Daugiau apie tekstines eilutes |next=Failų tvarkymas}}&lt;br /&gt;
[[Category:Python Vadovėlis]]&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Daugiau_apie_funkcijas&amp;diff=376</id>
		<title>Vadovėlis/Daugiau apie funkcijas</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Daugiau_apie_funkcijas&amp;diff=376"/>
		<updated>2023-06-24T10:56:19Z</updated>

		<summary type="html">&lt;p&gt;Monika: /* Funckijų parametrai */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Daugiau apie tekstines eilutes |next=Failų tvarkymas}}&lt;br /&gt;
&lt;br /&gt;
=== Funkcijų parametrai ===&lt;br /&gt;
Python kalboje parametrų perdavimo būdas priklauso nuo to, kaip jie deklaruojami funkcijos apibrėžime. Perduodant parametrą į funkciją Python naudoja nuorodų perdavimo mechanizmą, tačiau priklausomai nuo to, kaip parametras perduodamas, galime stebėti skirtingą elgesį.&lt;br /&gt;
&lt;br /&gt;
Kai parametras yra perduodamas kaip reikšmė, funkcija sukuria savo kopiją, ir kai ji yra modifikuojama funkcijoje, originali reikšmė nepasikeičia. Čia yra pavyzdys:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def keisti_reikšmę(x):&lt;br /&gt;
  x += 5&lt;br /&gt;
  print(&amp;quot;Funkcijos viduje x=&amp;quot;, x)&lt;br /&gt;
    &lt;br /&gt;
# pagrindinė programa&lt;br /&gt;
a = 10&lt;br /&gt;
keisti_reikšmę(a)&lt;br /&gt;
print(&amp;quot;Po funkcijos a=&amp;quot;, a)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funkcijoje keisti_reikšmę() sukuriame naują kintamajį x, kuris yra lygus a reikšmei, ir prie jo pridedame 5. Tačiau, kai funkcija yra baigta, a reikšmė nepasikeičia, nes funkcija veikia su x reikšme, kuri yra jos kopija.&lt;br /&gt;
&lt;br /&gt;
Kai parametras yra perduodamas kaip kintamojo adresas, funkcija gali modifikuoti kintamąjį tiesiogiai. Tai reiškia, kad, kai funkcija yra baigta, originalus kintamasis taip pat bus modifikuotas. Čia yra pavyzdys:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def keisti_adresą(x):&lt;br /&gt;
  x.append(5)&lt;br /&gt;
  print(&amp;quot;Funkcijos viduje x=&amp;quot;, x)&lt;br /&gt;
    &lt;br /&gt;
# pagrindinė programa&lt;br /&gt;
a = [1, 2, 3, 4]&lt;br /&gt;
keisti_adresą(a)&lt;br /&gt;
print(&amp;quot;Po funkcijos a=&amp;quot;, a)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funkcijoje keisti_adresą() mes paduodame a adresą, o ne jo kopiją, todėl funkcija gali tiesiogiai modifikuoti originalų kintamąjį. Šiuo atveju a yra papildoma nauja reikšme, ir kai funkcija yra baigta, a reikšmė pasikeičia, nes ji tiesiogiai buvo modifikuota funkcijos.&lt;br /&gt;
&lt;br /&gt;
Tai yra svarbus skirtumas tarp reikšmių ir adreso perdavimo mechanizmų Python kalboje. Pasirinkęs tinkamą perdavimo mechanizmą, gali užtikrinti, kad tavo funkcijos veikia taip, kaip tikiesi.&lt;br /&gt;
&lt;br /&gt;
=== Skaldyk ir valdyk ===&lt;br /&gt;
Kai norėsi spręsti didelę ir sudėtingą užduotį - visų pirma išskaidyk ją į mažesnes dalis (funkcijas). Toks programavimo metodas vadinamas “Skaldyk ir valdyk”.&lt;br /&gt;
&lt;br /&gt;
Taikant &amp;quot;skaldyk ir valdyk&amp;quot; metodą, sprendžiama užduotį mes padaliname į mažesnius uždavinius ir kiekvienas uždavinys sprendžiamas atskirai. Toliau dalijant uždavinius į dar mažesnius uždavinius, galiausiai galime pasiekti etapą, kai padalyti uždavinių nebebus įmanoma. Sprendžiamos tos mažiausios įmanomos mini užduotėlės (frakcijos). Galiausiai visų dalinių uždavinių sprendiniai sujungiami, kad būtų gautas pradinio uždavinio sprendinys.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Vaizdas:Skaldyk_ir_valdyk.jpg|alt=Skaldyk ir valdyk.|frameless|401x401px]]&lt;br /&gt;
&lt;br /&gt;
Programos skaldymas į mažesnes dalis dar vadinamas “&#039;&#039;smulkinamasis programavimas&#039;&#039;”. Tuo tarpu priešingas veiksmas - sujungimas funkcijų į vis stambesnes funkcijas, kol galiausiai į vieną didelę programą vadinamas “&#039;&#039;stambinamasis programavimas&#039;&#039;”&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Daugiau apie tekstines eilutes |next=Failų tvarkymas}}&lt;br /&gt;
[[Category:Python Vadovėlis]]&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Fail%C5%B3_tvarkymas&amp;diff=375</id>
		<title>Vadovėlis/Failų tvarkymas</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Fail%C5%B3_tvarkymas&amp;diff=375"/>
		<updated>2023-06-23T07:57:17Z</updated>

		<summary type="html">&lt;p&gt;Monika: /* Paketinis ir interaktyvus failų apdorojimas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Daugiau apie funkcijas |next=Siekiant tobulumo}}&lt;br /&gt;
&lt;br /&gt;
=== Failų įvestis/išvestis ===&lt;br /&gt;
&lt;br /&gt;
Štai paprastas failo įvesties ir išvesties (I/O, ang. Input/Output) pavyzdys:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Rašyti į failą&lt;br /&gt;
with open(&amp;quot;testas.txt&amp;quot;, &amp;quot;wt&amp;quot;) as rašomas_failas:&lt;br /&gt;
    rašomas_failas.write(&amp;quot;Šis tekstas bus išsiųstas į failą\nPažiūrėk ir pamatysi!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Skaityti failą&lt;br /&gt;
with open(&amp;quot;testas.txt&amp;quot;, &amp;quot;rt&amp;quot;) as skaitomas_failas:&lt;br /&gt;
    tekstas = skaitomas_failas.read()&lt;br /&gt;
&lt;br /&gt;
print(tekstas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Failo &amp;lt;code&amp;gt;testas.txt&amp;lt;/code&amp;gt; išvestis ir turinys yra:&lt;br /&gt;
&lt;br /&gt;
 Šis tekstas bus išsiųstas į failą&lt;br /&gt;
 Pažiūrėk ir pamatysi!&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad programa sukūrė failą pavadinimu &amp;lt;code&amp;gt;testas.txt&amp;lt;/code&amp;gt; kataloge, iš kurio paleidai programą.  Eilutėje esantis &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; nurodo Python&#039;ui toje vietoje peršokti į naują eilutę.  &lt;br /&gt;
&lt;br /&gt;
Apžvelkime visus veiksmus su failais:&lt;br /&gt;
* Gauk failo objektą su funkcija &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;&lt;br /&gt;
* Skaityk iš arba rašyk į failo objektą (priklausomai nuo to, kokiu režimu jis buvo atidarytas)&lt;br /&gt;
* Jeigu failui atidaryti nenaudojai funkcijos &amp;lt;code&amp;gt;with&amp;lt;/code&amp;gt;, turėsi jį uždaryti rankiniu būdu&lt;br /&gt;
&lt;br /&gt;
Pirmas žingsnis yra gauti failo objektą. Tai galima padaryti naudojant funkciją &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;. Formatas yra &amp;lt;code&amp;gt;failo_objektas = open(failo_pavadinimas, režimas)&amp;lt;/code&amp;gt;, kur &amp;lt;code&amp;gt;failo_objektas&amp;lt;/code&amp;gt; yra kintamasis, į kurį reikia įdėti failo objektą, &amp;lt;code&amp;gt;failo_pavadinimas&amp;lt;/code&amp;gt; yra eilutė su failo pavadinimu, o &amp;lt;code&amp;gt;režimas&amp;lt;/code&amp;gt; yra &amp;lt;code&amp;gt;&amp;quot;rt&amp;quot;&amp;lt;/code&amp;gt;, kad (ang. &#039;&#039;r&#039;&#039;ead) skaityti failą kaip &#039;&#039;t&#039;&#039;ekstą arba &amp;lt;code&amp;gt;&amp;quot;wt&amp;quot;&amp;lt;/code&amp;gt; (&#039;&#039;w&#039;&#039;rite) rašytį į failą kaip &#039;&#039;t&#039;&#039;ekstą (ir keletą kitų režimų, kuriuos čia praleisime). Toliau galima iškviesti failų objektų funkcijas. Dvi dažniausiai naudojamos funkcijos yra &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; (skaityti) ir &amp;lt;code&amp;gt;write&amp;lt;/code&amp;gt; (rašyti). Funkcija &amp;lt;code&amp;gt;write&amp;lt;/code&amp;gt; prideda eilutę prie failo pabaigos. Funkcija &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; nuskaito failo turinį ir grąžina jį kaip eilutę (kaip padaryta pavyzdyje). &lt;br /&gt;
&lt;br /&gt;
O dabar čia yra nauja telefono numerių programos versija, kurią jau sukūrei anksčiau:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def spausdink_numerius(numeriai):&lt;br /&gt;
    print(&amp;quot;Telefono numeriai:&amp;quot;)&lt;br /&gt;
    for k, v in numeriai.items():&lt;br /&gt;
        print(&amp;quot;Vardas:&amp;quot;, k, &amp;quot;\tTelefono numeris:&amp;quot;, v)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
def pridėk_numerį(numeriai, vardas, numeris):&lt;br /&gt;
    numeriai[vardas] = numeris&lt;br /&gt;
&lt;br /&gt;
def surask_numerį(numeriai, vardas):&lt;br /&gt;
    if vardas in numeriai:&lt;br /&gt;
        return &amp;quot;Telefono numeris yra &amp;quot; + numeriai[vardas]&lt;br /&gt;
    else:&lt;br /&gt;
        return vardas + &amp;quot; nebuvo rastas&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def pašalink_numerį(numeriai, vardas):&lt;br /&gt;
    if vardas in numeriai:&lt;br /&gt;
        del numeriai[vardas]&lt;br /&gt;
    else:&lt;br /&gt;
        print(vardas,&amp;quot; nebuvo rastas&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def įkelti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    skaitymo_failas = open(failo_pavadinimas, &amp;quot;rt&amp;quot;)&lt;br /&gt;
    while True:&lt;br /&gt;
        skaitoma_eilutė = skaitymo_failas.readline()&lt;br /&gt;
        if not skaitoma_eilutė:&lt;br /&gt;
            break&lt;br /&gt;
        skaitoma_eilutė = skaitoma_eilutė[:-1]&lt;br /&gt;
        vardas, numeris = skaitoma_eilutė.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
        numeriai[vardas] = numeris&lt;br /&gt;
    skaitymo_failas.close()&lt;br /&gt;
&lt;br /&gt;
def išsaugoti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    išvesties_failas = open(failo_pavadinimas, &amp;quot;wt&amp;quot;)&lt;br /&gt;
    for k, v in numeriai.items():&lt;br /&gt;
        išvesties_failas.write(k + &amp;quot;,&amp;quot; + v + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    išvesties_failas.close()&lt;br /&gt;
&lt;br /&gt;
def spausdink_meniu():&lt;br /&gt;
    print(&#039;1. Spausdink telefonų numerius&#039;)&lt;br /&gt;
    print(&#039;2. Pridėk telefono numerį&#039;)&lt;br /&gt;
    print(&#039;3. Pašalink telefono numerį&#039;)&lt;br /&gt;
    print(&#039;4. Ieškok telefono numerio&#039;)&lt;br /&gt;
    print(&#039;5. Įkelk telefono numerius&#039;)&lt;br /&gt;
    print(&#039;6. Išsaugok telefono numerius&#039;)&lt;br /&gt;
    print(&#039;7. Išeik&#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
numeriai = {}&lt;br /&gt;
meniu_pasirinkimas = 0&lt;br /&gt;
spausdink_meniu()&lt;br /&gt;
while True:&lt;br /&gt;
    meniu_pasirinkimas = int(input(&amp;quot;Įvesk skaičių (1-7): &amp;quot;))&lt;br /&gt;
    if meniu_pasirinkimas == 1:&lt;br /&gt;
        spausdink_numerius(numeriai)&lt;br /&gt;
    elif meniu_pasirinkimas == 2:&lt;br /&gt;
        print(&amp;quot;Pridėk vardą ir telefono numerį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        numeris = input(&amp;quot;Telefono numeris: &amp;quot;)&lt;br /&gt;
        pridėk_numerį(numeriai, vardas, numeris)&lt;br /&gt;
    elif meniu_pasirinkimas == 3:&lt;br /&gt;
        print(&amp;quot;Pašalink vardą ir telefono numerį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        pašalink_numerį(numeriai, vardas)&lt;br /&gt;
    elif meniu_pasirinkimas == 4:&lt;br /&gt;
        print(&amp;quot;Ieškok telefono numerio&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        print(surask_numerį(numeriai, vardas))&lt;br /&gt;
    elif meniu_pasirinkimas == 5:&lt;br /&gt;
        failo_pavadinimas = input(&amp;quot;Failo pavadinimas, kurį nori įkelti: &amp;quot;)&lt;br /&gt;
        įkelti_numerius(numeriai, failo_pavadinimas)&lt;br /&gt;
    elif meniu_pasirinkimas == 6:&lt;br /&gt;
        failo_pavadinimas = input(&amp;quot;Failo pavadinimas išsaugojimui: &amp;quot;)&lt;br /&gt;
        išsaugoti_numerius(numeriai, failo_pavadinimas)&lt;br /&gt;
    elif meniu_pasirinkimas == 7:&lt;br /&gt;
        break&lt;br /&gt;
    else:&lt;br /&gt;
        spausdink_meniu()&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Viso!&amp;quot;)  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gali pastebėti, kad dabar kodas papildomai išsaugo ir perskaito failus. Štai dviejų programos vykdymų išvestis:&lt;br /&gt;
&lt;br /&gt;
 1. Spausdink telefonų numerius&lt;br /&gt;
 2. Pridėk telefono numerį&lt;br /&gt;
 3. Pašalink telefono numerį&lt;br /&gt;
 4. Ieškok telefono numerio&lt;br /&gt;
 5. Įkelk telefono numerius&lt;br /&gt;
 6. Išsaugok telefono numerius&lt;br /&gt;
 7. Išeik&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Liepa&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeris: &#039;&#039;&#039;1234&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Benas&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeris: &#039;&#039;&#039;4321&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeriai:&lt;br /&gt;
 Vardas: Liepa     Telefono numeris: 1234&lt;br /&gt;
 Vardas: Benas     Telefono numeris: 4321&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
 Failo pavadinimas išsaugojimui: &#039;&#039;&#039;numeriai.txt&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;7&#039;&#039;&#039;&lt;br /&gt;
 Viso!&lt;br /&gt;
&lt;br /&gt;
 1. Spausdink telefonų numerius&lt;br /&gt;
 2. Pridėk telefono numerį&lt;br /&gt;
 3. Pašalink telefono numerį&lt;br /&gt;
 4. Ieškok telefono numerio&lt;br /&gt;
 5. Įkelk telefono numerius&lt;br /&gt;
 6. Išsaugok telefono numerius&lt;br /&gt;
 7. Išeik&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
 Failo pavadinimas, kurį nori įkelti: &#039;&#039;&#039;numeriai.txt&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeriai:&lt;br /&gt;
 Vardas: Liepa     Telefono numeris: 1234&lt;br /&gt;
 Vardas: Benas     Telefono numeris: 4321&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;7&#039;&#039;&#039;&lt;br /&gt;
 Viso!&lt;br /&gt;
&lt;br /&gt;
Naujos šios programos dalys yra:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def įkelti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    skaitymo_failas = open(failo_pavadinimas, &amp;quot;rt&amp;quot;)&lt;br /&gt;
    while True:&lt;br /&gt;
        skaitoma_eilutė = skaitymo_failas.readline()&lt;br /&gt;
        if not skaitoma_eilutė:&lt;br /&gt;
            break&lt;br /&gt;
        skaitoma_eilutė = skaitoma_eilutė[:-1]&lt;br /&gt;
        vardas, numeris = skaitoma_eilutė.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
        numeriai[vardas] = numeris&lt;br /&gt;
    skaitymo_failas.close()&lt;br /&gt;
&lt;br /&gt;
def išsaugoti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    išvesties_failas = open(failo_pavadinimas, &amp;quot;wt&amp;quot;)&lt;br /&gt;
    for k, v in numeriai.items():&lt;br /&gt;
        išvesties_failas.write(k + &amp;quot;,&amp;quot; + v + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    išvesties_failas.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pirmiausia pažiūrėk į programos išsaugojimo dalį. Visų pirma, sukuriamas failo objektas su komanda &amp;lt;code&amp;gt;open(failo_pavadinimas, &amp;quot;wt&amp;quot;)&amp;lt;/code&amp;gt;. Toliau sukuriama eilutė kiekvienam telefono numeriui su komanda &amp;lt;code&amp;gt;išvesties_failas.write(k + &amp;quot;,&amp;quot; + v + &amp;quot;\n&amp;quot;)&amp;lt;/code&amp;gt;. Tai išrašo eilutę, kurioje yra vardas, kablelis, telefono numeris, o po jos rašoma nauja eilutė.&lt;br /&gt;
&lt;br /&gt;
Failo skaitymo dalis yra šiek tiek sudėtingesnė. Ji prasideda failo objekto gavimu. Tada ji naudoja &amp;lt;code&amp;gt;while True:&amp;lt;/code&amp;gt; ciklą, kad tęstųsi ciklas tol, kol bus aptikta komanda &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt;. Komanda &amp;lt;code&amp;gt;skaitoma_eilutė = skaitymo_failas.readline()&amp;lt;/code&amp;gt; perskaito pirmą eilutę ir priskiria kintamajam &amp;lt;code&amp;gt;skaitome_eilutė&amp;lt;/code&amp;gt;. Pasiekus failo pabaigą, funkcija &amp;lt;code&amp;gt;readline&amp;lt;/code&amp;gt; grąžins tuščią eilutę. Sąlyginis sakinys &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; tai patikrina ir panaudojant komandą &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt; nutraukia &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; ciklą. Funkcija &amp;lt;code&amp;gt;readline&amp;lt;/code&amp;gt; perskaito ir grąžina vieną eilutę kartu su jos pabaigos simboliu. Tai yra tam, kad būtų galima spręsti ar tai yra tik tuščia eilutė, ar jau failo pabaiga. Taigi turime atsikratyti to paskutinio eilutės pabaigos simbolio. Komanda &amp;lt;code&amp;gt;skaitoma_eilutė = skaitoma_eilutė[:-1]&amp;lt;/code&amp;gt; tai padaro už mus, išmesdama paskutinį simbolį. Toliau eilutė &amp;lt;code&amp;gt;vardas, numeris = skaitoma_eilutė.split(&amp;quot;,&amp;quot;)&amp;lt;/code&amp;gt; padalija eilutę ties kableliu į vardą ir telefono numerį ir visa tai įtraukiama į &amp;lt;code&amp;gt;numeriai&amp;lt;/code&amp;gt; žodyną.&lt;br /&gt;
&lt;br /&gt;
=== Darbo su failais rėžimai ===&lt;br /&gt;
Be &amp;lt;code&amp;gt;&amp;quot;rt&amp;quot;&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;&amp;quot;wt&amp;quot;&amp;lt;/code&amp;gt; yra ir kitų darbo su failais rėžimų. Lentelėje rasi visų rėžimų sąrašą:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Rėžimas&lt;br /&gt;
!Paaiškinimas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;rt&amp;quot;&lt;br /&gt;
|Tekstinio failo nuskatymas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;wt&amp;quot;&lt;br /&gt;
|Teksto rašymas į failą&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;xt&amp;quot;&lt;br /&gt;
|Naujo teskinio failo kūrimas. Jei toks failas jau egzistuoja bus gaunama klaida&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;at&amp;quot;&lt;br /&gt;
|Tekstinio failo papildymas. Failo turinys bus pildomas nuo edamo failo pabaigos&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;r&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;rt&amp;quot; rėžimui. Tekstinio failo nuskatymas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;w&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;w&amp;quot; rėžimui. Teksto rašymas į failą&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;x&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;x&amp;quot; rėžimui. Naujo teskinio failo kūrimas. Jei toks failas jau egzistuoja bus gaunama klaida&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;a&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;a&amp;quot; rėžimui. Tekstinio failo papildymas. Failo turinys bus pildomas nuo edamo failo pabaigos&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;rb&amp;quot;&lt;br /&gt;
|Dvejetainio duomenų failo nuskatymas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;wb&amp;quot;&lt;br /&gt;
|Dvejetainės informacijos rašymas į failą&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;xb&amp;quot;&lt;br /&gt;
|Naujo dvejetainio failo kūrimas. Jei toks failas jau egzistuoja bus gaunama klaida&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;ab&amp;quot;&lt;br /&gt;
|Dvejetainio failo papildymas. Failo turinys bus pildomas nuo edamo failo pabaigos&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;r+&amp;quot;&lt;br /&gt;
|Tekstinio failo skaitymas ir rašymas. Esamas failo turinys nėra išvalomas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;w+&amp;quot;&lt;br /&gt;
|Tekstinio failo skaitymas ir rašymas. Esamas failo turinys yra išvalomas rašant į failą.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;r+b&amp;quot;&lt;br /&gt;
|Dvejetainio failo skaitymas ir rašymas. Esamas failo turinys nėra išvalomas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;w+b&amp;quot;&lt;br /&gt;
|Dvejetainio failo skaitymas ir rašymas. Esamas failo turinys yra išvalomas rašant į failą.&lt;br /&gt;
|}&lt;br /&gt;
Dvvejetainiai rėžimai šiame vadovėlyje plačiau nagrinėjami nėra&lt;br /&gt;
&lt;br /&gt;
=== Pagrindinės darbo su tekstiniais failais operacijos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Operacija&lt;br /&gt;
!Paaiškinimas&lt;br /&gt;
|-&lt;br /&gt;
|failas.read()&lt;br /&gt;
|Nuskaitomas visas failo turinys&lt;br /&gt;
|-&lt;br /&gt;
|failas.read(kiek)&lt;br /&gt;
|Nuskaitomas nuordytas simbolių kiekis iš failo. Pvz naudojant failas.read(3) bus nuskaitomi 3 sekantys simboliai&lt;br /&gt;
|-&lt;br /&gt;
|failas.readline()&lt;br /&gt;
|Nuskaitoma sekanti failo eilutė&lt;br /&gt;
|-&lt;br /&gt;
|failas.readlines()&lt;br /&gt;
|Nuskaitomos visos failo eilutės. Gražinamas sąrašas sudarytas iš teksto eilučių&lt;br /&gt;
|-&lt;br /&gt;
|failas.close()&lt;br /&gt;
|Failo uždarymas. Uždarius failą veiksmai su juo negalimi. Atidarant failą naudojant with funkciją, jis bus uždarytas automatiškai, tad close() naudoti nebereikia&lt;br /&gt;
|-&lt;br /&gt;
|failas.write(rašomas_tesktas)&lt;br /&gt;
|Įrašo nurodytą tekstą į failą.&lt;br /&gt;
|-&lt;br /&gt;
|failas.writelines(rašomo_teksto_eilučių_sąrašas)&lt;br /&gt;
|Sąrašas sudarytas iš teskto eilučių yra įrašomas į failą. Kiekvienas sąrašo elementas bus įrašomas naujoje eilutėje&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Paketinis ir interaktyvus failų apdorojimas ===&lt;br /&gt;
&lt;br /&gt;
Failai gali būti apdorojami įvairiais būdais. Vieni iš dažniausiai naudojamų ir naudingiausių būdų - tai paketinis duomenų apdorojimas ir interaktyvus duomenų apdorojimas.&lt;br /&gt;
&lt;br /&gt;
Skaitymas iš failo yra vadinamas paketiniu duomenų apdorojimu, nes visi duomenys iš failo yra nuskaitomi ir apdorojami kaip vienas paketas. Tai reiškia, kad visi duomenys yra nuskaitomi iš failo į kompiuterio atmintį vienu metu ir toliau apdorojami kompiuterio procesorių, o ne tiesiogiai iš failo.&lt;br /&gt;
&lt;br /&gt;
Pavyzdžiui, jei turi didelio dydžio tekstinį failą ir nori jį apdoroti programoje, failas bus nuskaitomas į atmintį ir tada apdorotas kaip vienas paketas, o ne kaip atskiri duomenų elementai.&lt;br /&gt;
&lt;br /&gt;
Interaktyvus duomenų apdorojimas – tai būdas dirbti su duomenimis, kai vartotojas gali manipuliuoti įvairiais nustatymais, o ne laikytis iš anksto užprogramuotų algoritmų. Tai leidžia geriau valdyti rezultatus ir geriau suprasti duomenis.&lt;br /&gt;
&lt;br /&gt;
=== Pažangesnis .txt failų naudojimas ===&lt;br /&gt;
&lt;br /&gt;
Galbūt tau kyla toks klausimas: „Aš žinau, kaip skaityti ir rašyti tekstinį failą, bet ką daryti, jei noriu atspausdinti failą spausdintuvu?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Yra keletas skirtingų būdų, kaip tai padaryti. Iš tikrųjų, pats lengviausias būdas yra atidaryti kitą programą, tada leisti viskuo pasirūpinti Python&#039;o kodui, kad tau nereikėtų pačiam failo atidarinėti ir spausdinti. Šis metodas apima kitos programos subproceso (arba antrinis procesas; biblioteka &#039;subprocess&#039;) iškvietimą. &lt;br /&gt;
&lt;br /&gt;
Prisimeni failą, į kurį įrašėme išvestį aukščiau esančioje programoje? Panaudokime tą failą.&lt;br /&gt;
Turėk omenyje, kad norint išvengti klaidų, ši programa naudoja sąvokas iš kito skyriaus. Nedvejodamas gali dar kartą peržiūrėti šį pavyzdį po kito skyriaus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import subprocess&lt;br /&gt;
def pagrindinis():&lt;br /&gt;
    try:&lt;br /&gt;
        print(&amp;quot;Ši maža programa iškviečia spausdinimo funkciją Notepad programoje&amp;quot;)&lt;br /&gt;
        #Atspausdinkime failą, kurį sukūrėme aukščiau esančioje programoje&lt;br /&gt;
        subprocess.call([&#039;notepad&#039;,&#039;/p&#039;,&#039;numeriai.txt&#039;])&lt;br /&gt;
    except WindowsError:&lt;br /&gt;
        print(&amp;quot;Pakviesto subproceso nėra arba jo negalima iškviesti.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
pagrindinis()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;subprocess.call&amp;lt;/code&amp;gt; turi tris argumentus. Pirmasis argumentas šio pavyzdžio kontekste turėtų būti programos pavadinimas, iš kurios nori iškviesti spausdinimo subprocesą. Antrasis argumentas turėtų būti konkretus tos programos subprocesas. Kad būtų paprasčiau, tiesiog suprask, kad šioje programoje &amp;lt;code&amp;gt;&#039;/p&#039;&amp;lt;/code&amp;gt; yra subprocesas, naudojamas norint pasiekti spausdintuvą per nurodytą programą. Paskutinis argumentas turėtų būti failo pavadinimas, kurį norite siųsti į spausdinimo subprocesą. Šiuo atveju tai yra tas pats failas, naudotas anksčiau šiame skyriuje.&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
1. Parašyk programą, kuri suskaičiuotų, kiek faile yra eilučių.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
failas = input(&amp;quot;Kokio failo eilutes skaičiuoti? &amp;quot;)&lt;br /&gt;
įvesties_failas = open(failas, &amp;quot;r&amp;quot;)&lt;br /&gt;
eilutės = įvesties_failas.readlines()&lt;br /&gt;
įvesties_failas.close()&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Failas&amp;quot;, failas, &amp;quot;turi&amp;quot;, len(eilutės), &amp;quot; eilutes&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Parašyk programą, kuri nukopijuotų vieno failo lygines eilutes į kitą failą.&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
įvesties_failo_pavadinimas = input(&amp;quot;Kokio failo eilutes kopijuoti? &amp;quot;)&lt;br /&gt;
įvesties_failas = open(įvesties_failo_pavadinimas, &amp;quot;r&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
išvesties_failo_pavadinimas = input(&amp;quot;Į kokį failą išsaugoti lygines eilutes? &amp;quot;)&lt;br /&gt;
išvesties_failas = open(išvesties_failo_pavadinimas, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
eilutės_numeris = 0&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    eilutė = įvesties_failas.readline()&lt;br /&gt;
    eilutės_numeris = eilutės_numeris + 1&lt;br /&gt;
    if not eilutė:&lt;br /&gt;
        break&lt;br /&gt;
    else:&lt;br /&gt;
        if (eilutės_numeris % 2) == 0:&lt;br /&gt;
            išvesties_failas.write(eilutė)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
įvesties_failas.close()&lt;br /&gt;
išvesties_failas.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Dabar pakeisk pažymių programą iš skyriaus [[Vadovėlis/Žodynai|Žodynai]], kad ji naudotų failus mokinių pažymiams saugoti.&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
užduotys = [&#039;nd sk 1&#039;, &#039;nd sk 2&#039;, &#039;viktorina   &#039;, &#039;nd sk 3&#039;, &#039;testas&#039;]&lt;br /&gt;
mokiniai = { }&lt;br /&gt;
&lt;br /&gt;
def įkelti_pažymius(pažymių_failas):&lt;br /&gt;
    įvesties_failas = open(pažymių_failas, &amp;quot;r&amp;quot;)&lt;br /&gt;
    pažymiai = [ ]&lt;br /&gt;
    while True:&lt;br /&gt;
        mokinys_ir_pažymys = įvesties_failas.readline()&lt;br /&gt;
        mokinys_ir_pažymys = mokinys_ir_pažymys[:-1]&lt;br /&gt;
        if not mokinys_ir_pažymys:&lt;br /&gt;
            break&lt;br /&gt;
        else:&lt;br /&gt;
            mokinio_vardas, mokinio_pažymiai = mokinys_ir_pažymys.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
            mokinio_pažymiai = mokinio_pažymiai.split(&amp;quot; &amp;quot;)&lt;br /&gt;
            mokiniai[mokinio_vardas] = mokinio_pažymiai&lt;br /&gt;
    įvesties_failas.close()&lt;br /&gt;
    print(&amp;quot;Pažymiai įkelti.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def išsaugoti_pažymius(pažymių_failas):&lt;br /&gt;
    išvesties_failas = open(pažymių_failas, &amp;quot;w&amp;quot;)&lt;br /&gt;
    for k, v in mokiniai.items():&lt;br /&gt;
        išvesties_failas.write(k + &amp;quot;,&amp;quot;)&lt;br /&gt;
        for x in v:&lt;br /&gt;
            išvesties_failas.write(str(x) + &amp;quot; &amp;quot;)&lt;br /&gt;
        išvesties_failas.write(&amp;quot;\n&amp;quot;)&lt;br /&gt;
    išvesties_failas.close()&lt;br /&gt;
    print(&amp;quot;Pažymiai išsaugoti.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def spausdink_meniu():&lt;br /&gt;
    print(&amp;quot;1. Pridėk mokinį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;2. Pašalink mokinį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;3. Įkrauti pažymius&amp;quot;)&lt;br /&gt;
    print(&amp;quot;4. Įrašyk pažymį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;5. Spausdink pažymius&amp;quot;)&lt;br /&gt;
    print(&amp;quot;6. Įšsaugoti pažymius&amp;quot;)&lt;br /&gt;
    print(&amp;quot;7. Spausdink meniu&amp;quot;)&lt;br /&gt;
    print(&amp;quot;9. Išeik&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def spausdink_visus_pažymius():&lt;br /&gt;
    if mokiniai:&lt;br /&gt;
        raktai = sorted(mokiniai.keys())&lt;br /&gt;
        print(&#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
        for x in užduotys:&lt;br /&gt;
            print(x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
        print()&lt;br /&gt;
        for x in raktai:&lt;br /&gt;
            print(x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
            pažymiai = mokiniai[x]&lt;br /&gt;
            spausdink_pažymius(pažymiai)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Neradau pažymių spausdinimui.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def spausdink_pažymius(pažymiai):&lt;br /&gt;
    for x in pažymiai:&lt;br /&gt;
        print(x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
spausdink_meniu()&lt;br /&gt;
meniu_pasirinkimas = 0&lt;br /&gt;
while meniu_pasirinkimas != 9:&lt;br /&gt;
    print()&lt;br /&gt;
    meniu_pasirinkimas = int(input(&amp;quot;Meniu pasirinkimas: &amp;quot;))&lt;br /&gt;
    if meniu_pasirinkimas == 1:&lt;br /&gt;
        vardas = input(&amp;quot;Pridėk mokinį: &amp;quot;)&lt;br /&gt;
        mokiniai[vardas] = [0] * len(užduotys)&lt;br /&gt;
    elif meniu_pasirinkimas == 2:&lt;br /&gt;
        vardas = input(&amp;quot;Pašalink mokinį: &amp;quot;)&lt;br /&gt;
        if vardas in mokiniai:&lt;br /&gt;
            del mokiniai[vardas]&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Mokinys vardu:&amp;quot;, vardas, &amp;quot; nerastas.&amp;quot;)&lt;br /&gt;
    elif meniu_pasirinkimas == 3:&lt;br /&gt;
        pažymių_failas = input(&amp;quot;Įkrauti pažymius iš kokio failo? &amp;quot;)&lt;br /&gt;
        įkelti_pažymius(pažymių_failas)&lt;br /&gt;
    elif meniu_pasirinkimas == 4:&lt;br /&gt;
        print(&amp;quot;Įrašyk pažymį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Mokinys: &amp;quot;)&lt;br /&gt;
        if vardas in mokiniai:&lt;br /&gt;
            pažymiai = mokiniai[vardas]&lt;br /&gt;
            print(&amp;quot;Įrašyk mokinio pažymį&amp;quot;)&lt;br /&gt;
            print(&amp;quot;Įrašyk 0 (nulį), kad išeitum&amp;quot;)&lt;br /&gt;
            for i,x in enumerate(užduotys):&lt;br /&gt;
                print(i + 1, x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
            print()&lt;br /&gt;
            spausdink_pažymius(pažymiai)&lt;br /&gt;
            kuris = 1234&lt;br /&gt;
            while kuris != -1:&lt;br /&gt;
                kuris = int(input(&amp;quot;Pažymys, kurį nori pakeisti: &amp;quot;))&lt;br /&gt;
                kuris -= 1&lt;br /&gt;
                if 0 &amp;lt;= kuris &amp;lt; len(pažymiai):&lt;br /&gt;
                    pažymys = int(input(&amp;quot;Pažymys: &amp;quot;))&lt;br /&gt;
                    pažymiai[kuris] = pažymys&lt;br /&gt;
                elif kuris != -1:&lt;br /&gt;
                    print(&amp;quot;Klaidingas pažymys&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Mokinys nerastas&amp;quot;)&lt;br /&gt;
    elif meniu_pasirinkimas == 5:&lt;br /&gt;
        spausdink_visus_pažymius()&lt;br /&gt;
    elif meniu_pasirinkimas == 6:&lt;br /&gt;
        pažymių_failas = input(&amp;quot;Į kokį failą išsaugoti pažymius? &amp;quot;)&lt;br /&gt;
        išsaugoti_pažymius(pažymių_failas)&lt;br /&gt;
    elif meniu_pasirinkimas != 9:&lt;br /&gt;
        spausdink_meniu()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Daugiau apie funkcijas |next=Siekiant tobulumo}}&lt;br /&gt;
[[Category:Python Vadovėlis]]&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Fail%C5%B3_tvarkymas&amp;diff=374</id>
		<title>Vadovėlis/Failų tvarkymas</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Fail%C5%B3_tvarkymas&amp;diff=374"/>
		<updated>2023-06-23T07:56:17Z</updated>

		<summary type="html">&lt;p&gt;Monika: /* Paketinis ir interaktyvus failų apdorojimas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Daugiau apie funkcijas |next=Siekiant tobulumo}}&lt;br /&gt;
&lt;br /&gt;
=== Failų įvestis/išvestis ===&lt;br /&gt;
&lt;br /&gt;
Štai paprastas failo įvesties ir išvesties (I/O, ang. Input/Output) pavyzdys:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Rašyti į failą&lt;br /&gt;
with open(&amp;quot;testas.txt&amp;quot;, &amp;quot;wt&amp;quot;) as rašomas_failas:&lt;br /&gt;
    rašomas_failas.write(&amp;quot;Šis tekstas bus išsiųstas į failą\nPažiūrėk ir pamatysi!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Skaityti failą&lt;br /&gt;
with open(&amp;quot;testas.txt&amp;quot;, &amp;quot;rt&amp;quot;) as skaitomas_failas:&lt;br /&gt;
    tekstas = skaitomas_failas.read()&lt;br /&gt;
&lt;br /&gt;
print(tekstas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Failo &amp;lt;code&amp;gt;testas.txt&amp;lt;/code&amp;gt; išvestis ir turinys yra:&lt;br /&gt;
&lt;br /&gt;
 Šis tekstas bus išsiųstas į failą&lt;br /&gt;
 Pažiūrėk ir pamatysi!&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad programa sukūrė failą pavadinimu &amp;lt;code&amp;gt;testas.txt&amp;lt;/code&amp;gt; kataloge, iš kurio paleidai programą.  Eilutėje esantis &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; nurodo Python&#039;ui toje vietoje peršokti į naują eilutę.  &lt;br /&gt;
&lt;br /&gt;
Apžvelkime visus veiksmus su failais:&lt;br /&gt;
* Gauk failo objektą su funkcija &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;&lt;br /&gt;
* Skaityk iš arba rašyk į failo objektą (priklausomai nuo to, kokiu režimu jis buvo atidarytas)&lt;br /&gt;
* Jeigu failui atidaryti nenaudojai funkcijos &amp;lt;code&amp;gt;with&amp;lt;/code&amp;gt;, turėsi jį uždaryti rankiniu būdu&lt;br /&gt;
&lt;br /&gt;
Pirmas žingsnis yra gauti failo objektą. Tai galima padaryti naudojant funkciją &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;. Formatas yra &amp;lt;code&amp;gt;failo_objektas = open(failo_pavadinimas, režimas)&amp;lt;/code&amp;gt;, kur &amp;lt;code&amp;gt;failo_objektas&amp;lt;/code&amp;gt; yra kintamasis, į kurį reikia įdėti failo objektą, &amp;lt;code&amp;gt;failo_pavadinimas&amp;lt;/code&amp;gt; yra eilutė su failo pavadinimu, o &amp;lt;code&amp;gt;režimas&amp;lt;/code&amp;gt; yra &amp;lt;code&amp;gt;&amp;quot;rt&amp;quot;&amp;lt;/code&amp;gt;, kad (ang. &#039;&#039;r&#039;&#039;ead) skaityti failą kaip &#039;&#039;t&#039;&#039;ekstą arba &amp;lt;code&amp;gt;&amp;quot;wt&amp;quot;&amp;lt;/code&amp;gt; (&#039;&#039;w&#039;&#039;rite) rašytį į failą kaip &#039;&#039;t&#039;&#039;ekstą (ir keletą kitų režimų, kuriuos čia praleisime). Toliau galima iškviesti failų objektų funkcijas. Dvi dažniausiai naudojamos funkcijos yra &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; (skaityti) ir &amp;lt;code&amp;gt;write&amp;lt;/code&amp;gt; (rašyti). Funkcija &amp;lt;code&amp;gt;write&amp;lt;/code&amp;gt; prideda eilutę prie failo pabaigos. Funkcija &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; nuskaito failo turinį ir grąžina jį kaip eilutę (kaip padaryta pavyzdyje). &lt;br /&gt;
&lt;br /&gt;
O dabar čia yra nauja telefono numerių programos versija, kurią jau sukūrei anksčiau:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def spausdink_numerius(numeriai):&lt;br /&gt;
    print(&amp;quot;Telefono numeriai:&amp;quot;)&lt;br /&gt;
    for k, v in numeriai.items():&lt;br /&gt;
        print(&amp;quot;Vardas:&amp;quot;, k, &amp;quot;\tTelefono numeris:&amp;quot;, v)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
def pridėk_numerį(numeriai, vardas, numeris):&lt;br /&gt;
    numeriai[vardas] = numeris&lt;br /&gt;
&lt;br /&gt;
def surask_numerį(numeriai, vardas):&lt;br /&gt;
    if vardas in numeriai:&lt;br /&gt;
        return &amp;quot;Telefono numeris yra &amp;quot; + numeriai[vardas]&lt;br /&gt;
    else:&lt;br /&gt;
        return vardas + &amp;quot; nebuvo rastas&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def pašalink_numerį(numeriai, vardas):&lt;br /&gt;
    if vardas in numeriai:&lt;br /&gt;
        del numeriai[vardas]&lt;br /&gt;
    else:&lt;br /&gt;
        print(vardas,&amp;quot; nebuvo rastas&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def įkelti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    skaitymo_failas = open(failo_pavadinimas, &amp;quot;rt&amp;quot;)&lt;br /&gt;
    while True:&lt;br /&gt;
        skaitoma_eilutė = skaitymo_failas.readline()&lt;br /&gt;
        if not skaitoma_eilutė:&lt;br /&gt;
            break&lt;br /&gt;
        skaitoma_eilutė = skaitoma_eilutė[:-1]&lt;br /&gt;
        vardas, numeris = skaitoma_eilutė.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
        numeriai[vardas] = numeris&lt;br /&gt;
    skaitymo_failas.close()&lt;br /&gt;
&lt;br /&gt;
def išsaugoti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    išvesties_failas = open(failo_pavadinimas, &amp;quot;wt&amp;quot;)&lt;br /&gt;
    for k, v in numeriai.items():&lt;br /&gt;
        išvesties_failas.write(k + &amp;quot;,&amp;quot; + v + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    išvesties_failas.close()&lt;br /&gt;
&lt;br /&gt;
def spausdink_meniu():&lt;br /&gt;
    print(&#039;1. Spausdink telefonų numerius&#039;)&lt;br /&gt;
    print(&#039;2. Pridėk telefono numerį&#039;)&lt;br /&gt;
    print(&#039;3. Pašalink telefono numerį&#039;)&lt;br /&gt;
    print(&#039;4. Ieškok telefono numerio&#039;)&lt;br /&gt;
    print(&#039;5. Įkelk telefono numerius&#039;)&lt;br /&gt;
    print(&#039;6. Išsaugok telefono numerius&#039;)&lt;br /&gt;
    print(&#039;7. Išeik&#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
numeriai = {}&lt;br /&gt;
meniu_pasirinkimas = 0&lt;br /&gt;
spausdink_meniu()&lt;br /&gt;
while True:&lt;br /&gt;
    meniu_pasirinkimas = int(input(&amp;quot;Įvesk skaičių (1-7): &amp;quot;))&lt;br /&gt;
    if meniu_pasirinkimas == 1:&lt;br /&gt;
        spausdink_numerius(numeriai)&lt;br /&gt;
    elif meniu_pasirinkimas == 2:&lt;br /&gt;
        print(&amp;quot;Pridėk vardą ir telefono numerį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        numeris = input(&amp;quot;Telefono numeris: &amp;quot;)&lt;br /&gt;
        pridėk_numerį(numeriai, vardas, numeris)&lt;br /&gt;
    elif meniu_pasirinkimas == 3:&lt;br /&gt;
        print(&amp;quot;Pašalink vardą ir telefono numerį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        pašalink_numerį(numeriai, vardas)&lt;br /&gt;
    elif meniu_pasirinkimas == 4:&lt;br /&gt;
        print(&amp;quot;Ieškok telefono numerio&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        print(surask_numerį(numeriai, vardas))&lt;br /&gt;
    elif meniu_pasirinkimas == 5:&lt;br /&gt;
        failo_pavadinimas = input(&amp;quot;Failo pavadinimas, kurį nori įkelti: &amp;quot;)&lt;br /&gt;
        įkelti_numerius(numeriai, failo_pavadinimas)&lt;br /&gt;
    elif meniu_pasirinkimas == 6:&lt;br /&gt;
        failo_pavadinimas = input(&amp;quot;Failo pavadinimas išsaugojimui: &amp;quot;)&lt;br /&gt;
        išsaugoti_numerius(numeriai, failo_pavadinimas)&lt;br /&gt;
    elif meniu_pasirinkimas == 7:&lt;br /&gt;
        break&lt;br /&gt;
    else:&lt;br /&gt;
        spausdink_meniu()&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Viso!&amp;quot;)  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gali pastebėti, kad dabar kodas papildomai išsaugo ir perskaito failus. Štai dviejų programos vykdymų išvestis:&lt;br /&gt;
&lt;br /&gt;
 1. Spausdink telefonų numerius&lt;br /&gt;
 2. Pridėk telefono numerį&lt;br /&gt;
 3. Pašalink telefono numerį&lt;br /&gt;
 4. Ieškok telefono numerio&lt;br /&gt;
 5. Įkelk telefono numerius&lt;br /&gt;
 6. Išsaugok telefono numerius&lt;br /&gt;
 7. Išeik&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Liepa&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeris: &#039;&#039;&#039;1234&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Benas&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeris: &#039;&#039;&#039;4321&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeriai:&lt;br /&gt;
 Vardas: Liepa     Telefono numeris: 1234&lt;br /&gt;
 Vardas: Benas     Telefono numeris: 4321&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
 Failo pavadinimas išsaugojimui: &#039;&#039;&#039;numeriai.txt&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;7&#039;&#039;&#039;&lt;br /&gt;
 Viso!&lt;br /&gt;
&lt;br /&gt;
 1. Spausdink telefonų numerius&lt;br /&gt;
 2. Pridėk telefono numerį&lt;br /&gt;
 3. Pašalink telefono numerį&lt;br /&gt;
 4. Ieškok telefono numerio&lt;br /&gt;
 5. Įkelk telefono numerius&lt;br /&gt;
 6. Išsaugok telefono numerius&lt;br /&gt;
 7. Išeik&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
 Failo pavadinimas, kurį nori įkelti: &#039;&#039;&#039;numeriai.txt&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeriai:&lt;br /&gt;
 Vardas: Liepa     Telefono numeris: 1234&lt;br /&gt;
 Vardas: Benas     Telefono numeris: 4321&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;7&#039;&#039;&#039;&lt;br /&gt;
 Viso!&lt;br /&gt;
&lt;br /&gt;
Naujos šios programos dalys yra:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def įkelti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    skaitymo_failas = open(failo_pavadinimas, &amp;quot;rt&amp;quot;)&lt;br /&gt;
    while True:&lt;br /&gt;
        skaitoma_eilutė = skaitymo_failas.readline()&lt;br /&gt;
        if not skaitoma_eilutė:&lt;br /&gt;
            break&lt;br /&gt;
        skaitoma_eilutė = skaitoma_eilutė[:-1]&lt;br /&gt;
        vardas, numeris = skaitoma_eilutė.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
        numeriai[vardas] = numeris&lt;br /&gt;
    skaitymo_failas.close()&lt;br /&gt;
&lt;br /&gt;
def išsaugoti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    išvesties_failas = open(failo_pavadinimas, &amp;quot;wt&amp;quot;)&lt;br /&gt;
    for k, v in numeriai.items():&lt;br /&gt;
        išvesties_failas.write(k + &amp;quot;,&amp;quot; + v + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    išvesties_failas.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pirmiausia pažiūrėk į programos išsaugojimo dalį. Visų pirma, sukuriamas failo objektas su komanda &amp;lt;code&amp;gt;open(failo_pavadinimas, &amp;quot;wt&amp;quot;)&amp;lt;/code&amp;gt;. Toliau sukuriama eilutė kiekvienam telefono numeriui su komanda &amp;lt;code&amp;gt;išvesties_failas.write(k + &amp;quot;,&amp;quot; + v + &amp;quot;\n&amp;quot;)&amp;lt;/code&amp;gt;. Tai išrašo eilutę, kurioje yra vardas, kablelis, telefono numeris, o po jos rašoma nauja eilutė.&lt;br /&gt;
&lt;br /&gt;
Failo skaitymo dalis yra šiek tiek sudėtingesnė. Ji prasideda failo objekto gavimu. Tada ji naudoja &amp;lt;code&amp;gt;while True:&amp;lt;/code&amp;gt; ciklą, kad tęstųsi ciklas tol, kol bus aptikta komanda &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt;. Komanda &amp;lt;code&amp;gt;skaitoma_eilutė = skaitymo_failas.readline()&amp;lt;/code&amp;gt; perskaito pirmą eilutę ir priskiria kintamajam &amp;lt;code&amp;gt;skaitome_eilutė&amp;lt;/code&amp;gt;. Pasiekus failo pabaigą, funkcija &amp;lt;code&amp;gt;readline&amp;lt;/code&amp;gt; grąžins tuščią eilutę. Sąlyginis sakinys &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; tai patikrina ir panaudojant komandą &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt; nutraukia &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; ciklą. Funkcija &amp;lt;code&amp;gt;readline&amp;lt;/code&amp;gt; perskaito ir grąžina vieną eilutę kartu su jos pabaigos simboliu. Tai yra tam, kad būtų galima spręsti ar tai yra tik tuščia eilutė, ar jau failo pabaiga. Taigi turime atsikratyti to paskutinio eilutės pabaigos simbolio. Komanda &amp;lt;code&amp;gt;skaitoma_eilutė = skaitoma_eilutė[:-1]&amp;lt;/code&amp;gt; tai padaro už mus, išmesdama paskutinį simbolį. Toliau eilutė &amp;lt;code&amp;gt;vardas, numeris = skaitoma_eilutė.split(&amp;quot;,&amp;quot;)&amp;lt;/code&amp;gt; padalija eilutę ties kableliu į vardą ir telefono numerį ir visa tai įtraukiama į &amp;lt;code&amp;gt;numeriai&amp;lt;/code&amp;gt; žodyną.&lt;br /&gt;
&lt;br /&gt;
=== Darbo su failais rėžimai ===&lt;br /&gt;
Be &amp;lt;code&amp;gt;&amp;quot;rt&amp;quot;&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;&amp;quot;wt&amp;quot;&amp;lt;/code&amp;gt; yra ir kitų darbo su failais rėžimų. Lentelėje rasi visų rėžimų sąrašą:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Rėžimas&lt;br /&gt;
!Paaiškinimas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;rt&amp;quot;&lt;br /&gt;
|Tekstinio failo nuskatymas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;wt&amp;quot;&lt;br /&gt;
|Teksto rašymas į failą&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;xt&amp;quot;&lt;br /&gt;
|Naujo teskinio failo kūrimas. Jei toks failas jau egzistuoja bus gaunama klaida&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;at&amp;quot;&lt;br /&gt;
|Tekstinio failo papildymas. Failo turinys bus pildomas nuo edamo failo pabaigos&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;r&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;rt&amp;quot; rėžimui. Tekstinio failo nuskatymas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;w&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;w&amp;quot; rėžimui. Teksto rašymas į failą&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;x&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;x&amp;quot; rėžimui. Naujo teskinio failo kūrimas. Jei toks failas jau egzistuoja bus gaunama klaida&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;a&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;a&amp;quot; rėžimui. Tekstinio failo papildymas. Failo turinys bus pildomas nuo edamo failo pabaigos&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;rb&amp;quot;&lt;br /&gt;
|Dvejetainio duomenų failo nuskatymas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;wb&amp;quot;&lt;br /&gt;
|Dvejetainės informacijos rašymas į failą&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;xb&amp;quot;&lt;br /&gt;
|Naujo dvejetainio failo kūrimas. Jei toks failas jau egzistuoja bus gaunama klaida&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;ab&amp;quot;&lt;br /&gt;
|Dvejetainio failo papildymas. Failo turinys bus pildomas nuo edamo failo pabaigos&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;r+&amp;quot;&lt;br /&gt;
|Tekstinio failo skaitymas ir rašymas. Esamas failo turinys nėra išvalomas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;w+&amp;quot;&lt;br /&gt;
|Tekstinio failo skaitymas ir rašymas. Esamas failo turinys yra išvalomas rašant į failą.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;r+b&amp;quot;&lt;br /&gt;
|Dvejetainio failo skaitymas ir rašymas. Esamas failo turinys nėra išvalomas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;w+b&amp;quot;&lt;br /&gt;
|Dvejetainio failo skaitymas ir rašymas. Esamas failo turinys yra išvalomas rašant į failą.&lt;br /&gt;
|}&lt;br /&gt;
Dvvejetainiai rėžimai šiame vadovėlyje plačiau nagrinėjami nėra&lt;br /&gt;
&lt;br /&gt;
=== Pagrindinės darbo su tekstiniais failais operacijos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Operacija&lt;br /&gt;
!Paaiškinimas&lt;br /&gt;
|-&lt;br /&gt;
|failas.read()&lt;br /&gt;
|Nuskaitomas visas failo turinys&lt;br /&gt;
|-&lt;br /&gt;
|failas.read(kiek)&lt;br /&gt;
|Nuskaitomas nuordytas simbolių kiekis iš failo. Pvz naudojant failas.read(3) bus nuskaitomi 3 sekantys simboliai&lt;br /&gt;
|-&lt;br /&gt;
|failas.readline()&lt;br /&gt;
|Nuskaitoma sekanti failo eilutė&lt;br /&gt;
|-&lt;br /&gt;
|failas.readlines()&lt;br /&gt;
|Nuskaitomos visos failo eilutės. Gražinamas sąrašas sudarytas iš teksto eilučių&lt;br /&gt;
|-&lt;br /&gt;
|failas.close()&lt;br /&gt;
|Failo uždarymas. Uždarius failą veiksmai su juo negalimi. Atidarant failą naudojant with funkciją, jis bus uždarytas automatiškai, tad close() naudoti nebereikia&lt;br /&gt;
|-&lt;br /&gt;
|failas.write(rašomas_tesktas)&lt;br /&gt;
|Įrašo nurodytą tekstą į failą.&lt;br /&gt;
|-&lt;br /&gt;
|failas.writelines(rašomo_teksto_eilučių_sąrašas)&lt;br /&gt;
|Sąrašas sudarytas iš teskto eilučių yra įrašomas į failą. Kiekvienas sąrašo elementas bus įrašomas naujoje eilutėje&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Paketinis ir interaktyvus failų apdorojimas ===&lt;br /&gt;
&lt;br /&gt;
Failai gali būti apdorojami įvairiais būdais. Vieni naudingiausių būdų, tai paketinis duomenų apdorojimas ir interaktyvus duomenų apdorojimas.&lt;br /&gt;
&lt;br /&gt;
Skaitymas iš failo yra vadinamas paketiniu duomenų apdorojimu, nes visi duomenys iš failo yra nuskaitomi ir apdorojami kaip vienas paketas. Tai reiškia, kad visi duomenys yra nuskaitomi iš failo į kompiuterio atmintį vienu metu ir toliau apdorojami kompiuterio procesorių, o ne tiesiogiai iš failo.&lt;br /&gt;
&lt;br /&gt;
Pavyzdžiui, jei turi didelio dydžio tekstinį failą ir nori jį apdoroti programoje, failas bus nuskaitomas į atmintį ir tada apdorotas kaip vienas paketas, o ne kaip atskiri duomenų elementai.&lt;br /&gt;
&lt;br /&gt;
Interaktyvus duomenų apdorojimas – tai būdas dirbti su duomenimis, kai vartotojas gali manipuliuoti įvairiais nustatymais, o ne laikytis iš anksto užprogramuotų algoritmų. Tai leidžia geriau valdyti rezultatus ir geriau suprasti duomenis.&lt;br /&gt;
&lt;br /&gt;
=== Pažangesnis .txt failų naudojimas ===&lt;br /&gt;
&lt;br /&gt;
Galbūt tau kyla toks klausimas: „Aš žinau, kaip skaityti ir rašyti tekstinį failą, bet ką daryti, jei noriu atspausdinti failą spausdintuvu?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Yra keletas skirtingų būdų, kaip tai padaryti. Iš tikrųjų, pats lengviausias būdas yra atidaryti kitą programą, tada leisti viskuo pasirūpinti Python&#039;o kodui, kad tau nereikėtų pačiam failo atidarinėti ir spausdinti. Šis metodas apima kitos programos subproceso (arba antrinis procesas; biblioteka &#039;subprocess&#039;) iškvietimą. &lt;br /&gt;
&lt;br /&gt;
Prisimeni failą, į kurį įrašėme išvestį aukščiau esančioje programoje? Panaudokime tą failą.&lt;br /&gt;
Turėk omenyje, kad norint išvengti klaidų, ši programa naudoja sąvokas iš kito skyriaus. Nedvejodamas gali dar kartą peržiūrėti šį pavyzdį po kito skyriaus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import subprocess&lt;br /&gt;
def pagrindinis():&lt;br /&gt;
    try:&lt;br /&gt;
        print(&amp;quot;Ši maža programa iškviečia spausdinimo funkciją Notepad programoje&amp;quot;)&lt;br /&gt;
        #Atspausdinkime failą, kurį sukūrėme aukščiau esančioje programoje&lt;br /&gt;
        subprocess.call([&#039;notepad&#039;,&#039;/p&#039;,&#039;numeriai.txt&#039;])&lt;br /&gt;
    except WindowsError:&lt;br /&gt;
        print(&amp;quot;Pakviesto subproceso nėra arba jo negalima iškviesti.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
pagrindinis()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;subprocess.call&amp;lt;/code&amp;gt; turi tris argumentus. Pirmasis argumentas šio pavyzdžio kontekste turėtų būti programos pavadinimas, iš kurios nori iškviesti spausdinimo subprocesą. Antrasis argumentas turėtų būti konkretus tos programos subprocesas. Kad būtų paprasčiau, tiesiog suprask, kad šioje programoje &amp;lt;code&amp;gt;&#039;/p&#039;&amp;lt;/code&amp;gt; yra subprocesas, naudojamas norint pasiekti spausdintuvą per nurodytą programą. Paskutinis argumentas turėtų būti failo pavadinimas, kurį norite siųsti į spausdinimo subprocesą. Šiuo atveju tai yra tas pats failas, naudotas anksčiau šiame skyriuje.&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
1. Parašyk programą, kuri suskaičiuotų, kiek faile yra eilučių.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
failas = input(&amp;quot;Kokio failo eilutes skaičiuoti? &amp;quot;)&lt;br /&gt;
įvesties_failas = open(failas, &amp;quot;r&amp;quot;)&lt;br /&gt;
eilutės = įvesties_failas.readlines()&lt;br /&gt;
įvesties_failas.close()&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Failas&amp;quot;, failas, &amp;quot;turi&amp;quot;, len(eilutės), &amp;quot; eilutes&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Parašyk programą, kuri nukopijuotų vieno failo lygines eilutes į kitą failą.&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
įvesties_failo_pavadinimas = input(&amp;quot;Kokio failo eilutes kopijuoti? &amp;quot;)&lt;br /&gt;
įvesties_failas = open(įvesties_failo_pavadinimas, &amp;quot;r&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
išvesties_failo_pavadinimas = input(&amp;quot;Į kokį failą išsaugoti lygines eilutes? &amp;quot;)&lt;br /&gt;
išvesties_failas = open(išvesties_failo_pavadinimas, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
eilutės_numeris = 0&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    eilutė = įvesties_failas.readline()&lt;br /&gt;
    eilutės_numeris = eilutės_numeris + 1&lt;br /&gt;
    if not eilutė:&lt;br /&gt;
        break&lt;br /&gt;
    else:&lt;br /&gt;
        if (eilutės_numeris % 2) == 0:&lt;br /&gt;
            išvesties_failas.write(eilutė)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
įvesties_failas.close()&lt;br /&gt;
išvesties_failas.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Dabar pakeisk pažymių programą iš skyriaus [[Vadovėlis/Žodynai|Žodynai]], kad ji naudotų failus mokinių pažymiams saugoti.&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
užduotys = [&#039;nd sk 1&#039;, &#039;nd sk 2&#039;, &#039;viktorina   &#039;, &#039;nd sk 3&#039;, &#039;testas&#039;]&lt;br /&gt;
mokiniai = { }&lt;br /&gt;
&lt;br /&gt;
def įkelti_pažymius(pažymių_failas):&lt;br /&gt;
    įvesties_failas = open(pažymių_failas, &amp;quot;r&amp;quot;)&lt;br /&gt;
    pažymiai = [ ]&lt;br /&gt;
    while True:&lt;br /&gt;
        mokinys_ir_pažymys = įvesties_failas.readline()&lt;br /&gt;
        mokinys_ir_pažymys = mokinys_ir_pažymys[:-1]&lt;br /&gt;
        if not mokinys_ir_pažymys:&lt;br /&gt;
            break&lt;br /&gt;
        else:&lt;br /&gt;
            mokinio_vardas, mokinio_pažymiai = mokinys_ir_pažymys.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
            mokinio_pažymiai = mokinio_pažymiai.split(&amp;quot; &amp;quot;)&lt;br /&gt;
            mokiniai[mokinio_vardas] = mokinio_pažymiai&lt;br /&gt;
    įvesties_failas.close()&lt;br /&gt;
    print(&amp;quot;Pažymiai įkelti.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def išsaugoti_pažymius(pažymių_failas):&lt;br /&gt;
    išvesties_failas = open(pažymių_failas, &amp;quot;w&amp;quot;)&lt;br /&gt;
    for k, v in mokiniai.items():&lt;br /&gt;
        išvesties_failas.write(k + &amp;quot;,&amp;quot;)&lt;br /&gt;
        for x in v:&lt;br /&gt;
            išvesties_failas.write(str(x) + &amp;quot; &amp;quot;)&lt;br /&gt;
        išvesties_failas.write(&amp;quot;\n&amp;quot;)&lt;br /&gt;
    išvesties_failas.close()&lt;br /&gt;
    print(&amp;quot;Pažymiai išsaugoti.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def spausdink_meniu():&lt;br /&gt;
    print(&amp;quot;1. Pridėk mokinį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;2. Pašalink mokinį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;3. Įkrauti pažymius&amp;quot;)&lt;br /&gt;
    print(&amp;quot;4. Įrašyk pažymį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;5. Spausdink pažymius&amp;quot;)&lt;br /&gt;
    print(&amp;quot;6. Įšsaugoti pažymius&amp;quot;)&lt;br /&gt;
    print(&amp;quot;7. Spausdink meniu&amp;quot;)&lt;br /&gt;
    print(&amp;quot;9. Išeik&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def spausdink_visus_pažymius():&lt;br /&gt;
    if mokiniai:&lt;br /&gt;
        raktai = sorted(mokiniai.keys())&lt;br /&gt;
        print(&#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
        for x in užduotys:&lt;br /&gt;
            print(x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
        print()&lt;br /&gt;
        for x in raktai:&lt;br /&gt;
            print(x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
            pažymiai = mokiniai[x]&lt;br /&gt;
            spausdink_pažymius(pažymiai)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Neradau pažymių spausdinimui.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def spausdink_pažymius(pažymiai):&lt;br /&gt;
    for x in pažymiai:&lt;br /&gt;
        print(x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
spausdink_meniu()&lt;br /&gt;
meniu_pasirinkimas = 0&lt;br /&gt;
while meniu_pasirinkimas != 9:&lt;br /&gt;
    print()&lt;br /&gt;
    meniu_pasirinkimas = int(input(&amp;quot;Meniu pasirinkimas: &amp;quot;))&lt;br /&gt;
    if meniu_pasirinkimas == 1:&lt;br /&gt;
        vardas = input(&amp;quot;Pridėk mokinį: &amp;quot;)&lt;br /&gt;
        mokiniai[vardas] = [0] * len(užduotys)&lt;br /&gt;
    elif meniu_pasirinkimas == 2:&lt;br /&gt;
        vardas = input(&amp;quot;Pašalink mokinį: &amp;quot;)&lt;br /&gt;
        if vardas in mokiniai:&lt;br /&gt;
            del mokiniai[vardas]&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Mokinys vardu:&amp;quot;, vardas, &amp;quot; nerastas.&amp;quot;)&lt;br /&gt;
    elif meniu_pasirinkimas == 3:&lt;br /&gt;
        pažymių_failas = input(&amp;quot;Įkrauti pažymius iš kokio failo? &amp;quot;)&lt;br /&gt;
        įkelti_pažymius(pažymių_failas)&lt;br /&gt;
    elif meniu_pasirinkimas == 4:&lt;br /&gt;
        print(&amp;quot;Įrašyk pažymį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Mokinys: &amp;quot;)&lt;br /&gt;
        if vardas in mokiniai:&lt;br /&gt;
            pažymiai = mokiniai[vardas]&lt;br /&gt;
            print(&amp;quot;Įrašyk mokinio pažymį&amp;quot;)&lt;br /&gt;
            print(&amp;quot;Įrašyk 0 (nulį), kad išeitum&amp;quot;)&lt;br /&gt;
            for i,x in enumerate(užduotys):&lt;br /&gt;
                print(i + 1, x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
            print()&lt;br /&gt;
            spausdink_pažymius(pažymiai)&lt;br /&gt;
            kuris = 1234&lt;br /&gt;
            while kuris != -1:&lt;br /&gt;
                kuris = int(input(&amp;quot;Pažymys, kurį nori pakeisti: &amp;quot;))&lt;br /&gt;
                kuris -= 1&lt;br /&gt;
                if 0 &amp;lt;= kuris &amp;lt; len(pažymiai):&lt;br /&gt;
                    pažymys = int(input(&amp;quot;Pažymys: &amp;quot;))&lt;br /&gt;
                    pažymiai[kuris] = pažymys&lt;br /&gt;
                elif kuris != -1:&lt;br /&gt;
                    print(&amp;quot;Klaidingas pažymys&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Mokinys nerastas&amp;quot;)&lt;br /&gt;
    elif meniu_pasirinkimas == 5:&lt;br /&gt;
        spausdink_visus_pažymius()&lt;br /&gt;
    elif meniu_pasirinkimas == 6:&lt;br /&gt;
        pažymių_failas = input(&amp;quot;Į kokį failą išsaugoti pažymius? &amp;quot;)&lt;br /&gt;
        išsaugoti_pažymius(pažymių_failas)&lt;br /&gt;
    elif meniu_pasirinkimas != 9:&lt;br /&gt;
        spausdink_meniu()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Daugiau apie funkcijas |next=Siekiant tobulumo}}&lt;br /&gt;
[[Category:Python Vadovėlis]]&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Fail%C5%B3_tvarkymas&amp;diff=373</id>
		<title>Vadovėlis/Failų tvarkymas</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Fail%C5%B3_tvarkymas&amp;diff=373"/>
		<updated>2023-06-23T07:55:47Z</updated>

		<summary type="html">&lt;p&gt;Monika: /* Paketinis ir interaktyvus failų apdorojimas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Daugiau apie funkcijas |next=Siekiant tobulumo}}&lt;br /&gt;
&lt;br /&gt;
=== Failų įvestis/išvestis ===&lt;br /&gt;
&lt;br /&gt;
Štai paprastas failo įvesties ir išvesties (I/O, ang. Input/Output) pavyzdys:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Rašyti į failą&lt;br /&gt;
with open(&amp;quot;testas.txt&amp;quot;, &amp;quot;wt&amp;quot;) as rašomas_failas:&lt;br /&gt;
    rašomas_failas.write(&amp;quot;Šis tekstas bus išsiųstas į failą\nPažiūrėk ir pamatysi!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Skaityti failą&lt;br /&gt;
with open(&amp;quot;testas.txt&amp;quot;, &amp;quot;rt&amp;quot;) as skaitomas_failas:&lt;br /&gt;
    tekstas = skaitomas_failas.read()&lt;br /&gt;
&lt;br /&gt;
print(tekstas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Failo &amp;lt;code&amp;gt;testas.txt&amp;lt;/code&amp;gt; išvestis ir turinys yra:&lt;br /&gt;
&lt;br /&gt;
 Šis tekstas bus išsiųstas į failą&lt;br /&gt;
 Pažiūrėk ir pamatysi!&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad programa sukūrė failą pavadinimu &amp;lt;code&amp;gt;testas.txt&amp;lt;/code&amp;gt; kataloge, iš kurio paleidai programą.  Eilutėje esantis &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; nurodo Python&#039;ui toje vietoje peršokti į naują eilutę.  &lt;br /&gt;
&lt;br /&gt;
Apžvelkime visus veiksmus su failais:&lt;br /&gt;
* Gauk failo objektą su funkcija &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;&lt;br /&gt;
* Skaityk iš arba rašyk į failo objektą (priklausomai nuo to, kokiu režimu jis buvo atidarytas)&lt;br /&gt;
* Jeigu failui atidaryti nenaudojai funkcijos &amp;lt;code&amp;gt;with&amp;lt;/code&amp;gt;, turėsi jį uždaryti rankiniu būdu&lt;br /&gt;
&lt;br /&gt;
Pirmas žingsnis yra gauti failo objektą. Tai galima padaryti naudojant funkciją &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;. Formatas yra &amp;lt;code&amp;gt;failo_objektas = open(failo_pavadinimas, režimas)&amp;lt;/code&amp;gt;, kur &amp;lt;code&amp;gt;failo_objektas&amp;lt;/code&amp;gt; yra kintamasis, į kurį reikia įdėti failo objektą, &amp;lt;code&amp;gt;failo_pavadinimas&amp;lt;/code&amp;gt; yra eilutė su failo pavadinimu, o &amp;lt;code&amp;gt;režimas&amp;lt;/code&amp;gt; yra &amp;lt;code&amp;gt;&amp;quot;rt&amp;quot;&amp;lt;/code&amp;gt;, kad (ang. &#039;&#039;r&#039;&#039;ead) skaityti failą kaip &#039;&#039;t&#039;&#039;ekstą arba &amp;lt;code&amp;gt;&amp;quot;wt&amp;quot;&amp;lt;/code&amp;gt; (&#039;&#039;w&#039;&#039;rite) rašytį į failą kaip &#039;&#039;t&#039;&#039;ekstą (ir keletą kitų režimų, kuriuos čia praleisime). Toliau galima iškviesti failų objektų funkcijas. Dvi dažniausiai naudojamos funkcijos yra &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; (skaityti) ir &amp;lt;code&amp;gt;write&amp;lt;/code&amp;gt; (rašyti). Funkcija &amp;lt;code&amp;gt;write&amp;lt;/code&amp;gt; prideda eilutę prie failo pabaigos. Funkcija &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; nuskaito failo turinį ir grąžina jį kaip eilutę (kaip padaryta pavyzdyje). &lt;br /&gt;
&lt;br /&gt;
O dabar čia yra nauja telefono numerių programos versija, kurią jau sukūrei anksčiau:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def spausdink_numerius(numeriai):&lt;br /&gt;
    print(&amp;quot;Telefono numeriai:&amp;quot;)&lt;br /&gt;
    for k, v in numeriai.items():&lt;br /&gt;
        print(&amp;quot;Vardas:&amp;quot;, k, &amp;quot;\tTelefono numeris:&amp;quot;, v)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
def pridėk_numerį(numeriai, vardas, numeris):&lt;br /&gt;
    numeriai[vardas] = numeris&lt;br /&gt;
&lt;br /&gt;
def surask_numerį(numeriai, vardas):&lt;br /&gt;
    if vardas in numeriai:&lt;br /&gt;
        return &amp;quot;Telefono numeris yra &amp;quot; + numeriai[vardas]&lt;br /&gt;
    else:&lt;br /&gt;
        return vardas + &amp;quot; nebuvo rastas&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def pašalink_numerį(numeriai, vardas):&lt;br /&gt;
    if vardas in numeriai:&lt;br /&gt;
        del numeriai[vardas]&lt;br /&gt;
    else:&lt;br /&gt;
        print(vardas,&amp;quot; nebuvo rastas&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def įkelti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    skaitymo_failas = open(failo_pavadinimas, &amp;quot;rt&amp;quot;)&lt;br /&gt;
    while True:&lt;br /&gt;
        skaitoma_eilutė = skaitymo_failas.readline()&lt;br /&gt;
        if not skaitoma_eilutė:&lt;br /&gt;
            break&lt;br /&gt;
        skaitoma_eilutė = skaitoma_eilutė[:-1]&lt;br /&gt;
        vardas, numeris = skaitoma_eilutė.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
        numeriai[vardas] = numeris&lt;br /&gt;
    skaitymo_failas.close()&lt;br /&gt;
&lt;br /&gt;
def išsaugoti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    išvesties_failas = open(failo_pavadinimas, &amp;quot;wt&amp;quot;)&lt;br /&gt;
    for k, v in numeriai.items():&lt;br /&gt;
        išvesties_failas.write(k + &amp;quot;,&amp;quot; + v + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    išvesties_failas.close()&lt;br /&gt;
&lt;br /&gt;
def spausdink_meniu():&lt;br /&gt;
    print(&#039;1. Spausdink telefonų numerius&#039;)&lt;br /&gt;
    print(&#039;2. Pridėk telefono numerį&#039;)&lt;br /&gt;
    print(&#039;3. Pašalink telefono numerį&#039;)&lt;br /&gt;
    print(&#039;4. Ieškok telefono numerio&#039;)&lt;br /&gt;
    print(&#039;5. Įkelk telefono numerius&#039;)&lt;br /&gt;
    print(&#039;6. Išsaugok telefono numerius&#039;)&lt;br /&gt;
    print(&#039;7. Išeik&#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
numeriai = {}&lt;br /&gt;
meniu_pasirinkimas = 0&lt;br /&gt;
spausdink_meniu()&lt;br /&gt;
while True:&lt;br /&gt;
    meniu_pasirinkimas = int(input(&amp;quot;Įvesk skaičių (1-7): &amp;quot;))&lt;br /&gt;
    if meniu_pasirinkimas == 1:&lt;br /&gt;
        spausdink_numerius(numeriai)&lt;br /&gt;
    elif meniu_pasirinkimas == 2:&lt;br /&gt;
        print(&amp;quot;Pridėk vardą ir telefono numerį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        numeris = input(&amp;quot;Telefono numeris: &amp;quot;)&lt;br /&gt;
        pridėk_numerį(numeriai, vardas, numeris)&lt;br /&gt;
    elif meniu_pasirinkimas == 3:&lt;br /&gt;
        print(&amp;quot;Pašalink vardą ir telefono numerį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        pašalink_numerį(numeriai, vardas)&lt;br /&gt;
    elif meniu_pasirinkimas == 4:&lt;br /&gt;
        print(&amp;quot;Ieškok telefono numerio&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        print(surask_numerį(numeriai, vardas))&lt;br /&gt;
    elif meniu_pasirinkimas == 5:&lt;br /&gt;
        failo_pavadinimas = input(&amp;quot;Failo pavadinimas, kurį nori įkelti: &amp;quot;)&lt;br /&gt;
        įkelti_numerius(numeriai, failo_pavadinimas)&lt;br /&gt;
    elif meniu_pasirinkimas == 6:&lt;br /&gt;
        failo_pavadinimas = input(&amp;quot;Failo pavadinimas išsaugojimui: &amp;quot;)&lt;br /&gt;
        išsaugoti_numerius(numeriai, failo_pavadinimas)&lt;br /&gt;
    elif meniu_pasirinkimas == 7:&lt;br /&gt;
        break&lt;br /&gt;
    else:&lt;br /&gt;
        spausdink_meniu()&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Viso!&amp;quot;)  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gali pastebėti, kad dabar kodas papildomai išsaugo ir perskaito failus. Štai dviejų programos vykdymų išvestis:&lt;br /&gt;
&lt;br /&gt;
 1. Spausdink telefonų numerius&lt;br /&gt;
 2. Pridėk telefono numerį&lt;br /&gt;
 3. Pašalink telefono numerį&lt;br /&gt;
 4. Ieškok telefono numerio&lt;br /&gt;
 5. Įkelk telefono numerius&lt;br /&gt;
 6. Išsaugok telefono numerius&lt;br /&gt;
 7. Išeik&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Liepa&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeris: &#039;&#039;&#039;1234&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Benas&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeris: &#039;&#039;&#039;4321&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeriai:&lt;br /&gt;
 Vardas: Liepa     Telefono numeris: 1234&lt;br /&gt;
 Vardas: Benas     Telefono numeris: 4321&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
 Failo pavadinimas išsaugojimui: &#039;&#039;&#039;numeriai.txt&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;7&#039;&#039;&#039;&lt;br /&gt;
 Viso!&lt;br /&gt;
&lt;br /&gt;
 1. Spausdink telefonų numerius&lt;br /&gt;
 2. Pridėk telefono numerį&lt;br /&gt;
 3. Pašalink telefono numerį&lt;br /&gt;
 4. Ieškok telefono numerio&lt;br /&gt;
 5. Įkelk telefono numerius&lt;br /&gt;
 6. Išsaugok telefono numerius&lt;br /&gt;
 7. Išeik&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
 Failo pavadinimas, kurį nori įkelti: &#039;&#039;&#039;numeriai.txt&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeriai:&lt;br /&gt;
 Vardas: Liepa     Telefono numeris: 1234&lt;br /&gt;
 Vardas: Benas     Telefono numeris: 4321&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;7&#039;&#039;&#039;&lt;br /&gt;
 Viso!&lt;br /&gt;
&lt;br /&gt;
Naujos šios programos dalys yra:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def įkelti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    skaitymo_failas = open(failo_pavadinimas, &amp;quot;rt&amp;quot;)&lt;br /&gt;
    while True:&lt;br /&gt;
        skaitoma_eilutė = skaitymo_failas.readline()&lt;br /&gt;
        if not skaitoma_eilutė:&lt;br /&gt;
            break&lt;br /&gt;
        skaitoma_eilutė = skaitoma_eilutė[:-1]&lt;br /&gt;
        vardas, numeris = skaitoma_eilutė.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
        numeriai[vardas] = numeris&lt;br /&gt;
    skaitymo_failas.close()&lt;br /&gt;
&lt;br /&gt;
def išsaugoti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    išvesties_failas = open(failo_pavadinimas, &amp;quot;wt&amp;quot;)&lt;br /&gt;
    for k, v in numeriai.items():&lt;br /&gt;
        išvesties_failas.write(k + &amp;quot;,&amp;quot; + v + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    išvesties_failas.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pirmiausia pažiūrėk į programos išsaugojimo dalį. Visų pirma, sukuriamas failo objektas su komanda &amp;lt;code&amp;gt;open(failo_pavadinimas, &amp;quot;wt&amp;quot;)&amp;lt;/code&amp;gt;. Toliau sukuriama eilutė kiekvienam telefono numeriui su komanda &amp;lt;code&amp;gt;išvesties_failas.write(k + &amp;quot;,&amp;quot; + v + &amp;quot;\n&amp;quot;)&amp;lt;/code&amp;gt;. Tai išrašo eilutę, kurioje yra vardas, kablelis, telefono numeris, o po jos rašoma nauja eilutė.&lt;br /&gt;
&lt;br /&gt;
Failo skaitymo dalis yra šiek tiek sudėtingesnė. Ji prasideda failo objekto gavimu. Tada ji naudoja &amp;lt;code&amp;gt;while True:&amp;lt;/code&amp;gt; ciklą, kad tęstųsi ciklas tol, kol bus aptikta komanda &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt;. Komanda &amp;lt;code&amp;gt;skaitoma_eilutė = skaitymo_failas.readline()&amp;lt;/code&amp;gt; perskaito pirmą eilutę ir priskiria kintamajam &amp;lt;code&amp;gt;skaitome_eilutė&amp;lt;/code&amp;gt;. Pasiekus failo pabaigą, funkcija &amp;lt;code&amp;gt;readline&amp;lt;/code&amp;gt; grąžins tuščią eilutę. Sąlyginis sakinys &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; tai patikrina ir panaudojant komandą &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt; nutraukia &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; ciklą. Funkcija &amp;lt;code&amp;gt;readline&amp;lt;/code&amp;gt; perskaito ir grąžina vieną eilutę kartu su jos pabaigos simboliu. Tai yra tam, kad būtų galima spręsti ar tai yra tik tuščia eilutė, ar jau failo pabaiga. Taigi turime atsikratyti to paskutinio eilutės pabaigos simbolio. Komanda &amp;lt;code&amp;gt;skaitoma_eilutė = skaitoma_eilutė[:-1]&amp;lt;/code&amp;gt; tai padaro už mus, išmesdama paskutinį simbolį. Toliau eilutė &amp;lt;code&amp;gt;vardas, numeris = skaitoma_eilutė.split(&amp;quot;,&amp;quot;)&amp;lt;/code&amp;gt; padalija eilutę ties kableliu į vardą ir telefono numerį ir visa tai įtraukiama į &amp;lt;code&amp;gt;numeriai&amp;lt;/code&amp;gt; žodyną.&lt;br /&gt;
&lt;br /&gt;
=== Darbo su failais rėžimai ===&lt;br /&gt;
Be &amp;lt;code&amp;gt;&amp;quot;rt&amp;quot;&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;&amp;quot;wt&amp;quot;&amp;lt;/code&amp;gt; yra ir kitų darbo su failais rėžimų. Lentelėje rasi visų rėžimų sąrašą:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Rėžimas&lt;br /&gt;
!Paaiškinimas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;rt&amp;quot;&lt;br /&gt;
|Tekstinio failo nuskatymas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;wt&amp;quot;&lt;br /&gt;
|Teksto rašymas į failą&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;xt&amp;quot;&lt;br /&gt;
|Naujo teskinio failo kūrimas. Jei toks failas jau egzistuoja bus gaunama klaida&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;at&amp;quot;&lt;br /&gt;
|Tekstinio failo papildymas. Failo turinys bus pildomas nuo edamo failo pabaigos&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;r&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;rt&amp;quot; rėžimui. Tekstinio failo nuskatymas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;w&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;w&amp;quot; rėžimui. Teksto rašymas į failą&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;x&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;x&amp;quot; rėžimui. Naujo teskinio failo kūrimas. Jei toks failas jau egzistuoja bus gaunama klaida&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;a&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;a&amp;quot; rėžimui. Tekstinio failo papildymas. Failo turinys bus pildomas nuo edamo failo pabaigos&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;rb&amp;quot;&lt;br /&gt;
|Dvejetainio duomenų failo nuskatymas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;wb&amp;quot;&lt;br /&gt;
|Dvejetainės informacijos rašymas į failą&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;xb&amp;quot;&lt;br /&gt;
|Naujo dvejetainio failo kūrimas. Jei toks failas jau egzistuoja bus gaunama klaida&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;ab&amp;quot;&lt;br /&gt;
|Dvejetainio failo papildymas. Failo turinys bus pildomas nuo edamo failo pabaigos&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;r+&amp;quot;&lt;br /&gt;
|Tekstinio failo skaitymas ir rašymas. Esamas failo turinys nėra išvalomas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;w+&amp;quot;&lt;br /&gt;
|Tekstinio failo skaitymas ir rašymas. Esamas failo turinys yra išvalomas rašant į failą.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;r+b&amp;quot;&lt;br /&gt;
|Dvejetainio failo skaitymas ir rašymas. Esamas failo turinys nėra išvalomas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;w+b&amp;quot;&lt;br /&gt;
|Dvejetainio failo skaitymas ir rašymas. Esamas failo turinys yra išvalomas rašant į failą.&lt;br /&gt;
|}&lt;br /&gt;
Dvvejetainiai rėžimai šiame vadovėlyje plačiau nagrinėjami nėra&lt;br /&gt;
&lt;br /&gt;
=== Pagrindinės darbo su tekstiniais failais operacijos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Operacija&lt;br /&gt;
!Paaiškinimas&lt;br /&gt;
|-&lt;br /&gt;
|failas.read()&lt;br /&gt;
|Nuskaitomas visas failo turinys&lt;br /&gt;
|-&lt;br /&gt;
|failas.read(kiek)&lt;br /&gt;
|Nuskaitomas nuordytas simbolių kiekis iš failo. Pvz naudojant failas.read(3) bus nuskaitomi 3 sekantys simboliai&lt;br /&gt;
|-&lt;br /&gt;
|failas.readline()&lt;br /&gt;
|Nuskaitoma sekanti failo eilutė&lt;br /&gt;
|-&lt;br /&gt;
|failas.readlines()&lt;br /&gt;
|Nuskaitomos visos failo eilutės. Gražinamas sąrašas sudarytas iš teksto eilučių&lt;br /&gt;
|-&lt;br /&gt;
|failas.close()&lt;br /&gt;
|Failo uždarymas. Uždarius failą veiksmai su juo negalimi. Atidarant failą naudojant with funkciją, jis bus uždarytas automatiškai, tad close() naudoti nebereikia&lt;br /&gt;
|-&lt;br /&gt;
|failas.write(rašomas_tesktas)&lt;br /&gt;
|Įrašo nurodytą tekstą į failą.&lt;br /&gt;
|-&lt;br /&gt;
|failas.writelines(rašomo_teksto_eilučių_sąrašas)&lt;br /&gt;
|Sąrašas sudarytas iš teskto eilučių yra įrašomas į failą. Kiekvienas sąrašo elementas bus įrašomas naujoje eilutėje&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Paketinis ir interaktyvus failų apdorojimas ===&lt;br /&gt;
&lt;br /&gt;
Failai gali būti apdorojami įvairiais būdais. Vieni dažniausiai naudojamų naudingų būdų, tai paketinis duomenų apdorojimas ir interaktyvus duomenų apdorojimas.&lt;br /&gt;
&lt;br /&gt;
Skaitymas iš failo yra vadinamas paketiniu duomenų apdorojimu, nes visi duomenys iš failo yra nuskaitomi ir apdorojami kaip vienas paketas. Tai reiškia, kad visi duomenys yra nuskaitomi iš failo į kompiuterio atmintį vienu metu ir toliau apdorojami kompiuterio procesorių, o ne tiesiogiai iš failo.&lt;br /&gt;
&lt;br /&gt;
Pavyzdžiui, jei turi didelio dydžio tekstinį failą ir nori jį apdoroti programoje, failas bus nuskaitomas į atmintį ir tada apdorotas kaip vienas paketas, o ne kaip atskiri duomenų elementai.&lt;br /&gt;
&lt;br /&gt;
Interaktyvus duomenų apdorojimas – tai būdas dirbti su duomenimis, kai vartotojas gali manipuliuoti įvairiais nustatymais, o ne laikytis iš anksto užprogramuotų algoritmų. Tai leidžia geriau valdyti rezultatus ir geriau suprasti duomenis.&lt;br /&gt;
&lt;br /&gt;
=== Pažangesnis .txt failų naudojimas ===&lt;br /&gt;
&lt;br /&gt;
Galbūt tau kyla toks klausimas: „Aš žinau, kaip skaityti ir rašyti tekstinį failą, bet ką daryti, jei noriu atspausdinti failą spausdintuvu?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Yra keletas skirtingų būdų, kaip tai padaryti. Iš tikrųjų, pats lengviausias būdas yra atidaryti kitą programą, tada leisti viskuo pasirūpinti Python&#039;o kodui, kad tau nereikėtų pačiam failo atidarinėti ir spausdinti. Šis metodas apima kitos programos subproceso (arba antrinis procesas; biblioteka &#039;subprocess&#039;) iškvietimą. &lt;br /&gt;
&lt;br /&gt;
Prisimeni failą, į kurį įrašėme išvestį aukščiau esančioje programoje? Panaudokime tą failą.&lt;br /&gt;
Turėk omenyje, kad norint išvengti klaidų, ši programa naudoja sąvokas iš kito skyriaus. Nedvejodamas gali dar kartą peržiūrėti šį pavyzdį po kito skyriaus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import subprocess&lt;br /&gt;
def pagrindinis():&lt;br /&gt;
    try:&lt;br /&gt;
        print(&amp;quot;Ši maža programa iškviečia spausdinimo funkciją Notepad programoje&amp;quot;)&lt;br /&gt;
        #Atspausdinkime failą, kurį sukūrėme aukščiau esančioje programoje&lt;br /&gt;
        subprocess.call([&#039;notepad&#039;,&#039;/p&#039;,&#039;numeriai.txt&#039;])&lt;br /&gt;
    except WindowsError:&lt;br /&gt;
        print(&amp;quot;Pakviesto subproceso nėra arba jo negalima iškviesti.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
pagrindinis()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;subprocess.call&amp;lt;/code&amp;gt; turi tris argumentus. Pirmasis argumentas šio pavyzdžio kontekste turėtų būti programos pavadinimas, iš kurios nori iškviesti spausdinimo subprocesą. Antrasis argumentas turėtų būti konkretus tos programos subprocesas. Kad būtų paprasčiau, tiesiog suprask, kad šioje programoje &amp;lt;code&amp;gt;&#039;/p&#039;&amp;lt;/code&amp;gt; yra subprocesas, naudojamas norint pasiekti spausdintuvą per nurodytą programą. Paskutinis argumentas turėtų būti failo pavadinimas, kurį norite siųsti į spausdinimo subprocesą. Šiuo atveju tai yra tas pats failas, naudotas anksčiau šiame skyriuje.&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
1. Parašyk programą, kuri suskaičiuotų, kiek faile yra eilučių.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
failas = input(&amp;quot;Kokio failo eilutes skaičiuoti? &amp;quot;)&lt;br /&gt;
įvesties_failas = open(failas, &amp;quot;r&amp;quot;)&lt;br /&gt;
eilutės = įvesties_failas.readlines()&lt;br /&gt;
įvesties_failas.close()&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Failas&amp;quot;, failas, &amp;quot;turi&amp;quot;, len(eilutės), &amp;quot; eilutes&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Parašyk programą, kuri nukopijuotų vieno failo lygines eilutes į kitą failą.&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
įvesties_failo_pavadinimas = input(&amp;quot;Kokio failo eilutes kopijuoti? &amp;quot;)&lt;br /&gt;
įvesties_failas = open(įvesties_failo_pavadinimas, &amp;quot;r&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
išvesties_failo_pavadinimas = input(&amp;quot;Į kokį failą išsaugoti lygines eilutes? &amp;quot;)&lt;br /&gt;
išvesties_failas = open(išvesties_failo_pavadinimas, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
eilutės_numeris = 0&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    eilutė = įvesties_failas.readline()&lt;br /&gt;
    eilutės_numeris = eilutės_numeris + 1&lt;br /&gt;
    if not eilutė:&lt;br /&gt;
        break&lt;br /&gt;
    else:&lt;br /&gt;
        if (eilutės_numeris % 2) == 0:&lt;br /&gt;
            išvesties_failas.write(eilutė)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
įvesties_failas.close()&lt;br /&gt;
išvesties_failas.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Dabar pakeisk pažymių programą iš skyriaus [[Vadovėlis/Žodynai|Žodynai]], kad ji naudotų failus mokinių pažymiams saugoti.&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
užduotys = [&#039;nd sk 1&#039;, &#039;nd sk 2&#039;, &#039;viktorina   &#039;, &#039;nd sk 3&#039;, &#039;testas&#039;]&lt;br /&gt;
mokiniai = { }&lt;br /&gt;
&lt;br /&gt;
def įkelti_pažymius(pažymių_failas):&lt;br /&gt;
    įvesties_failas = open(pažymių_failas, &amp;quot;r&amp;quot;)&lt;br /&gt;
    pažymiai = [ ]&lt;br /&gt;
    while True:&lt;br /&gt;
        mokinys_ir_pažymys = įvesties_failas.readline()&lt;br /&gt;
        mokinys_ir_pažymys = mokinys_ir_pažymys[:-1]&lt;br /&gt;
        if not mokinys_ir_pažymys:&lt;br /&gt;
            break&lt;br /&gt;
        else:&lt;br /&gt;
            mokinio_vardas, mokinio_pažymiai = mokinys_ir_pažymys.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
            mokinio_pažymiai = mokinio_pažymiai.split(&amp;quot; &amp;quot;)&lt;br /&gt;
            mokiniai[mokinio_vardas] = mokinio_pažymiai&lt;br /&gt;
    įvesties_failas.close()&lt;br /&gt;
    print(&amp;quot;Pažymiai įkelti.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def išsaugoti_pažymius(pažymių_failas):&lt;br /&gt;
    išvesties_failas = open(pažymių_failas, &amp;quot;w&amp;quot;)&lt;br /&gt;
    for k, v in mokiniai.items():&lt;br /&gt;
        išvesties_failas.write(k + &amp;quot;,&amp;quot;)&lt;br /&gt;
        for x in v:&lt;br /&gt;
            išvesties_failas.write(str(x) + &amp;quot; &amp;quot;)&lt;br /&gt;
        išvesties_failas.write(&amp;quot;\n&amp;quot;)&lt;br /&gt;
    išvesties_failas.close()&lt;br /&gt;
    print(&amp;quot;Pažymiai išsaugoti.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def spausdink_meniu():&lt;br /&gt;
    print(&amp;quot;1. Pridėk mokinį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;2. Pašalink mokinį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;3. Įkrauti pažymius&amp;quot;)&lt;br /&gt;
    print(&amp;quot;4. Įrašyk pažymį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;5. Spausdink pažymius&amp;quot;)&lt;br /&gt;
    print(&amp;quot;6. Įšsaugoti pažymius&amp;quot;)&lt;br /&gt;
    print(&amp;quot;7. Spausdink meniu&amp;quot;)&lt;br /&gt;
    print(&amp;quot;9. Išeik&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def spausdink_visus_pažymius():&lt;br /&gt;
    if mokiniai:&lt;br /&gt;
        raktai = sorted(mokiniai.keys())&lt;br /&gt;
        print(&#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
        for x in užduotys:&lt;br /&gt;
            print(x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
        print()&lt;br /&gt;
        for x in raktai:&lt;br /&gt;
            print(x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
            pažymiai = mokiniai[x]&lt;br /&gt;
            spausdink_pažymius(pažymiai)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Neradau pažymių spausdinimui.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def spausdink_pažymius(pažymiai):&lt;br /&gt;
    for x in pažymiai:&lt;br /&gt;
        print(x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
spausdink_meniu()&lt;br /&gt;
meniu_pasirinkimas = 0&lt;br /&gt;
while meniu_pasirinkimas != 9:&lt;br /&gt;
    print()&lt;br /&gt;
    meniu_pasirinkimas = int(input(&amp;quot;Meniu pasirinkimas: &amp;quot;))&lt;br /&gt;
    if meniu_pasirinkimas == 1:&lt;br /&gt;
        vardas = input(&amp;quot;Pridėk mokinį: &amp;quot;)&lt;br /&gt;
        mokiniai[vardas] = [0] * len(užduotys)&lt;br /&gt;
    elif meniu_pasirinkimas == 2:&lt;br /&gt;
        vardas = input(&amp;quot;Pašalink mokinį: &amp;quot;)&lt;br /&gt;
        if vardas in mokiniai:&lt;br /&gt;
            del mokiniai[vardas]&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Mokinys vardu:&amp;quot;, vardas, &amp;quot; nerastas.&amp;quot;)&lt;br /&gt;
    elif meniu_pasirinkimas == 3:&lt;br /&gt;
        pažymių_failas = input(&amp;quot;Įkrauti pažymius iš kokio failo? &amp;quot;)&lt;br /&gt;
        įkelti_pažymius(pažymių_failas)&lt;br /&gt;
    elif meniu_pasirinkimas == 4:&lt;br /&gt;
        print(&amp;quot;Įrašyk pažymį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Mokinys: &amp;quot;)&lt;br /&gt;
        if vardas in mokiniai:&lt;br /&gt;
            pažymiai = mokiniai[vardas]&lt;br /&gt;
            print(&amp;quot;Įrašyk mokinio pažymį&amp;quot;)&lt;br /&gt;
            print(&amp;quot;Įrašyk 0 (nulį), kad išeitum&amp;quot;)&lt;br /&gt;
            for i,x in enumerate(užduotys):&lt;br /&gt;
                print(i + 1, x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
            print()&lt;br /&gt;
            spausdink_pažymius(pažymiai)&lt;br /&gt;
            kuris = 1234&lt;br /&gt;
            while kuris != -1:&lt;br /&gt;
                kuris = int(input(&amp;quot;Pažymys, kurį nori pakeisti: &amp;quot;))&lt;br /&gt;
                kuris -= 1&lt;br /&gt;
                if 0 &amp;lt;= kuris &amp;lt; len(pažymiai):&lt;br /&gt;
                    pažymys = int(input(&amp;quot;Pažymys: &amp;quot;))&lt;br /&gt;
                    pažymiai[kuris] = pažymys&lt;br /&gt;
                elif kuris != -1:&lt;br /&gt;
                    print(&amp;quot;Klaidingas pažymys&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Mokinys nerastas&amp;quot;)&lt;br /&gt;
    elif meniu_pasirinkimas == 5:&lt;br /&gt;
        spausdink_visus_pažymius()&lt;br /&gt;
    elif meniu_pasirinkimas == 6:&lt;br /&gt;
        pažymių_failas = input(&amp;quot;Į kokį failą išsaugoti pažymius? &amp;quot;)&lt;br /&gt;
        išsaugoti_pažymius(pažymių_failas)&lt;br /&gt;
    elif meniu_pasirinkimas != 9:&lt;br /&gt;
        spausdink_meniu()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Daugiau apie funkcijas |next=Siekiant tobulumo}}&lt;br /&gt;
[[Category:Python Vadovėlis]]&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Fail%C5%B3_tvarkymas&amp;diff=372</id>
		<title>Vadovėlis/Failų tvarkymas</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Fail%C5%B3_tvarkymas&amp;diff=372"/>
		<updated>2023-06-23T07:54:41Z</updated>

		<summary type="html">&lt;p&gt;Monika: /* Paketinis ir interaktyvus failų apdorojimas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Daugiau apie funkcijas |next=Siekiant tobulumo}}&lt;br /&gt;
&lt;br /&gt;
=== Failų įvestis/išvestis ===&lt;br /&gt;
&lt;br /&gt;
Štai paprastas failo įvesties ir išvesties (I/O, ang. Input/Output) pavyzdys:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Rašyti į failą&lt;br /&gt;
with open(&amp;quot;testas.txt&amp;quot;, &amp;quot;wt&amp;quot;) as rašomas_failas:&lt;br /&gt;
    rašomas_failas.write(&amp;quot;Šis tekstas bus išsiųstas į failą\nPažiūrėk ir pamatysi!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Skaityti failą&lt;br /&gt;
with open(&amp;quot;testas.txt&amp;quot;, &amp;quot;rt&amp;quot;) as skaitomas_failas:&lt;br /&gt;
    tekstas = skaitomas_failas.read()&lt;br /&gt;
&lt;br /&gt;
print(tekstas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Failo &amp;lt;code&amp;gt;testas.txt&amp;lt;/code&amp;gt; išvestis ir turinys yra:&lt;br /&gt;
&lt;br /&gt;
 Šis tekstas bus išsiųstas į failą&lt;br /&gt;
 Pažiūrėk ir pamatysi!&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad programa sukūrė failą pavadinimu &amp;lt;code&amp;gt;testas.txt&amp;lt;/code&amp;gt; kataloge, iš kurio paleidai programą.  Eilutėje esantis &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; nurodo Python&#039;ui toje vietoje peršokti į naują eilutę.  &lt;br /&gt;
&lt;br /&gt;
Apžvelkime visus veiksmus su failais:&lt;br /&gt;
* Gauk failo objektą su funkcija &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;&lt;br /&gt;
* Skaityk iš arba rašyk į failo objektą (priklausomai nuo to, kokiu režimu jis buvo atidarytas)&lt;br /&gt;
* Jeigu failui atidaryti nenaudojai funkcijos &amp;lt;code&amp;gt;with&amp;lt;/code&amp;gt;, turėsi jį uždaryti rankiniu būdu&lt;br /&gt;
&lt;br /&gt;
Pirmas žingsnis yra gauti failo objektą. Tai galima padaryti naudojant funkciją &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;. Formatas yra &amp;lt;code&amp;gt;failo_objektas = open(failo_pavadinimas, režimas)&amp;lt;/code&amp;gt;, kur &amp;lt;code&amp;gt;failo_objektas&amp;lt;/code&amp;gt; yra kintamasis, į kurį reikia įdėti failo objektą, &amp;lt;code&amp;gt;failo_pavadinimas&amp;lt;/code&amp;gt; yra eilutė su failo pavadinimu, o &amp;lt;code&amp;gt;režimas&amp;lt;/code&amp;gt; yra &amp;lt;code&amp;gt;&amp;quot;rt&amp;quot;&amp;lt;/code&amp;gt;, kad (ang. &#039;&#039;r&#039;&#039;ead) skaityti failą kaip &#039;&#039;t&#039;&#039;ekstą arba &amp;lt;code&amp;gt;&amp;quot;wt&amp;quot;&amp;lt;/code&amp;gt; (&#039;&#039;w&#039;&#039;rite) rašytį į failą kaip &#039;&#039;t&#039;&#039;ekstą (ir keletą kitų režimų, kuriuos čia praleisime). Toliau galima iškviesti failų objektų funkcijas. Dvi dažniausiai naudojamos funkcijos yra &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; (skaityti) ir &amp;lt;code&amp;gt;write&amp;lt;/code&amp;gt; (rašyti). Funkcija &amp;lt;code&amp;gt;write&amp;lt;/code&amp;gt; prideda eilutę prie failo pabaigos. Funkcija &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; nuskaito failo turinį ir grąžina jį kaip eilutę (kaip padaryta pavyzdyje). &lt;br /&gt;
&lt;br /&gt;
O dabar čia yra nauja telefono numerių programos versija, kurią jau sukūrei anksčiau:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def spausdink_numerius(numeriai):&lt;br /&gt;
    print(&amp;quot;Telefono numeriai:&amp;quot;)&lt;br /&gt;
    for k, v in numeriai.items():&lt;br /&gt;
        print(&amp;quot;Vardas:&amp;quot;, k, &amp;quot;\tTelefono numeris:&amp;quot;, v)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
def pridėk_numerį(numeriai, vardas, numeris):&lt;br /&gt;
    numeriai[vardas] = numeris&lt;br /&gt;
&lt;br /&gt;
def surask_numerį(numeriai, vardas):&lt;br /&gt;
    if vardas in numeriai:&lt;br /&gt;
        return &amp;quot;Telefono numeris yra &amp;quot; + numeriai[vardas]&lt;br /&gt;
    else:&lt;br /&gt;
        return vardas + &amp;quot; nebuvo rastas&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def pašalink_numerį(numeriai, vardas):&lt;br /&gt;
    if vardas in numeriai:&lt;br /&gt;
        del numeriai[vardas]&lt;br /&gt;
    else:&lt;br /&gt;
        print(vardas,&amp;quot; nebuvo rastas&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def įkelti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    skaitymo_failas = open(failo_pavadinimas, &amp;quot;rt&amp;quot;)&lt;br /&gt;
    while True:&lt;br /&gt;
        skaitoma_eilutė = skaitymo_failas.readline()&lt;br /&gt;
        if not skaitoma_eilutė:&lt;br /&gt;
            break&lt;br /&gt;
        skaitoma_eilutė = skaitoma_eilutė[:-1]&lt;br /&gt;
        vardas, numeris = skaitoma_eilutė.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
        numeriai[vardas] = numeris&lt;br /&gt;
    skaitymo_failas.close()&lt;br /&gt;
&lt;br /&gt;
def išsaugoti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    išvesties_failas = open(failo_pavadinimas, &amp;quot;wt&amp;quot;)&lt;br /&gt;
    for k, v in numeriai.items():&lt;br /&gt;
        išvesties_failas.write(k + &amp;quot;,&amp;quot; + v + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    išvesties_failas.close()&lt;br /&gt;
&lt;br /&gt;
def spausdink_meniu():&lt;br /&gt;
    print(&#039;1. Spausdink telefonų numerius&#039;)&lt;br /&gt;
    print(&#039;2. Pridėk telefono numerį&#039;)&lt;br /&gt;
    print(&#039;3. Pašalink telefono numerį&#039;)&lt;br /&gt;
    print(&#039;4. Ieškok telefono numerio&#039;)&lt;br /&gt;
    print(&#039;5. Įkelk telefono numerius&#039;)&lt;br /&gt;
    print(&#039;6. Išsaugok telefono numerius&#039;)&lt;br /&gt;
    print(&#039;7. Išeik&#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
numeriai = {}&lt;br /&gt;
meniu_pasirinkimas = 0&lt;br /&gt;
spausdink_meniu()&lt;br /&gt;
while True:&lt;br /&gt;
    meniu_pasirinkimas = int(input(&amp;quot;Įvesk skaičių (1-7): &amp;quot;))&lt;br /&gt;
    if meniu_pasirinkimas == 1:&lt;br /&gt;
        spausdink_numerius(numeriai)&lt;br /&gt;
    elif meniu_pasirinkimas == 2:&lt;br /&gt;
        print(&amp;quot;Pridėk vardą ir telefono numerį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        numeris = input(&amp;quot;Telefono numeris: &amp;quot;)&lt;br /&gt;
        pridėk_numerį(numeriai, vardas, numeris)&lt;br /&gt;
    elif meniu_pasirinkimas == 3:&lt;br /&gt;
        print(&amp;quot;Pašalink vardą ir telefono numerį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        pašalink_numerį(numeriai, vardas)&lt;br /&gt;
    elif meniu_pasirinkimas == 4:&lt;br /&gt;
        print(&amp;quot;Ieškok telefono numerio&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        print(surask_numerį(numeriai, vardas))&lt;br /&gt;
    elif meniu_pasirinkimas == 5:&lt;br /&gt;
        failo_pavadinimas = input(&amp;quot;Failo pavadinimas, kurį nori įkelti: &amp;quot;)&lt;br /&gt;
        įkelti_numerius(numeriai, failo_pavadinimas)&lt;br /&gt;
    elif meniu_pasirinkimas == 6:&lt;br /&gt;
        failo_pavadinimas = input(&amp;quot;Failo pavadinimas išsaugojimui: &amp;quot;)&lt;br /&gt;
        išsaugoti_numerius(numeriai, failo_pavadinimas)&lt;br /&gt;
    elif meniu_pasirinkimas == 7:&lt;br /&gt;
        break&lt;br /&gt;
    else:&lt;br /&gt;
        spausdink_meniu()&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Viso!&amp;quot;)  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gali pastebėti, kad dabar kodas papildomai išsaugo ir perskaito failus. Štai dviejų programos vykdymų išvestis:&lt;br /&gt;
&lt;br /&gt;
 1. Spausdink telefonų numerius&lt;br /&gt;
 2. Pridėk telefono numerį&lt;br /&gt;
 3. Pašalink telefono numerį&lt;br /&gt;
 4. Ieškok telefono numerio&lt;br /&gt;
 5. Įkelk telefono numerius&lt;br /&gt;
 6. Išsaugok telefono numerius&lt;br /&gt;
 7. Išeik&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Liepa&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeris: &#039;&#039;&#039;1234&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Benas&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeris: &#039;&#039;&#039;4321&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeriai:&lt;br /&gt;
 Vardas: Liepa     Telefono numeris: 1234&lt;br /&gt;
 Vardas: Benas     Telefono numeris: 4321&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
 Failo pavadinimas išsaugojimui: &#039;&#039;&#039;numeriai.txt&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;7&#039;&#039;&#039;&lt;br /&gt;
 Viso!&lt;br /&gt;
&lt;br /&gt;
 1. Spausdink telefonų numerius&lt;br /&gt;
 2. Pridėk telefono numerį&lt;br /&gt;
 3. Pašalink telefono numerį&lt;br /&gt;
 4. Ieškok telefono numerio&lt;br /&gt;
 5. Įkelk telefono numerius&lt;br /&gt;
 6. Išsaugok telefono numerius&lt;br /&gt;
 7. Išeik&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
 Failo pavadinimas, kurį nori įkelti: &#039;&#039;&#039;numeriai.txt&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeriai:&lt;br /&gt;
 Vardas: Liepa     Telefono numeris: 1234&lt;br /&gt;
 Vardas: Benas     Telefono numeris: 4321&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;7&#039;&#039;&#039;&lt;br /&gt;
 Viso!&lt;br /&gt;
&lt;br /&gt;
Naujos šios programos dalys yra:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def įkelti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    skaitymo_failas = open(failo_pavadinimas, &amp;quot;rt&amp;quot;)&lt;br /&gt;
    while True:&lt;br /&gt;
        skaitoma_eilutė = skaitymo_failas.readline()&lt;br /&gt;
        if not skaitoma_eilutė:&lt;br /&gt;
            break&lt;br /&gt;
        skaitoma_eilutė = skaitoma_eilutė[:-1]&lt;br /&gt;
        vardas, numeris = skaitoma_eilutė.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
        numeriai[vardas] = numeris&lt;br /&gt;
    skaitymo_failas.close()&lt;br /&gt;
&lt;br /&gt;
def išsaugoti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    išvesties_failas = open(failo_pavadinimas, &amp;quot;wt&amp;quot;)&lt;br /&gt;
    for k, v in numeriai.items():&lt;br /&gt;
        išvesties_failas.write(k + &amp;quot;,&amp;quot; + v + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    išvesties_failas.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pirmiausia pažiūrėk į programos išsaugojimo dalį. Visų pirma, sukuriamas failo objektas su komanda &amp;lt;code&amp;gt;open(failo_pavadinimas, &amp;quot;wt&amp;quot;)&amp;lt;/code&amp;gt;. Toliau sukuriama eilutė kiekvienam telefono numeriui su komanda &amp;lt;code&amp;gt;išvesties_failas.write(k + &amp;quot;,&amp;quot; + v + &amp;quot;\n&amp;quot;)&amp;lt;/code&amp;gt;. Tai išrašo eilutę, kurioje yra vardas, kablelis, telefono numeris, o po jos rašoma nauja eilutė.&lt;br /&gt;
&lt;br /&gt;
Failo skaitymo dalis yra šiek tiek sudėtingesnė. Ji prasideda failo objekto gavimu. Tada ji naudoja &amp;lt;code&amp;gt;while True:&amp;lt;/code&amp;gt; ciklą, kad tęstųsi ciklas tol, kol bus aptikta komanda &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt;. Komanda &amp;lt;code&amp;gt;skaitoma_eilutė = skaitymo_failas.readline()&amp;lt;/code&amp;gt; perskaito pirmą eilutę ir priskiria kintamajam &amp;lt;code&amp;gt;skaitome_eilutė&amp;lt;/code&amp;gt;. Pasiekus failo pabaigą, funkcija &amp;lt;code&amp;gt;readline&amp;lt;/code&amp;gt; grąžins tuščią eilutę. Sąlyginis sakinys &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; tai patikrina ir panaudojant komandą &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt; nutraukia &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; ciklą. Funkcija &amp;lt;code&amp;gt;readline&amp;lt;/code&amp;gt; perskaito ir grąžina vieną eilutę kartu su jos pabaigos simboliu. Tai yra tam, kad būtų galima spręsti ar tai yra tik tuščia eilutė, ar jau failo pabaiga. Taigi turime atsikratyti to paskutinio eilutės pabaigos simbolio. Komanda &amp;lt;code&amp;gt;skaitoma_eilutė = skaitoma_eilutė[:-1]&amp;lt;/code&amp;gt; tai padaro už mus, išmesdama paskutinį simbolį. Toliau eilutė &amp;lt;code&amp;gt;vardas, numeris = skaitoma_eilutė.split(&amp;quot;,&amp;quot;)&amp;lt;/code&amp;gt; padalija eilutę ties kableliu į vardą ir telefono numerį ir visa tai įtraukiama į &amp;lt;code&amp;gt;numeriai&amp;lt;/code&amp;gt; žodyną.&lt;br /&gt;
&lt;br /&gt;
=== Darbo su failais rėžimai ===&lt;br /&gt;
Be &amp;lt;code&amp;gt;&amp;quot;rt&amp;quot;&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;&amp;quot;wt&amp;quot;&amp;lt;/code&amp;gt; yra ir kitų darbo su failais rėžimų. Lentelėje rasi visų rėžimų sąrašą:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Rėžimas&lt;br /&gt;
!Paaiškinimas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;rt&amp;quot;&lt;br /&gt;
|Tekstinio failo nuskatymas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;wt&amp;quot;&lt;br /&gt;
|Teksto rašymas į failą&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;xt&amp;quot;&lt;br /&gt;
|Naujo teskinio failo kūrimas. Jei toks failas jau egzistuoja bus gaunama klaida&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;at&amp;quot;&lt;br /&gt;
|Tekstinio failo papildymas. Failo turinys bus pildomas nuo edamo failo pabaigos&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;r&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;rt&amp;quot; rėžimui. Tekstinio failo nuskatymas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;w&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;w&amp;quot; rėžimui. Teksto rašymas į failą&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;x&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;x&amp;quot; rėžimui. Naujo teskinio failo kūrimas. Jei toks failas jau egzistuoja bus gaunama klaida&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;a&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;a&amp;quot; rėžimui. Tekstinio failo papildymas. Failo turinys bus pildomas nuo edamo failo pabaigos&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;rb&amp;quot;&lt;br /&gt;
|Dvejetainio duomenų failo nuskatymas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;wb&amp;quot;&lt;br /&gt;
|Dvejetainės informacijos rašymas į failą&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;xb&amp;quot;&lt;br /&gt;
|Naujo dvejetainio failo kūrimas. Jei toks failas jau egzistuoja bus gaunama klaida&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;ab&amp;quot;&lt;br /&gt;
|Dvejetainio failo papildymas. Failo turinys bus pildomas nuo edamo failo pabaigos&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;r+&amp;quot;&lt;br /&gt;
|Tekstinio failo skaitymas ir rašymas. Esamas failo turinys nėra išvalomas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;w+&amp;quot;&lt;br /&gt;
|Tekstinio failo skaitymas ir rašymas. Esamas failo turinys yra išvalomas rašant į failą.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;r+b&amp;quot;&lt;br /&gt;
|Dvejetainio failo skaitymas ir rašymas. Esamas failo turinys nėra išvalomas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;w+b&amp;quot;&lt;br /&gt;
|Dvejetainio failo skaitymas ir rašymas. Esamas failo turinys yra išvalomas rašant į failą.&lt;br /&gt;
|}&lt;br /&gt;
Dvvejetainiai rėžimai šiame vadovėlyje plačiau nagrinėjami nėra&lt;br /&gt;
&lt;br /&gt;
=== Pagrindinės darbo su tekstiniais failais operacijos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Operacija&lt;br /&gt;
!Paaiškinimas&lt;br /&gt;
|-&lt;br /&gt;
|failas.read()&lt;br /&gt;
|Nuskaitomas visas failo turinys&lt;br /&gt;
|-&lt;br /&gt;
|failas.read(kiek)&lt;br /&gt;
|Nuskaitomas nuordytas simbolių kiekis iš failo. Pvz naudojant failas.read(3) bus nuskaitomi 3 sekantys simboliai&lt;br /&gt;
|-&lt;br /&gt;
|failas.readline()&lt;br /&gt;
|Nuskaitoma sekanti failo eilutė&lt;br /&gt;
|-&lt;br /&gt;
|failas.readlines()&lt;br /&gt;
|Nuskaitomos visos failo eilutės. Gražinamas sąrašas sudarytas iš teksto eilučių&lt;br /&gt;
|-&lt;br /&gt;
|failas.close()&lt;br /&gt;
|Failo uždarymas. Uždarius failą veiksmai su juo negalimi. Atidarant failą naudojant with funkciją, jis bus uždarytas automatiškai, tad close() naudoti nebereikia&lt;br /&gt;
|-&lt;br /&gt;
|failas.write(rašomas_tesktas)&lt;br /&gt;
|Įrašo nurodytą tekstą į failą.&lt;br /&gt;
|-&lt;br /&gt;
|failas.writelines(rašomo_teksto_eilučių_sąrašas)&lt;br /&gt;
|Sąrašas sudarytas iš teskto eilučių yra įrašomas į failą. Kiekvienas sąrašo elementas bus įrašomas naujoje eilutėje&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Paketinis ir interaktyvus failų apdorojimas ===&lt;br /&gt;
&lt;br /&gt;
Paketinis duomenų apdorojimas ir interaktyvus duomenų apdorojimas yra naudingi duomenų tvarkymo metodai.&lt;br /&gt;
&lt;br /&gt;
Skaitymas iš failo yra vadinamas paketiniu duomenų apdorojimu, nes visi duomenys iš failo yra nuskaitomi ir apdorojami kaip vienas paketas. Tai reiškia, kad visi duomenys yra nuskaitomi iš failo į kompiuterio atmintį vienu metu ir toliau apdorojami kompiuterio procesorių, o ne tiesiogiai iš failo.&lt;br /&gt;
&lt;br /&gt;
Pavyzdžiui, jei turi didelio dydžio tekstinį failą ir nori jį apdoroti programoje, failas bus nuskaitomas į atmintį ir tada apdorotas kaip vienas paketas, o ne kaip atskiri duomenų elementai.&lt;br /&gt;
&lt;br /&gt;
Interaktyvus duomenų apdorojimas – tai būdas dirbti su duomenimis, kai vartotojas gali manipuliuoti įvairiais nustatymais, o ne laikytis iš anksto užprogramuotų algoritmų. Tai leidžia geriau valdyti rezultatus ir geriau suprasti duomenis.&lt;br /&gt;
&lt;br /&gt;
=== Pažangesnis .txt failų naudojimas ===&lt;br /&gt;
&lt;br /&gt;
Galbūt tau kyla toks klausimas: „Aš žinau, kaip skaityti ir rašyti tekstinį failą, bet ką daryti, jei noriu atspausdinti failą spausdintuvu?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Yra keletas skirtingų būdų, kaip tai padaryti. Iš tikrųjų, pats lengviausias būdas yra atidaryti kitą programą, tada leisti viskuo pasirūpinti Python&#039;o kodui, kad tau nereikėtų pačiam failo atidarinėti ir spausdinti. Šis metodas apima kitos programos subproceso (arba antrinis procesas; biblioteka &#039;subprocess&#039;) iškvietimą. &lt;br /&gt;
&lt;br /&gt;
Prisimeni failą, į kurį įrašėme išvestį aukščiau esančioje programoje? Panaudokime tą failą.&lt;br /&gt;
Turėk omenyje, kad norint išvengti klaidų, ši programa naudoja sąvokas iš kito skyriaus. Nedvejodamas gali dar kartą peržiūrėti šį pavyzdį po kito skyriaus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import subprocess&lt;br /&gt;
def pagrindinis():&lt;br /&gt;
    try:&lt;br /&gt;
        print(&amp;quot;Ši maža programa iškviečia spausdinimo funkciją Notepad programoje&amp;quot;)&lt;br /&gt;
        #Atspausdinkime failą, kurį sukūrėme aukščiau esančioje programoje&lt;br /&gt;
        subprocess.call([&#039;notepad&#039;,&#039;/p&#039;,&#039;numeriai.txt&#039;])&lt;br /&gt;
    except WindowsError:&lt;br /&gt;
        print(&amp;quot;Pakviesto subproceso nėra arba jo negalima iškviesti.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
pagrindinis()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;subprocess.call&amp;lt;/code&amp;gt; turi tris argumentus. Pirmasis argumentas šio pavyzdžio kontekste turėtų būti programos pavadinimas, iš kurios nori iškviesti spausdinimo subprocesą. Antrasis argumentas turėtų būti konkretus tos programos subprocesas. Kad būtų paprasčiau, tiesiog suprask, kad šioje programoje &amp;lt;code&amp;gt;&#039;/p&#039;&amp;lt;/code&amp;gt; yra subprocesas, naudojamas norint pasiekti spausdintuvą per nurodytą programą. Paskutinis argumentas turėtų būti failo pavadinimas, kurį norite siųsti į spausdinimo subprocesą. Šiuo atveju tai yra tas pats failas, naudotas anksčiau šiame skyriuje.&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
1. Parašyk programą, kuri suskaičiuotų, kiek faile yra eilučių.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
failas = input(&amp;quot;Kokio failo eilutes skaičiuoti? &amp;quot;)&lt;br /&gt;
įvesties_failas = open(failas, &amp;quot;r&amp;quot;)&lt;br /&gt;
eilutės = įvesties_failas.readlines()&lt;br /&gt;
įvesties_failas.close()&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Failas&amp;quot;, failas, &amp;quot;turi&amp;quot;, len(eilutės), &amp;quot; eilutes&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Parašyk programą, kuri nukopijuotų vieno failo lygines eilutes į kitą failą.&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
įvesties_failo_pavadinimas = input(&amp;quot;Kokio failo eilutes kopijuoti? &amp;quot;)&lt;br /&gt;
įvesties_failas = open(įvesties_failo_pavadinimas, &amp;quot;r&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
išvesties_failo_pavadinimas = input(&amp;quot;Į kokį failą išsaugoti lygines eilutes? &amp;quot;)&lt;br /&gt;
išvesties_failas = open(išvesties_failo_pavadinimas, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
eilutės_numeris = 0&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    eilutė = įvesties_failas.readline()&lt;br /&gt;
    eilutės_numeris = eilutės_numeris + 1&lt;br /&gt;
    if not eilutė:&lt;br /&gt;
        break&lt;br /&gt;
    else:&lt;br /&gt;
        if (eilutės_numeris % 2) == 0:&lt;br /&gt;
            išvesties_failas.write(eilutė)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
įvesties_failas.close()&lt;br /&gt;
išvesties_failas.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Dabar pakeisk pažymių programą iš skyriaus [[Vadovėlis/Žodynai|Žodynai]], kad ji naudotų failus mokinių pažymiams saugoti.&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
užduotys = [&#039;nd sk 1&#039;, &#039;nd sk 2&#039;, &#039;viktorina   &#039;, &#039;nd sk 3&#039;, &#039;testas&#039;]&lt;br /&gt;
mokiniai = { }&lt;br /&gt;
&lt;br /&gt;
def įkelti_pažymius(pažymių_failas):&lt;br /&gt;
    įvesties_failas = open(pažymių_failas, &amp;quot;r&amp;quot;)&lt;br /&gt;
    pažymiai = [ ]&lt;br /&gt;
    while True:&lt;br /&gt;
        mokinys_ir_pažymys = įvesties_failas.readline()&lt;br /&gt;
        mokinys_ir_pažymys = mokinys_ir_pažymys[:-1]&lt;br /&gt;
        if not mokinys_ir_pažymys:&lt;br /&gt;
            break&lt;br /&gt;
        else:&lt;br /&gt;
            mokinio_vardas, mokinio_pažymiai = mokinys_ir_pažymys.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
            mokinio_pažymiai = mokinio_pažymiai.split(&amp;quot; &amp;quot;)&lt;br /&gt;
            mokiniai[mokinio_vardas] = mokinio_pažymiai&lt;br /&gt;
    įvesties_failas.close()&lt;br /&gt;
    print(&amp;quot;Pažymiai įkelti.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def išsaugoti_pažymius(pažymių_failas):&lt;br /&gt;
    išvesties_failas = open(pažymių_failas, &amp;quot;w&amp;quot;)&lt;br /&gt;
    for k, v in mokiniai.items():&lt;br /&gt;
        išvesties_failas.write(k + &amp;quot;,&amp;quot;)&lt;br /&gt;
        for x in v:&lt;br /&gt;
            išvesties_failas.write(str(x) + &amp;quot; &amp;quot;)&lt;br /&gt;
        išvesties_failas.write(&amp;quot;\n&amp;quot;)&lt;br /&gt;
    išvesties_failas.close()&lt;br /&gt;
    print(&amp;quot;Pažymiai išsaugoti.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def spausdink_meniu():&lt;br /&gt;
    print(&amp;quot;1. Pridėk mokinį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;2. Pašalink mokinį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;3. Įkrauti pažymius&amp;quot;)&lt;br /&gt;
    print(&amp;quot;4. Įrašyk pažymį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;5. Spausdink pažymius&amp;quot;)&lt;br /&gt;
    print(&amp;quot;6. Įšsaugoti pažymius&amp;quot;)&lt;br /&gt;
    print(&amp;quot;7. Spausdink meniu&amp;quot;)&lt;br /&gt;
    print(&amp;quot;9. Išeik&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def spausdink_visus_pažymius():&lt;br /&gt;
    if mokiniai:&lt;br /&gt;
        raktai = sorted(mokiniai.keys())&lt;br /&gt;
        print(&#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
        for x in užduotys:&lt;br /&gt;
            print(x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
        print()&lt;br /&gt;
        for x in raktai:&lt;br /&gt;
            print(x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
            pažymiai = mokiniai[x]&lt;br /&gt;
            spausdink_pažymius(pažymiai)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Neradau pažymių spausdinimui.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def spausdink_pažymius(pažymiai):&lt;br /&gt;
    for x in pažymiai:&lt;br /&gt;
        print(x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
spausdink_meniu()&lt;br /&gt;
meniu_pasirinkimas = 0&lt;br /&gt;
while meniu_pasirinkimas != 9:&lt;br /&gt;
    print()&lt;br /&gt;
    meniu_pasirinkimas = int(input(&amp;quot;Meniu pasirinkimas: &amp;quot;))&lt;br /&gt;
    if meniu_pasirinkimas == 1:&lt;br /&gt;
        vardas = input(&amp;quot;Pridėk mokinį: &amp;quot;)&lt;br /&gt;
        mokiniai[vardas] = [0] * len(užduotys)&lt;br /&gt;
    elif meniu_pasirinkimas == 2:&lt;br /&gt;
        vardas = input(&amp;quot;Pašalink mokinį: &amp;quot;)&lt;br /&gt;
        if vardas in mokiniai:&lt;br /&gt;
            del mokiniai[vardas]&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Mokinys vardu:&amp;quot;, vardas, &amp;quot; nerastas.&amp;quot;)&lt;br /&gt;
    elif meniu_pasirinkimas == 3:&lt;br /&gt;
        pažymių_failas = input(&amp;quot;Įkrauti pažymius iš kokio failo? &amp;quot;)&lt;br /&gt;
        įkelti_pažymius(pažymių_failas)&lt;br /&gt;
    elif meniu_pasirinkimas == 4:&lt;br /&gt;
        print(&amp;quot;Įrašyk pažymį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Mokinys: &amp;quot;)&lt;br /&gt;
        if vardas in mokiniai:&lt;br /&gt;
            pažymiai = mokiniai[vardas]&lt;br /&gt;
            print(&amp;quot;Įrašyk mokinio pažymį&amp;quot;)&lt;br /&gt;
            print(&amp;quot;Įrašyk 0 (nulį), kad išeitum&amp;quot;)&lt;br /&gt;
            for i,x in enumerate(užduotys):&lt;br /&gt;
                print(i + 1, x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
            print()&lt;br /&gt;
            spausdink_pažymius(pažymiai)&lt;br /&gt;
            kuris = 1234&lt;br /&gt;
            while kuris != -1:&lt;br /&gt;
                kuris = int(input(&amp;quot;Pažymys, kurį nori pakeisti: &amp;quot;))&lt;br /&gt;
                kuris -= 1&lt;br /&gt;
                if 0 &amp;lt;= kuris &amp;lt; len(pažymiai):&lt;br /&gt;
                    pažymys = int(input(&amp;quot;Pažymys: &amp;quot;))&lt;br /&gt;
                    pažymiai[kuris] = pažymys&lt;br /&gt;
                elif kuris != -1:&lt;br /&gt;
                    print(&amp;quot;Klaidingas pažymys&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Mokinys nerastas&amp;quot;)&lt;br /&gt;
    elif meniu_pasirinkimas == 5:&lt;br /&gt;
        spausdink_visus_pažymius()&lt;br /&gt;
    elif meniu_pasirinkimas == 6:&lt;br /&gt;
        pažymių_failas = input(&amp;quot;Į kokį failą išsaugoti pažymius? &amp;quot;)&lt;br /&gt;
        išsaugoti_pažymius(pažymių_failas)&lt;br /&gt;
    elif meniu_pasirinkimas != 9:&lt;br /&gt;
        spausdink_meniu()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Daugiau apie funkcijas |next=Siekiant tobulumo}}&lt;br /&gt;
[[Category:Python Vadovėlis]]&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Pa%C5%BEangios_funkcijos&amp;diff=371</id>
		<title>Vadovėlis/Pažangios funkcijos</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Pa%C5%BEangios_funkcijos&amp;diff=371"/>
		<updated>2023-06-23T07:47:28Z</updated>

		<summary type="html">&lt;p&gt;Monika: /* Pagalbininkė map() */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Pažangesnės funkcijos ===&lt;br /&gt;
Papasakosiu tau apie keletą neįtikėtinų funkcijų ir gudrybių, kurios padės supaprastinti užduočių atlikimą.&lt;br /&gt;
&#039;&#039;Pradėkime&#039;&#039; :)&lt;br /&gt;
&lt;br /&gt;
=== Lambda funkcija ===&lt;br /&gt;
&lt;br /&gt;
Jau žinai kaip apsirašyti funkciją su žodeliu ‘’def’’. Lambda funkcija yra tokia pati funkcija, tik labai trumpa ir anoniminė - ji neturi jokio vardo. Kai reikia apibrėžti labai trumpą ir paprastą funkciją, kurią naudosime tik vieną kartą ir kuri nereikalauja sudėtingos logikos, galime naudoti lambda funkciją. Tai gali būti ypač naudinga, kai turime sudėtingą funkciją, kurią norime išskaidyti į smulkesnes dalis, arba kai norime panaudoti funkciją kaip argumentą kitai funkcijai. Lambda funkcijos sintaksė yra paprasta, rašome žodį lambda, po to tarp skliaustų nurodome argumentų sąrašą ir funkcijos išraišką. Tai viskas, ko mums reikia, kad apibrėžtume lambda funkciją.&lt;br /&gt;
&lt;br /&gt;
Lambda funkcijos yra naudojamos daugeliui Python standartinių funkcijų, pavyzdžiui, &amp;lt;code&amp;gt;filter()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sorted()&amp;lt;/code&amp;gt;, kad būtų paprastesnis kodas. Apie jas daugiau papasakosiu šiame skyriuje, o dabar pažiūrėkime, kaip galime panaudoti lambda funkciją:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# lambda funkcija apskaičiuojanti kvadratą&lt;br /&gt;
kvadratas = lambda x: x**2&lt;br /&gt;
&lt;br /&gt;
print(kvadratas(5)) # 25&lt;br /&gt;
&lt;br /&gt;
# lambda funkcija filtruojanti nelyginius skaičius&lt;br /&gt;
skaičiai = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]&lt;br /&gt;
nelyginiai = list(filter(lambda x: x % 2 != 0, skaičiai))&lt;br /&gt;
&lt;br /&gt;
print(nelyginiai) # [1, 3, 5, 7, 9]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lambda funkcija taip pat gali būti naudinga, kai reikia perduoti funkciją kaip argumentą į kitą funkciją. Tai leidžia sukurti trumpą, paprastą ir lengvai suprantamą kodą.&lt;br /&gt;
&lt;br /&gt;
=== Rikiavimas su &#039;&#039;sorted()&#039;&#039; ===&lt;br /&gt;
Anksčiau rodžiau rikiavimo funkciją su sąrašais. Sąrašo funkcija &amp;lt;code&amp;gt;sąrašas.sort()&amp;lt;/code&amp;gt; modifikuoja savo elementus juos surikiuodamas. Taip kintamasis pakeičia savo reikšmę. Python taip pat turi funkciją &amp;lt;code&amp;gt;sorted()&amp;lt;/code&amp;gt; kuri grąžina naują surikiuotą rezultatą, nepakeisdama originalaus kintamojo.&lt;br /&gt;
Pažiūrėkim, kaip tai veikia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# susikuriame sąrašą su atsitiktiniais skaičiais&lt;br /&gt;
sąrašas = [3,1,5,23,0]&lt;br /&gt;
# sorted grąžina surikiuotą sąrašą, kuri priskiriame naujajam kintamajam.&lt;br /&gt;
surikiuotas_sąrašas = sorted(sąrašas)&lt;br /&gt;
&lt;br /&gt;
# atsispausdiname rezultatą. Matysi, kad kintamasis sąrašas nepakeitė reikšmės, o surikiuotas_sąrašas reikšmė yra surikiuota.&lt;br /&gt;
print(surikiuotas_sąrašas, sąrašas)&lt;br /&gt;
&lt;br /&gt;
# pažiūrėkim, ką padarys funkcija sort()&lt;br /&gt;
sąrašas.sort()&lt;br /&gt;
# rezultate matysi du surikiuotus identiškus sąrašus.&lt;br /&gt;
print(surikiuotas_sąrašas, sąrašas)&lt;br /&gt;
&lt;br /&gt;
# kaip surikiuoti mažėjančia tvarka? Tiesiog pridėkime prie funkcijos reverse=True&lt;br /&gt;
atbulas_sąrašas = sorted(surikiuotas_sąrašas, reverse=True)&lt;br /&gt;
print(atbulas_sąrašas, surikiuotas_sąrašas, sąrašas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatus turėtum matyti tokius:&lt;br /&gt;
&lt;br /&gt;
 [0, 1, 3, 5, 23] [3, 1, 5, 23, 0]&lt;br /&gt;
 [0, 1, 3, 5, 23] [0, 1, 3, 5, 23]&lt;br /&gt;
 [23, 5, 3, 1, 0] [0, 1, 3, 5, 23] [0, 1, 3, 5, 23]&lt;br /&gt;
&lt;br /&gt;
Akylus skaitytojas pamatys, kad pavyzdyje parodžiau papildomą sorted funkcionalumą atbuliniam sąrašo rikiavimui:  &amp;lt;code&amp;gt;sorted(sąrašas, reverse=True)&amp;lt;/code&amp;gt;. &#039;&#039;&#039;reverse&#039;&#039;&#039; anglų kalboje reiškia &#039;&#039;atbulinis&#039;&#039;, todėl tai pasako funkcijai, kad mums reikia grąžint sąrašą atbuline tvarka.&lt;br /&gt;
&lt;br /&gt;
Dar vienas labai svarbus skirtumas tarp sąrašas.sort() ir sorted() - ‘’sorted’’ naudojamas visiems iteruojamiems objektams. Pavyzdžiui anksčiau skyriuje minėtiems žodynams.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# pasirašom funkciją sąrašo atvaizdavimui &lt;br /&gt;
def spausdink(sąrašas):&lt;br /&gt;
    for elementas in sąrašas:&lt;br /&gt;
        print(elementas)&lt;br /&gt;
    print(&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
# apsirašom sąrašą žodynų, kuriuos rikiuosime.&lt;br /&gt;
žodynai = [&lt;br /&gt;
    {&amp;quot;vardas&amp;quot;: &amp;quot;Darius&amp;quot;, &amp;quot;metai&amp;quot;: 15, &amp;quot;pomėgis&amp;quot;: &amp;quot;bėgimas&amp;quot;},&lt;br /&gt;
    {&amp;quot;vardas&amp;quot;: &amp;quot;Marius&amp;quot;, &amp;quot;metai&amp;quot;: 14, &amp;quot;pomėgis&amp;quot;: &amp;quot;krepšinis&amp;quot;},&lt;br /&gt;
    {&amp;quot;vardas&amp;quot;: &amp;quot;Karolis&amp;quot;, &amp;quot;metai&amp;quot;: 16, &amp;quot;pomėgis&amp;quot;: &amp;quot;krepšinis&amp;quot;},&lt;br /&gt;
    {&amp;quot;vardas&amp;quot;: &amp;quot;Gileta&amp;quot;, &amp;quot;metai&amp;quot;: 13, &amp;quot;pomėgis&amp;quot;: &amp;quot;tinklinis&amp;quot;},&lt;br /&gt;
    {&amp;quot;vardas&amp;quot;: &amp;quot;Eglė&amp;quot;, &amp;quot;metai&amp;quot;: 17, &amp;quot;pomėgis&amp;quot;: &amp;quot;bėgimas&amp;quot;},&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
print(&#039;surikiuojam pagal metus mažėjančia tvarka&#039;)&lt;br /&gt;
spausdink(sorted(žodynai, key=lambda x: -x[&#039;metai&#039;]))&lt;br /&gt;
&lt;br /&gt;
print(&#039;rikiuojame pagal dvi reikšmes: pradžioje pagal pomėgį, o vėliau pagal metus didėjančia tvarka.&#039;)&lt;br /&gt;
spausdink( sorted(žodynai, key=lambda x: (x[&#039;pomėgis&#039;], x[&#039;metai&#039;])) )&lt;br /&gt;
print(&#039;nurodome atbuline tvarka&#039;)&lt;br /&gt;
spausdink( sorted(žodynai, key=lambda x: (x[&#039;pomėgis&#039;], x[&#039;metai&#039;]), reverse=True) )&lt;br /&gt;
&lt;br /&gt;
print(&#039;rikiuojame pagal pomėgį didėjančia tvarka, o vėliau pagal metus mažėjančia&#039;)&lt;br /&gt;
spausdink( sorted(žodynai, key=lambda x: (x[&#039;pomėgis&#039;], -x[&#039;metai&#039;])) )&lt;br /&gt;
print(&#039;nurodome atbuline tvarka&#039;)&lt;br /&gt;
spausdink( sorted(žodynai, key=lambda x: (x[&#039;pomėgis&#039;], -x[&#039;metai&#039;]), reverse=True) )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas bus toks:&lt;br /&gt;
&lt;br /&gt;
 surikiuojam pagal metus mažėjančia tvarka&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Eglė&#039;, &#039;metai&#039;: 17, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Karolis&#039;, &#039;metai&#039;: 16, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Darius&#039;, &#039;metai&#039;: 15, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Marius&#039;, &#039;metai&#039;: 14, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Gileta&#039;, &#039;metai&#039;: 13, &#039;pomėgis&#039;: &#039;tinklinis&#039;}&lt;br /&gt;
 &lt;br /&gt;
 rikiuojame pagal dvi reikšmes: pradžioje pagal pomėgį, o vėliau pagal metus didėjančia tvarka.&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Darius&#039;, &#039;metai&#039;: 15, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Eglė&#039;, &#039;metai&#039;: 17, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Marius&#039;, &#039;metai&#039;: 14, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Karolis&#039;, &#039;metai&#039;: 16, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Gileta&#039;, &#039;metai&#039;: 13, &#039;pomėgis&#039;: &#039;tinklinis&#039;}&lt;br /&gt;
 &lt;br /&gt;
 nurodome atbuline tvarka&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Gileta&#039;, &#039;metai&#039;: 13, &#039;pomėgis&#039;: &#039;tinklinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Karolis&#039;, &#039;metai&#039;: 16, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Marius&#039;, &#039;metai&#039;: 14, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Eglė&#039;, &#039;metai&#039;: 17, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Darius&#039;, &#039;metai&#039;: 15, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 &lt;br /&gt;
 rikiuojame pagal pomėgį didėjančia tvarka, o vėliau pagal metus mažėjančia&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Eglė&#039;, &#039;metai&#039;: 17, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Darius&#039;, &#039;metai&#039;: 15, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Karolis&#039;, &#039;metai&#039;: 16, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Marius&#039;, &#039;metai&#039;: 14, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Gileta&#039;, &#039;metai&#039;: 13, &#039;pomėgis&#039;: &#039;tinklinis&#039;}&lt;br /&gt;
 &lt;br /&gt;
 nurodome atbuline tvarka&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Gileta&#039;, &#039;metai&#039;: 13, &#039;pomėgis&#039;: &#039;tinklinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Marius&#039;, &#039;metai&#039;: 14, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Karolis&#039;, &#039;metai&#039;: 16, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Darius&#039;, &#039;metai&#039;: 15, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Eglė&#039;, &#039;metai&#039;: 17, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
&lt;br /&gt;
Norint naudoti funkciją &amp;lt;code&amp;gt;sorted()&amp;lt;/code&amp;gt; su žodynais, reikia programai nurodyti, pagal kurią žodyno reikšmę nori rikiuoti sąrašą. Tai gali padaryti nurodydamas &amp;lt;code&amp;gt;key=lambda kintamasis: kintamasis[‘reikšmė’]&amp;lt;/code&amp;gt;. Parametras ‘’key’’ nurodo funkcijai ‘’sorted’’, kad norėsi naudoti papildoma funkciją. Štai čia mes paduodame bevardę funkciją ‘’lambda’’, kuri ir nurodo, pagal kuriuos parametrus mes norime rikiuoti sąrašą.&lt;br /&gt;
&lt;br /&gt;
=== Pagalbininkė &#039;&#039;map()&#039;&#039; ===&lt;br /&gt;
&amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; yra Python vidinė funkcija, kuri leidžia mums taikyti funkciją kiekvienam elementui sąraše ar kitame iteruojamame objekte. Ši funkcija grąžina naują sąrašą, kuriame kiekvienas elementas yra pritaikytas pagal paduotą funkciją.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
map(funkcija, sąrašas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ‘’funkcija’’ yra funkcija, kuri bus taikoma kiekvienam elementui sąraše.&lt;br /&gt;
* ‘’sąrašas’’ yra sąrašas, arba kitas iteruojamas objektas.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# sukuriame sąrašą skaičių&lt;br /&gt;
skaičiai = [1, 2, 3, 4, 5]&lt;br /&gt;
&lt;br /&gt;
# apibrėžiame funkciją, kurią norime pritaikyti kiekvienam elementui&lt;br /&gt;
def kvadratas(x):&lt;br /&gt;
    return x**2&lt;br /&gt;
&lt;br /&gt;
# naudojame map() funkciją, kad pritaikytume funkciją kiekvienam sąrašo elementui&lt;br /&gt;
skaičiai_kvadratu = map(kvadratas, skaičiai)&lt;br /&gt;
&lt;br /&gt;
# išspausdiname naują sąrašą, kuriame kiekvienas skaičius yra pakeltas kvadratu&lt;br /&gt;
print(list(skaičiai_kvadratu)) # [1, 4, 9, 16, 25]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Taip pat galime naudoti lambda funkcijas, kad nurodytume funkciją tiesiogiai &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; funkcijos viduje, kaip gali pamatyti čia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# sukuriame sąrašą skaičių&lt;br /&gt;
skaičiai = [1, 2, 3, 4, 5]&lt;br /&gt;
&lt;br /&gt;
# naudojame lambda funkciją, kad apibrėžtume funkciją tiesiogiai map() viduje&lt;br /&gt;
skaičiai_kvadratu = map(lambda x: x**2, skaičiai)&lt;br /&gt;
&lt;br /&gt;
# išspausdiname naują sąrašą, kuriame kiekvienas skaičius yra pakeltas kvadratu&lt;br /&gt;
print(list(skaičiai_kvadratu)) # [1, 4, 9, 16, 25]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; funkcija yra naudinga, kai reikia greitai ir efektyviai pritaikyti tam tikrą funkciją kiekvienam sąrašo ar kitame iteruojamame objekte esančiam elementui, ir gauti naują sąrašą su apdorotais elementais.&lt;br /&gt;
&lt;br /&gt;
Beje, ar atkreipei dėmesį, kad norint atspausdinti sąrašą, aš panaudojau funkciją &amp;lt;code&amp;gt;list()&amp;lt;/code&amp;gt;. Ar žinai kodėl?&lt;br /&gt;
&lt;br /&gt;
Tai yra dėl to, kad &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; funkcija grąžina iteruojamą objektą, kuris yra vadinamas &#039;&#039;generatoriumi&#039;&#039;. Generatorius yra specialus iteruojamas objektas, kuris leidžia gauti reikiamus duomenis vieną po kito pagal poreikį, taip sutaupant atminties resursus. Tačiau, norint matyti visus elementus iš karto, reikia sukurti sąrašą ar kitą tipo objektą, kuris saugotų visus &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; funkcijos grąžinamus elementus. Tai padaryti galime, panaudoję &amp;lt;code&amp;gt;list()&amp;lt;/code&amp;gt; funkciją, kuri konvertuoja generatoriaus grąžinamą objektą į sąrašą.&lt;br /&gt;
&lt;br /&gt;
=== Filtravimas su &#039;&#039;filter()&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;filter()&amp;lt;/code&amp;gt; yra Python funkcija, kuri leidžia filtruoti duomenis pagal tam tikras sąlygas. Ši funkcija veikia pagal panašų principą kaip &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; funkcija, tačiau jos veikimo būdas yra kitoks. &amp;lt;code&amp;gt;filter()&amp;lt;/code&amp;gt; funkcija taiko nurodytą sąlygą (funkciją) kiekvienam elementui iteruojamame objekte ir grąžina tik tuos elementus, kuriuos ta sąlyga tenkina. Tai yra, funkcija išfiltruoja tik tuos elementus, kurie tenkina nurodytą sąlygą.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;filter()&amp;lt;/code&amp;gt; funkcija naudojama kartu su lambda funkcijomis arba kitomis funkcijomis, kurios grąžina True arba False. Kai reikia išgauti tik tuos elementus, kurie tenkina nurodytą sąlygą, naudojama filter() funkcija.&lt;br /&gt;
&lt;br /&gt;
Pavyzdžiui, norint išfiltruoti tik lyginius skaičius iš sąrašo, galime naudoti šią filter() funkcijos ir lambda funkcijos kombinaciją:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Sukuriamas sąrašas skaičių&lt;br /&gt;
skaičiai = [1, 2, 3, 4, 5]&lt;br /&gt;
&lt;br /&gt;
# Sukuriamas naujas sąrašas tik su lyginiais skaičiais naudojant filter() ir lambda funkciją&lt;br /&gt;
lyginiai_skaičiai = filter(lambda x: x % 2 == 0, skaičiai)&lt;br /&gt;
&lt;br /&gt;
# Išspausdinamas naujas sąrašas tik su lyginiais skaičiais&lt;br /&gt;
print(list(lyginiai_skaičiai)) # [2, 4]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šioje situacijoje, filter() funkcija išfiltruoja tik tuos skaičius, kurių liekana yra lygi nuliui (t.y. tik lyginiai skaičiai).&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Pa%C5%BEangios_funkcijos&amp;diff=370</id>
		<title>Vadovėlis/Pažangios funkcijos</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Pa%C5%BEangios_funkcijos&amp;diff=370"/>
		<updated>2023-06-23T07:47:02Z</updated>

		<summary type="html">&lt;p&gt;Monika: /* Pagalbininkė map() */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Pažangesnės funkcijos ===&lt;br /&gt;
Papasakosiu tau apie keletą neįtikėtinų funkcijų ir gudrybių, kurios padės supaprastinti užduočių atlikimą.&lt;br /&gt;
&#039;&#039;Pradėkime&#039;&#039; :)&lt;br /&gt;
&lt;br /&gt;
=== Lambda funkcija ===&lt;br /&gt;
&lt;br /&gt;
Jau žinai kaip apsirašyti funkciją su žodeliu ‘’def’’. Lambda funkcija yra tokia pati funkcija, tik labai trumpa ir anoniminė - ji neturi jokio vardo. Kai reikia apibrėžti labai trumpą ir paprastą funkciją, kurią naudosime tik vieną kartą ir kuri nereikalauja sudėtingos logikos, galime naudoti lambda funkciją. Tai gali būti ypač naudinga, kai turime sudėtingą funkciją, kurią norime išskaidyti į smulkesnes dalis, arba kai norime panaudoti funkciją kaip argumentą kitai funkcijai. Lambda funkcijos sintaksė yra paprasta, rašome žodį lambda, po to tarp skliaustų nurodome argumentų sąrašą ir funkcijos išraišką. Tai viskas, ko mums reikia, kad apibrėžtume lambda funkciją.&lt;br /&gt;
&lt;br /&gt;
Lambda funkcijos yra naudojamos daugeliui Python standartinių funkcijų, pavyzdžiui, &amp;lt;code&amp;gt;filter()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sorted()&amp;lt;/code&amp;gt;, kad būtų paprastesnis kodas. Apie jas daugiau papasakosiu šiame skyriuje, o dabar pažiūrėkime, kaip galime panaudoti lambda funkciją:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# lambda funkcija apskaičiuojanti kvadratą&lt;br /&gt;
kvadratas = lambda x: x**2&lt;br /&gt;
&lt;br /&gt;
print(kvadratas(5)) # 25&lt;br /&gt;
&lt;br /&gt;
# lambda funkcija filtruojanti nelyginius skaičius&lt;br /&gt;
skaičiai = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]&lt;br /&gt;
nelyginiai = list(filter(lambda x: x % 2 != 0, skaičiai))&lt;br /&gt;
&lt;br /&gt;
print(nelyginiai) # [1, 3, 5, 7, 9]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lambda funkcija taip pat gali būti naudinga, kai reikia perduoti funkciją kaip argumentą į kitą funkciją. Tai leidžia sukurti trumpą, paprastą ir lengvai suprantamą kodą.&lt;br /&gt;
&lt;br /&gt;
=== Rikiavimas su &#039;&#039;sorted()&#039;&#039; ===&lt;br /&gt;
Anksčiau rodžiau rikiavimo funkciją su sąrašais. Sąrašo funkcija &amp;lt;code&amp;gt;sąrašas.sort()&amp;lt;/code&amp;gt; modifikuoja savo elementus juos surikiuodamas. Taip kintamasis pakeičia savo reikšmę. Python taip pat turi funkciją &amp;lt;code&amp;gt;sorted()&amp;lt;/code&amp;gt; kuri grąžina naują surikiuotą rezultatą, nepakeisdama originalaus kintamojo.&lt;br /&gt;
Pažiūrėkim, kaip tai veikia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# susikuriame sąrašą su atsitiktiniais skaičiais&lt;br /&gt;
sąrašas = [3,1,5,23,0]&lt;br /&gt;
# sorted grąžina surikiuotą sąrašą, kuri priskiriame naujajam kintamajam.&lt;br /&gt;
surikiuotas_sąrašas = sorted(sąrašas)&lt;br /&gt;
&lt;br /&gt;
# atsispausdiname rezultatą. Matysi, kad kintamasis sąrašas nepakeitė reikšmės, o surikiuotas_sąrašas reikšmė yra surikiuota.&lt;br /&gt;
print(surikiuotas_sąrašas, sąrašas)&lt;br /&gt;
&lt;br /&gt;
# pažiūrėkim, ką padarys funkcija sort()&lt;br /&gt;
sąrašas.sort()&lt;br /&gt;
# rezultate matysi du surikiuotus identiškus sąrašus.&lt;br /&gt;
print(surikiuotas_sąrašas, sąrašas)&lt;br /&gt;
&lt;br /&gt;
# kaip surikiuoti mažėjančia tvarka? Tiesiog pridėkime prie funkcijos reverse=True&lt;br /&gt;
atbulas_sąrašas = sorted(surikiuotas_sąrašas, reverse=True)&lt;br /&gt;
print(atbulas_sąrašas, surikiuotas_sąrašas, sąrašas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatus turėtum matyti tokius:&lt;br /&gt;
&lt;br /&gt;
 [0, 1, 3, 5, 23] [3, 1, 5, 23, 0]&lt;br /&gt;
 [0, 1, 3, 5, 23] [0, 1, 3, 5, 23]&lt;br /&gt;
 [23, 5, 3, 1, 0] [0, 1, 3, 5, 23] [0, 1, 3, 5, 23]&lt;br /&gt;
&lt;br /&gt;
Akylus skaitytojas pamatys, kad pavyzdyje parodžiau papildomą sorted funkcionalumą atbuliniam sąrašo rikiavimui:  &amp;lt;code&amp;gt;sorted(sąrašas, reverse=True)&amp;lt;/code&amp;gt;. &#039;&#039;&#039;reverse&#039;&#039;&#039; anglų kalboje reiškia &#039;&#039;atbulinis&#039;&#039;, todėl tai pasako funkcijai, kad mums reikia grąžint sąrašą atbuline tvarka.&lt;br /&gt;
&lt;br /&gt;
Dar vienas labai svarbus skirtumas tarp sąrašas.sort() ir sorted() - ‘’sorted’’ naudojamas visiems iteruojamiems objektams. Pavyzdžiui anksčiau skyriuje minėtiems žodynams.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# pasirašom funkciją sąrašo atvaizdavimui &lt;br /&gt;
def spausdink(sąrašas):&lt;br /&gt;
    for elementas in sąrašas:&lt;br /&gt;
        print(elementas)&lt;br /&gt;
    print(&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
# apsirašom sąrašą žodynų, kuriuos rikiuosime.&lt;br /&gt;
žodynai = [&lt;br /&gt;
    {&amp;quot;vardas&amp;quot;: &amp;quot;Darius&amp;quot;, &amp;quot;metai&amp;quot;: 15, &amp;quot;pomėgis&amp;quot;: &amp;quot;bėgimas&amp;quot;},&lt;br /&gt;
    {&amp;quot;vardas&amp;quot;: &amp;quot;Marius&amp;quot;, &amp;quot;metai&amp;quot;: 14, &amp;quot;pomėgis&amp;quot;: &amp;quot;krepšinis&amp;quot;},&lt;br /&gt;
    {&amp;quot;vardas&amp;quot;: &amp;quot;Karolis&amp;quot;, &amp;quot;metai&amp;quot;: 16, &amp;quot;pomėgis&amp;quot;: &amp;quot;krepšinis&amp;quot;},&lt;br /&gt;
    {&amp;quot;vardas&amp;quot;: &amp;quot;Gileta&amp;quot;, &amp;quot;metai&amp;quot;: 13, &amp;quot;pomėgis&amp;quot;: &amp;quot;tinklinis&amp;quot;},&lt;br /&gt;
    {&amp;quot;vardas&amp;quot;: &amp;quot;Eglė&amp;quot;, &amp;quot;metai&amp;quot;: 17, &amp;quot;pomėgis&amp;quot;: &amp;quot;bėgimas&amp;quot;},&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
print(&#039;surikiuojam pagal metus mažėjančia tvarka&#039;)&lt;br /&gt;
spausdink(sorted(žodynai, key=lambda x: -x[&#039;metai&#039;]))&lt;br /&gt;
&lt;br /&gt;
print(&#039;rikiuojame pagal dvi reikšmes: pradžioje pagal pomėgį, o vėliau pagal metus didėjančia tvarka.&#039;)&lt;br /&gt;
spausdink( sorted(žodynai, key=lambda x: (x[&#039;pomėgis&#039;], x[&#039;metai&#039;])) )&lt;br /&gt;
print(&#039;nurodome atbuline tvarka&#039;)&lt;br /&gt;
spausdink( sorted(žodynai, key=lambda x: (x[&#039;pomėgis&#039;], x[&#039;metai&#039;]), reverse=True) )&lt;br /&gt;
&lt;br /&gt;
print(&#039;rikiuojame pagal pomėgį didėjančia tvarka, o vėliau pagal metus mažėjančia&#039;)&lt;br /&gt;
spausdink( sorted(žodynai, key=lambda x: (x[&#039;pomėgis&#039;], -x[&#039;metai&#039;])) )&lt;br /&gt;
print(&#039;nurodome atbuline tvarka&#039;)&lt;br /&gt;
spausdink( sorted(žodynai, key=lambda x: (x[&#039;pomėgis&#039;], -x[&#039;metai&#039;]), reverse=True) )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas bus toks:&lt;br /&gt;
&lt;br /&gt;
 surikiuojam pagal metus mažėjančia tvarka&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Eglė&#039;, &#039;metai&#039;: 17, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Karolis&#039;, &#039;metai&#039;: 16, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Darius&#039;, &#039;metai&#039;: 15, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Marius&#039;, &#039;metai&#039;: 14, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Gileta&#039;, &#039;metai&#039;: 13, &#039;pomėgis&#039;: &#039;tinklinis&#039;}&lt;br /&gt;
 &lt;br /&gt;
 rikiuojame pagal dvi reikšmes: pradžioje pagal pomėgį, o vėliau pagal metus didėjančia tvarka.&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Darius&#039;, &#039;metai&#039;: 15, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Eglė&#039;, &#039;metai&#039;: 17, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Marius&#039;, &#039;metai&#039;: 14, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Karolis&#039;, &#039;metai&#039;: 16, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Gileta&#039;, &#039;metai&#039;: 13, &#039;pomėgis&#039;: &#039;tinklinis&#039;}&lt;br /&gt;
 &lt;br /&gt;
 nurodome atbuline tvarka&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Gileta&#039;, &#039;metai&#039;: 13, &#039;pomėgis&#039;: &#039;tinklinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Karolis&#039;, &#039;metai&#039;: 16, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Marius&#039;, &#039;metai&#039;: 14, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Eglė&#039;, &#039;metai&#039;: 17, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Darius&#039;, &#039;metai&#039;: 15, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 &lt;br /&gt;
 rikiuojame pagal pomėgį didėjančia tvarka, o vėliau pagal metus mažėjančia&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Eglė&#039;, &#039;metai&#039;: 17, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Darius&#039;, &#039;metai&#039;: 15, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Karolis&#039;, &#039;metai&#039;: 16, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Marius&#039;, &#039;metai&#039;: 14, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Gileta&#039;, &#039;metai&#039;: 13, &#039;pomėgis&#039;: &#039;tinklinis&#039;}&lt;br /&gt;
 &lt;br /&gt;
 nurodome atbuline tvarka&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Gileta&#039;, &#039;metai&#039;: 13, &#039;pomėgis&#039;: &#039;tinklinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Marius&#039;, &#039;metai&#039;: 14, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Karolis&#039;, &#039;metai&#039;: 16, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Darius&#039;, &#039;metai&#039;: 15, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Eglė&#039;, &#039;metai&#039;: 17, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
&lt;br /&gt;
Norint naudoti funkciją &amp;lt;code&amp;gt;sorted()&amp;lt;/code&amp;gt; su žodynais, reikia programai nurodyti, pagal kurią žodyno reikšmę nori rikiuoti sąrašą. Tai gali padaryti nurodydamas &amp;lt;code&amp;gt;key=lambda kintamasis: kintamasis[‘reikšmė’]&amp;lt;/code&amp;gt;. Parametras ‘’key’’ nurodo funkcijai ‘’sorted’’, kad norėsi naudoti papildoma funkciją. Štai čia mes paduodame bevardę funkciją ‘’lambda’’, kuri ir nurodo, pagal kuriuos parametrus mes norime rikiuoti sąrašą.&lt;br /&gt;
&lt;br /&gt;
=== Pagalbininkė &#039;&#039;map()&#039;&#039; ===&lt;br /&gt;
&amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; yra Python vidinė funkcija, kuri leidžia mums taikyti funkciją kiekvienam elementui sąraše ar kitame iteruojamame objekte. Ši funkcija grąžina naują sąrašą, kuriame kiekvienas elementas yra pritaikytas pagal paduotą funkciją.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
map(funkcija, sąrašas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ‘’funkcija’’ yra funkcija, kuri bus taikoma kiekvienam elementui sąraše.&lt;br /&gt;
* ‘’sąrašas’’ yra sąrašas, arba kitas iteruojamas objektas.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# sukuriame sąrašą skaičių&lt;br /&gt;
skaičiai = [1, 2, 3, 4, 5]&lt;br /&gt;
&lt;br /&gt;
# apibrėžiame funkciją, kurią norime pritaikyti kiekvienam elementui&lt;br /&gt;
def kvadratas(x):&lt;br /&gt;
    return x**2&lt;br /&gt;
&lt;br /&gt;
# naudojame map() funkciją, kad pritaikytume funkciją kiekvienam sąrašo elementui&lt;br /&gt;
skaičiai_kvadratu = map(kvadratas, skaičiai)&lt;br /&gt;
&lt;br /&gt;
# išspausdiname naują sąrašą, kuriame kiekvienas skaičius yra pakeltas kvadratu&lt;br /&gt;
print(list(skaičiai_kvadratu)) # [1, 4, 9, 16, 25]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Taip pat galime naudoti lambda funkcijas, kad nurodytume funkciją tiesiogiai &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; funkcijos viduje, kaip gali pamatyti čia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# sukuriame sąrašą skaičių&lt;br /&gt;
skaičiai = [1, 2, 3, 4, 5]&lt;br /&gt;
&lt;br /&gt;
# naudojame lambda funkciją, kad apibrėžtume funkciją tiesiogiai map() viduje&lt;br /&gt;
skaičiai_kvadratu = map(lambda x: x**2, skaičiai)&lt;br /&gt;
&lt;br /&gt;
# išspausdiname naują sąrašą, kuriame kiekvienas skaičius yra kvadratu didesnis nei prieš tai&lt;br /&gt;
print(list(skaičiai_kvadratu)) # [1, 4, 9, 16, 25]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; funkcija yra naudinga, kai reikia greitai ir efektyviai pritaikyti tam tikrą funkciją kiekvienam sąrašo ar kitame iteruojamame objekte esančiam elementui, ir gauti naują sąrašą su apdorotais elementais.&lt;br /&gt;
&lt;br /&gt;
Beje, ar atkreipei dėmesį, kad norint atspausdinti sąrašą, aš panaudojau funkciją &amp;lt;code&amp;gt;list()&amp;lt;/code&amp;gt;. Ar žinai kodėl?&lt;br /&gt;
&lt;br /&gt;
Tai yra dėl to, kad &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; funkcija grąžina iteruojamą objektą, kuris yra vadinamas &#039;&#039;generatoriumi&#039;&#039;. Generatorius yra specialus iteruojamas objektas, kuris leidžia gauti reikiamus duomenis vieną po kito pagal poreikį, taip sutaupant atminties resursus. Tačiau, norint matyti visus elementus iš karto, reikia sukurti sąrašą ar kitą tipo objektą, kuris saugotų visus &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; funkcijos grąžinamus elementus. Tai padaryti galime, panaudoję &amp;lt;code&amp;gt;list()&amp;lt;/code&amp;gt; funkciją, kuri konvertuoja generatoriaus grąžinamą objektą į sąrašą.&lt;br /&gt;
&lt;br /&gt;
=== Filtravimas su &#039;&#039;filter()&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;filter()&amp;lt;/code&amp;gt; yra Python funkcija, kuri leidžia filtruoti duomenis pagal tam tikras sąlygas. Ši funkcija veikia pagal panašų principą kaip &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; funkcija, tačiau jos veikimo būdas yra kitoks. &amp;lt;code&amp;gt;filter()&amp;lt;/code&amp;gt; funkcija taiko nurodytą sąlygą (funkciją) kiekvienam elementui iteruojamame objekte ir grąžina tik tuos elementus, kuriuos ta sąlyga tenkina. Tai yra, funkcija išfiltruoja tik tuos elementus, kurie tenkina nurodytą sąlygą.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;filter()&amp;lt;/code&amp;gt; funkcija naudojama kartu su lambda funkcijomis arba kitomis funkcijomis, kurios grąžina True arba False. Kai reikia išgauti tik tuos elementus, kurie tenkina nurodytą sąlygą, naudojama filter() funkcija.&lt;br /&gt;
&lt;br /&gt;
Pavyzdžiui, norint išfiltruoti tik lyginius skaičius iš sąrašo, galime naudoti šią filter() funkcijos ir lambda funkcijos kombinaciją:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Sukuriamas sąrašas skaičių&lt;br /&gt;
skaičiai = [1, 2, 3, 4, 5]&lt;br /&gt;
&lt;br /&gt;
# Sukuriamas naujas sąrašas tik su lyginiais skaičiais naudojant filter() ir lambda funkciją&lt;br /&gt;
lyginiai_skaičiai = filter(lambda x: x % 2 == 0, skaičiai)&lt;br /&gt;
&lt;br /&gt;
# Išspausdinamas naujas sąrašas tik su lyginiais skaičiais&lt;br /&gt;
print(list(lyginiai_skaičiai)) # [2, 4]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šioje situacijoje, filter() funkcija išfiltruoja tik tuos skaičius, kurių liekana yra lygi nuliui (t.y. tik lyginiai skaičiai).&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Pa%C5%BEangios_funkcijos&amp;diff=369</id>
		<title>Vadovėlis/Pažangios funkcijos</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Pa%C5%BEangios_funkcijos&amp;diff=369"/>
		<updated>2023-06-23T07:36:11Z</updated>

		<summary type="html">&lt;p&gt;Monika: /* Lambda funkcija */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Pažangesnės funkcijos ===&lt;br /&gt;
Papasakosiu tau apie keletą neįtikėtinų funkcijų ir gudrybių, kurios padės supaprastinti užduočių atlikimą.&lt;br /&gt;
&#039;&#039;Pradėkime&#039;&#039; :)&lt;br /&gt;
&lt;br /&gt;
=== Lambda funkcija ===&lt;br /&gt;
&lt;br /&gt;
Jau žinai kaip apsirašyti funkciją su žodeliu ‘’def’’. Lambda funkcija yra tokia pati funkcija, tik labai trumpa ir anoniminė - ji neturi jokio vardo. Kai reikia apibrėžti labai trumpą ir paprastą funkciją, kurią naudosime tik vieną kartą ir kuri nereikalauja sudėtingos logikos, galime naudoti lambda funkciją. Tai gali būti ypač naudinga, kai turime sudėtingą funkciją, kurią norime išskaidyti į smulkesnes dalis, arba kai norime panaudoti funkciją kaip argumentą kitai funkcijai. Lambda funkcijos sintaksė yra paprasta, rašome žodį lambda, po to tarp skliaustų nurodome argumentų sąrašą ir funkcijos išraišką. Tai viskas, ko mums reikia, kad apibrėžtume lambda funkciją.&lt;br /&gt;
&lt;br /&gt;
Lambda funkcijos yra naudojamos daugeliui Python standartinių funkcijų, pavyzdžiui, &amp;lt;code&amp;gt;filter()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sorted()&amp;lt;/code&amp;gt;, kad būtų paprastesnis kodas. Apie jas daugiau papasakosiu šiame skyriuje, o dabar pažiūrėkime, kaip galime panaudoti lambda funkciją:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# lambda funkcija apskaičiuojanti kvadratą&lt;br /&gt;
kvadratas = lambda x: x**2&lt;br /&gt;
&lt;br /&gt;
print(kvadratas(5)) # 25&lt;br /&gt;
&lt;br /&gt;
# lambda funkcija filtruojanti nelyginius skaičius&lt;br /&gt;
skaičiai = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]&lt;br /&gt;
nelyginiai = list(filter(lambda x: x % 2 != 0, skaičiai))&lt;br /&gt;
&lt;br /&gt;
print(nelyginiai) # [1, 3, 5, 7, 9]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lambda funkcija taip pat gali būti naudinga, kai reikia perduoti funkciją kaip argumentą į kitą funkciją. Tai leidžia sukurti trumpą, paprastą ir lengvai suprantamą kodą.&lt;br /&gt;
&lt;br /&gt;
=== Rikiavimas su &#039;&#039;sorted()&#039;&#039; ===&lt;br /&gt;
Anksčiau rodžiau rikiavimo funkciją su sąrašais. Sąrašo funkcija &amp;lt;code&amp;gt;sąrašas.sort()&amp;lt;/code&amp;gt; modifikuoja savo elementus juos surikiuodamas. Taip kintamasis pakeičia savo reikšmę. Python taip pat turi funkciją &amp;lt;code&amp;gt;sorted()&amp;lt;/code&amp;gt; kuri grąžina naują surikiuotą rezultatą, nepakeisdama originalaus kintamojo.&lt;br /&gt;
Pažiūrėkim, kaip tai veikia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# susikuriame sąrašą su atsitiktiniais skaičiais&lt;br /&gt;
sąrašas = [3,1,5,23,0]&lt;br /&gt;
# sorted grąžina surikiuotą sąrašą, kuri priskiriame naujajam kintamajam.&lt;br /&gt;
surikiuotas_sąrašas = sorted(sąrašas)&lt;br /&gt;
&lt;br /&gt;
# atsispausdiname rezultatą. Matysi, kad kintamasis sąrašas nepakeitė reikšmės, o surikiuotas_sąrašas reikšmė yra surikiuota.&lt;br /&gt;
print(surikiuotas_sąrašas, sąrašas)&lt;br /&gt;
&lt;br /&gt;
# pažiūrėkim, ką padarys funkcija sort()&lt;br /&gt;
sąrašas.sort()&lt;br /&gt;
# rezultate matysi du surikiuotus identiškus sąrašus.&lt;br /&gt;
print(surikiuotas_sąrašas, sąrašas)&lt;br /&gt;
&lt;br /&gt;
# kaip surikiuoti mažėjančia tvarka? Tiesiog pridėkime prie funkcijos reverse=True&lt;br /&gt;
atbulas_sąrašas = sorted(surikiuotas_sąrašas, reverse=True)&lt;br /&gt;
print(atbulas_sąrašas, surikiuotas_sąrašas, sąrašas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatus turėtum matyti tokius:&lt;br /&gt;
&lt;br /&gt;
 [0, 1, 3, 5, 23] [3, 1, 5, 23, 0]&lt;br /&gt;
 [0, 1, 3, 5, 23] [0, 1, 3, 5, 23]&lt;br /&gt;
 [23, 5, 3, 1, 0] [0, 1, 3, 5, 23] [0, 1, 3, 5, 23]&lt;br /&gt;
&lt;br /&gt;
Akylus skaitytojas pamatys, kad pavyzdyje parodžiau papildomą sorted funkcionalumą atbuliniam sąrašo rikiavimui:  &amp;lt;code&amp;gt;sorted(sąrašas, reverse=True)&amp;lt;/code&amp;gt;. &#039;&#039;&#039;reverse&#039;&#039;&#039; anglų kalboje reiškia &#039;&#039;atbulinis&#039;&#039;, todėl tai pasako funkcijai, kad mums reikia grąžint sąrašą atbuline tvarka.&lt;br /&gt;
&lt;br /&gt;
Dar vienas labai svarbus skirtumas tarp sąrašas.sort() ir sorted() - ‘’sorted’’ naudojamas visiems iteruojamiems objektams. Pavyzdžiui anksčiau skyriuje minėtiems žodynams.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# pasirašom funkciją sąrašo atvaizdavimui &lt;br /&gt;
def spausdink(sąrašas):&lt;br /&gt;
    for elementas in sąrašas:&lt;br /&gt;
        print(elementas)&lt;br /&gt;
    print(&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
# apsirašom sąrašą žodynų, kuriuos rikiuosime.&lt;br /&gt;
žodynai = [&lt;br /&gt;
    {&amp;quot;vardas&amp;quot;: &amp;quot;Darius&amp;quot;, &amp;quot;metai&amp;quot;: 15, &amp;quot;pomėgis&amp;quot;: &amp;quot;bėgimas&amp;quot;},&lt;br /&gt;
    {&amp;quot;vardas&amp;quot;: &amp;quot;Marius&amp;quot;, &amp;quot;metai&amp;quot;: 14, &amp;quot;pomėgis&amp;quot;: &amp;quot;krepšinis&amp;quot;},&lt;br /&gt;
    {&amp;quot;vardas&amp;quot;: &amp;quot;Karolis&amp;quot;, &amp;quot;metai&amp;quot;: 16, &amp;quot;pomėgis&amp;quot;: &amp;quot;krepšinis&amp;quot;},&lt;br /&gt;
    {&amp;quot;vardas&amp;quot;: &amp;quot;Gileta&amp;quot;, &amp;quot;metai&amp;quot;: 13, &amp;quot;pomėgis&amp;quot;: &amp;quot;tinklinis&amp;quot;},&lt;br /&gt;
    {&amp;quot;vardas&amp;quot;: &amp;quot;Eglė&amp;quot;, &amp;quot;metai&amp;quot;: 17, &amp;quot;pomėgis&amp;quot;: &amp;quot;bėgimas&amp;quot;},&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
print(&#039;surikiuojam pagal metus mažėjančia tvarka&#039;)&lt;br /&gt;
spausdink(sorted(žodynai, key=lambda x: -x[&#039;metai&#039;]))&lt;br /&gt;
&lt;br /&gt;
print(&#039;rikiuojame pagal dvi reikšmes: pradžioje pagal pomėgį, o vėliau pagal metus didėjančia tvarka.&#039;)&lt;br /&gt;
spausdink( sorted(žodynai, key=lambda x: (x[&#039;pomėgis&#039;], x[&#039;metai&#039;])) )&lt;br /&gt;
print(&#039;nurodome atbuline tvarka&#039;)&lt;br /&gt;
spausdink( sorted(žodynai, key=lambda x: (x[&#039;pomėgis&#039;], x[&#039;metai&#039;]), reverse=True) )&lt;br /&gt;
&lt;br /&gt;
print(&#039;rikiuojame pagal pomėgį didėjančia tvarka, o vėliau pagal metus mažėjančia&#039;)&lt;br /&gt;
spausdink( sorted(žodynai, key=lambda x: (x[&#039;pomėgis&#039;], -x[&#039;metai&#039;])) )&lt;br /&gt;
print(&#039;nurodome atbuline tvarka&#039;)&lt;br /&gt;
spausdink( sorted(žodynai, key=lambda x: (x[&#039;pomėgis&#039;], -x[&#039;metai&#039;]), reverse=True) )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas bus toks:&lt;br /&gt;
&lt;br /&gt;
 surikiuojam pagal metus mažėjančia tvarka&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Eglė&#039;, &#039;metai&#039;: 17, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Karolis&#039;, &#039;metai&#039;: 16, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Darius&#039;, &#039;metai&#039;: 15, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Marius&#039;, &#039;metai&#039;: 14, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Gileta&#039;, &#039;metai&#039;: 13, &#039;pomėgis&#039;: &#039;tinklinis&#039;}&lt;br /&gt;
 &lt;br /&gt;
 rikiuojame pagal dvi reikšmes: pradžioje pagal pomėgį, o vėliau pagal metus didėjančia tvarka.&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Darius&#039;, &#039;metai&#039;: 15, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Eglė&#039;, &#039;metai&#039;: 17, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Marius&#039;, &#039;metai&#039;: 14, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Karolis&#039;, &#039;metai&#039;: 16, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Gileta&#039;, &#039;metai&#039;: 13, &#039;pomėgis&#039;: &#039;tinklinis&#039;}&lt;br /&gt;
 &lt;br /&gt;
 nurodome atbuline tvarka&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Gileta&#039;, &#039;metai&#039;: 13, &#039;pomėgis&#039;: &#039;tinklinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Karolis&#039;, &#039;metai&#039;: 16, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Marius&#039;, &#039;metai&#039;: 14, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Eglė&#039;, &#039;metai&#039;: 17, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Darius&#039;, &#039;metai&#039;: 15, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 &lt;br /&gt;
 rikiuojame pagal pomėgį didėjančia tvarka, o vėliau pagal metus mažėjančia&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Eglė&#039;, &#039;metai&#039;: 17, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Darius&#039;, &#039;metai&#039;: 15, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Karolis&#039;, &#039;metai&#039;: 16, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Marius&#039;, &#039;metai&#039;: 14, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Gileta&#039;, &#039;metai&#039;: 13, &#039;pomėgis&#039;: &#039;tinklinis&#039;}&lt;br /&gt;
 &lt;br /&gt;
 nurodome atbuline tvarka&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Gileta&#039;, &#039;metai&#039;: 13, &#039;pomėgis&#039;: &#039;tinklinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Marius&#039;, &#039;metai&#039;: 14, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Karolis&#039;, &#039;metai&#039;: 16, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Darius&#039;, &#039;metai&#039;: 15, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Eglė&#039;, &#039;metai&#039;: 17, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
&lt;br /&gt;
Norint naudoti funkciją &amp;lt;code&amp;gt;sorted()&amp;lt;/code&amp;gt; su žodynais, reikia programai nurodyti, pagal kurią žodyno reikšmę nori rikiuoti sąrašą. Tai gali padaryti nurodydamas &amp;lt;code&amp;gt;key=lambda kintamasis: kintamasis[‘reikšmė’]&amp;lt;/code&amp;gt;. Parametras ‘’key’’ nurodo funkcijai ‘’sorted’’, kad norėsi naudoti papildoma funkciją. Štai čia mes paduodame bevardę funkciją ‘’lambda’’, kuri ir nurodo, pagal kuriuos parametrus mes norime rikiuoti sąrašą.&lt;br /&gt;
&lt;br /&gt;
=== Pagalbininkė &#039;&#039;map()&#039;&#039; ===&lt;br /&gt;
&amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; yra Python vidinė funkcija, kuri leidžia mums taikyti funkciją kiekvienam elementui sąraše ar kitame iteruojamame objekte. Ši funkcija grąžina naują sąrašą, kuriame kiekvienas elementas yra pritaikytas pagal paduotą funkciją.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
map(funkcija, sąrašas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ‘’funkcija’’ yra funkcija, kuri bus taikoma kiekvienam elementui sąraše.&lt;br /&gt;
* ‘’sąrašas’’ yra sąrašas, arba kitas iteruojamas objektas.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# sukuriame sąrašą skaičių&lt;br /&gt;
skaičiai = [1, 2, 3, 4, 5]&lt;br /&gt;
&lt;br /&gt;
# apibrėžiame funkciją, kurią norime pritaikyti kiekvienam elementui&lt;br /&gt;
def kvadratas(x):&lt;br /&gt;
    return x**2&lt;br /&gt;
&lt;br /&gt;
# naudojame map() funkciją, kad pritaikytume funkciją kiekvienam sąrašo elementui&lt;br /&gt;
skaičiai_kvadratu = map(kvadratas, skaičiai)&lt;br /&gt;
&lt;br /&gt;
# išspausdiname naują sąrašą, kuriame kiekvienas skaičius yra kvadratu didesnis nei prieš tai&lt;br /&gt;
print(list(skaičiai_kvadratu)) # [1, 4, 9, 16, 25]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Taip pat galime naudoti lambda funkcijas, kad nurodytume funkciją tiesiogiai &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; funkcijos viduje, kaip gali pamatyti čia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# sukuriame sąrašą skaičių&lt;br /&gt;
skaičiai = [1, 2, 3, 4, 5]&lt;br /&gt;
&lt;br /&gt;
# naudojame lambda funkciją, kad apibrėžtume funkciją tiesiogiai map() viduje&lt;br /&gt;
skaičiai_kvadratu = map(lambda x: x**2, skaičiai)&lt;br /&gt;
&lt;br /&gt;
# išspausdiname naują sąrašą, kuriame kiekvienas skaičius yra kvadratu didesnis nei prieš tai&lt;br /&gt;
print(list(skaičiai_kvadratu)) # [1, 4, 9, 16, 25]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; funkcija yra naudinga, kai reikia greitai ir efektyviai pritaikyti tam tikrą funkciją kiekvienam sąrašo ar kitame iteruojamame objekte esančiam elementui, ir gauti naują sąrašą su apdorotais elementais.&lt;br /&gt;
&lt;br /&gt;
Beje, ar atkreipei dėmesį, kad norint atspausdinti sąrašą, aš panaudojau funkciją &amp;lt;code&amp;gt;list()&amp;lt;/code&amp;gt;. Ar žinai kodėl?&lt;br /&gt;
&lt;br /&gt;
Tai yra dėl to, kad &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; funkcija grąžina iteruojamą objektą, kuris yra vadinamas &#039;&#039;generatoriumi&#039;&#039;. Generatorius yra specialus iteruojamas objektas, kuris leidžia gauti reikiamus duomenis vieną po kito pagal poreikį, taip sutaupant atminties resursus. Tačiau, norint matyti visus elementus iš karto, reikia sukurti sąrašą ar kitą tipo objektą, kuris saugotų visus &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; funkcijos grąžinamus elementus. Tai padaryti galime, panaudoję &amp;lt;code&amp;gt;list()&amp;lt;/code&amp;gt; funkciją, kuri konvertuoja generatoriaus grąžinamą objektą į sąrašą.&lt;br /&gt;
&lt;br /&gt;
=== Filtravimas su &#039;&#039;filter()&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;filter()&amp;lt;/code&amp;gt; yra Python funkcija, kuri leidžia filtruoti duomenis pagal tam tikras sąlygas. Ši funkcija veikia pagal panašų principą kaip &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; funkcija, tačiau jos veikimo būdas yra kitoks. &amp;lt;code&amp;gt;filter()&amp;lt;/code&amp;gt; funkcija taiko nurodytą sąlygą (funkciją) kiekvienam elementui iteruojamame objekte ir grąžina tik tuos elementus, kuriuos ta sąlyga tenkina. Tai yra, funkcija išfiltruoja tik tuos elementus, kurie tenkina nurodytą sąlygą.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;filter()&amp;lt;/code&amp;gt; funkcija naudojama kartu su lambda funkcijomis arba kitomis funkcijomis, kurios grąžina True arba False. Kai reikia išgauti tik tuos elementus, kurie tenkina nurodytą sąlygą, naudojama filter() funkcija.&lt;br /&gt;
&lt;br /&gt;
Pavyzdžiui, norint išfiltruoti tik lyginius skaičius iš sąrašo, galime naudoti šią filter() funkcijos ir lambda funkcijos kombinaciją:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Sukuriamas sąrašas skaičių&lt;br /&gt;
skaičiai = [1, 2, 3, 4, 5]&lt;br /&gt;
&lt;br /&gt;
# Sukuriamas naujas sąrašas tik su lyginiais skaičiais naudojant filter() ir lambda funkciją&lt;br /&gt;
lyginiai_skaičiai = filter(lambda x: x % 2 == 0, skaičiai)&lt;br /&gt;
&lt;br /&gt;
# Išspausdinamas naujas sąrašas tik su lyginiais skaičiais&lt;br /&gt;
print(list(lyginiai_skaičiai)) # [2, 4]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šioje situacijoje, filter() funkcija išfiltruoja tik tuos skaičius, kurių liekana yra lygi nuliui (t.y. tik lyginiai skaičiai).&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Pa%C5%BEangios_funkcijos&amp;diff=368</id>
		<title>Vadovėlis/Pažangios funkcijos</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Pa%C5%BEangios_funkcijos&amp;diff=368"/>
		<updated>2023-06-23T07:35:48Z</updated>

		<summary type="html">&lt;p&gt;Monika: /* Lambda funkcija */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Pažangesnės funkcijos ===&lt;br /&gt;
Papasakosiu tau apie keletą neįtikėtinų funkcijų ir gudrybių, kurios padės supaprastinti užduočių atlikimą.&lt;br /&gt;
&#039;&#039;Pradėkime&#039;&#039; :)&lt;br /&gt;
&lt;br /&gt;
=== Lambda funkcija ===&lt;br /&gt;
&lt;br /&gt;
Jau žinai kaip apsirašyti funkciją su žodeliu ‘’def’’. Lambda funkcija yra tokia pati funkcija, tik labai trumpa ir anoniminė - ji neturi jokio vardo. Kai reikia apibrėžti labai trumpą ir paprastą funkciją, kurią naudosime tik vieną kartą ir nereikalauja sudėtingos logikos, galime naudoti lambda funkciją. Tai gali būti ypač naudinga, kai turime sudėtingą funkciją, kurią norime išskaidyti į smulkesnes dalis, arba kai norime panaudoti funkciją kaip argumentą kitai funkcijai. Lambda funkcijos sintaksė yra paprasta, rašome žodį lambda, po to tarp skliaustų nurodome argumentų sąrašą ir funkcijos išraišką. Tai viskas, ko mums reikia, kad apibrėžtume lambda funkciją.&lt;br /&gt;
&lt;br /&gt;
Lambda funkcijos yra naudojamos daugeliui Python standartinių funkcijų, pavyzdžiui, &amp;lt;code&amp;gt;filter()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sorted()&amp;lt;/code&amp;gt;, kad būtų paprastesnis kodas. Apie jas daugiau papasakosiu šiame skyriuje, o dabar pažiūrėkime, kaip galime panaudoti lambda funkciją:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# lambda funkcija apskaičiuojanti kvadratą&lt;br /&gt;
kvadratas = lambda x: x**2&lt;br /&gt;
&lt;br /&gt;
print(kvadratas(5)) # 25&lt;br /&gt;
&lt;br /&gt;
# lambda funkcija filtruojanti nelyginius skaičius&lt;br /&gt;
skaičiai = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]&lt;br /&gt;
nelyginiai = list(filter(lambda x: x % 2 != 0, skaičiai))&lt;br /&gt;
&lt;br /&gt;
print(nelyginiai) # [1, 3, 5, 7, 9]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lambda funkcija taip pat gali būti naudinga, kai reikia perduoti funkciją kaip argumentą į kitą funkciją. Tai leidžia sukurti trumpą, paprastą ir lengvai suprantamą kodą.&lt;br /&gt;
&lt;br /&gt;
=== Rikiavimas su &#039;&#039;sorted()&#039;&#039; ===&lt;br /&gt;
Anksčiau rodžiau rikiavimo funkciją su sąrašais. Sąrašo funkcija &amp;lt;code&amp;gt;sąrašas.sort()&amp;lt;/code&amp;gt; modifikuoja savo elementus juos surikiuodamas. Taip kintamasis pakeičia savo reikšmę. Python taip pat turi funkciją &amp;lt;code&amp;gt;sorted()&amp;lt;/code&amp;gt; kuri grąžina naują surikiuotą rezultatą, nepakeisdama originalaus kintamojo.&lt;br /&gt;
Pažiūrėkim, kaip tai veikia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# susikuriame sąrašą su atsitiktiniais skaičiais&lt;br /&gt;
sąrašas = [3,1,5,23,0]&lt;br /&gt;
# sorted grąžina surikiuotą sąrašą, kuri priskiriame naujajam kintamajam.&lt;br /&gt;
surikiuotas_sąrašas = sorted(sąrašas)&lt;br /&gt;
&lt;br /&gt;
# atsispausdiname rezultatą. Matysi, kad kintamasis sąrašas nepakeitė reikšmės, o surikiuotas_sąrašas reikšmė yra surikiuota.&lt;br /&gt;
print(surikiuotas_sąrašas, sąrašas)&lt;br /&gt;
&lt;br /&gt;
# pažiūrėkim, ką padarys funkcija sort()&lt;br /&gt;
sąrašas.sort()&lt;br /&gt;
# rezultate matysi du surikiuotus identiškus sąrašus.&lt;br /&gt;
print(surikiuotas_sąrašas, sąrašas)&lt;br /&gt;
&lt;br /&gt;
# kaip surikiuoti mažėjančia tvarka? Tiesiog pridėkime prie funkcijos reverse=True&lt;br /&gt;
atbulas_sąrašas = sorted(surikiuotas_sąrašas, reverse=True)&lt;br /&gt;
print(atbulas_sąrašas, surikiuotas_sąrašas, sąrašas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatus turėtum matyti tokius:&lt;br /&gt;
&lt;br /&gt;
 [0, 1, 3, 5, 23] [3, 1, 5, 23, 0]&lt;br /&gt;
 [0, 1, 3, 5, 23] [0, 1, 3, 5, 23]&lt;br /&gt;
 [23, 5, 3, 1, 0] [0, 1, 3, 5, 23] [0, 1, 3, 5, 23]&lt;br /&gt;
&lt;br /&gt;
Akylus skaitytojas pamatys, kad pavyzdyje parodžiau papildomą sorted funkcionalumą atbuliniam sąrašo rikiavimui:  &amp;lt;code&amp;gt;sorted(sąrašas, reverse=True)&amp;lt;/code&amp;gt;. &#039;&#039;&#039;reverse&#039;&#039;&#039; anglų kalboje reiškia &#039;&#039;atbulinis&#039;&#039;, todėl tai pasako funkcijai, kad mums reikia grąžint sąrašą atbuline tvarka.&lt;br /&gt;
&lt;br /&gt;
Dar vienas labai svarbus skirtumas tarp sąrašas.sort() ir sorted() - ‘’sorted’’ naudojamas visiems iteruojamiems objektams. Pavyzdžiui anksčiau skyriuje minėtiems žodynams.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# pasirašom funkciją sąrašo atvaizdavimui &lt;br /&gt;
def spausdink(sąrašas):&lt;br /&gt;
    for elementas in sąrašas:&lt;br /&gt;
        print(elementas)&lt;br /&gt;
    print(&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
# apsirašom sąrašą žodynų, kuriuos rikiuosime.&lt;br /&gt;
žodynai = [&lt;br /&gt;
    {&amp;quot;vardas&amp;quot;: &amp;quot;Darius&amp;quot;, &amp;quot;metai&amp;quot;: 15, &amp;quot;pomėgis&amp;quot;: &amp;quot;bėgimas&amp;quot;},&lt;br /&gt;
    {&amp;quot;vardas&amp;quot;: &amp;quot;Marius&amp;quot;, &amp;quot;metai&amp;quot;: 14, &amp;quot;pomėgis&amp;quot;: &amp;quot;krepšinis&amp;quot;},&lt;br /&gt;
    {&amp;quot;vardas&amp;quot;: &amp;quot;Karolis&amp;quot;, &amp;quot;metai&amp;quot;: 16, &amp;quot;pomėgis&amp;quot;: &amp;quot;krepšinis&amp;quot;},&lt;br /&gt;
    {&amp;quot;vardas&amp;quot;: &amp;quot;Gileta&amp;quot;, &amp;quot;metai&amp;quot;: 13, &amp;quot;pomėgis&amp;quot;: &amp;quot;tinklinis&amp;quot;},&lt;br /&gt;
    {&amp;quot;vardas&amp;quot;: &amp;quot;Eglė&amp;quot;, &amp;quot;metai&amp;quot;: 17, &amp;quot;pomėgis&amp;quot;: &amp;quot;bėgimas&amp;quot;},&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
print(&#039;surikiuojam pagal metus mažėjančia tvarka&#039;)&lt;br /&gt;
spausdink(sorted(žodynai, key=lambda x: -x[&#039;metai&#039;]))&lt;br /&gt;
&lt;br /&gt;
print(&#039;rikiuojame pagal dvi reikšmes: pradžioje pagal pomėgį, o vėliau pagal metus didėjančia tvarka.&#039;)&lt;br /&gt;
spausdink( sorted(žodynai, key=lambda x: (x[&#039;pomėgis&#039;], x[&#039;metai&#039;])) )&lt;br /&gt;
print(&#039;nurodome atbuline tvarka&#039;)&lt;br /&gt;
spausdink( sorted(žodynai, key=lambda x: (x[&#039;pomėgis&#039;], x[&#039;metai&#039;]), reverse=True) )&lt;br /&gt;
&lt;br /&gt;
print(&#039;rikiuojame pagal pomėgį didėjančia tvarka, o vėliau pagal metus mažėjančia&#039;)&lt;br /&gt;
spausdink( sorted(žodynai, key=lambda x: (x[&#039;pomėgis&#039;], -x[&#039;metai&#039;])) )&lt;br /&gt;
print(&#039;nurodome atbuline tvarka&#039;)&lt;br /&gt;
spausdink( sorted(žodynai, key=lambda x: (x[&#039;pomėgis&#039;], -x[&#039;metai&#039;]), reverse=True) )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas bus toks:&lt;br /&gt;
&lt;br /&gt;
 surikiuojam pagal metus mažėjančia tvarka&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Eglė&#039;, &#039;metai&#039;: 17, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Karolis&#039;, &#039;metai&#039;: 16, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Darius&#039;, &#039;metai&#039;: 15, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Marius&#039;, &#039;metai&#039;: 14, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Gileta&#039;, &#039;metai&#039;: 13, &#039;pomėgis&#039;: &#039;tinklinis&#039;}&lt;br /&gt;
 &lt;br /&gt;
 rikiuojame pagal dvi reikšmes: pradžioje pagal pomėgį, o vėliau pagal metus didėjančia tvarka.&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Darius&#039;, &#039;metai&#039;: 15, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Eglė&#039;, &#039;metai&#039;: 17, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Marius&#039;, &#039;metai&#039;: 14, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Karolis&#039;, &#039;metai&#039;: 16, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Gileta&#039;, &#039;metai&#039;: 13, &#039;pomėgis&#039;: &#039;tinklinis&#039;}&lt;br /&gt;
 &lt;br /&gt;
 nurodome atbuline tvarka&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Gileta&#039;, &#039;metai&#039;: 13, &#039;pomėgis&#039;: &#039;tinklinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Karolis&#039;, &#039;metai&#039;: 16, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Marius&#039;, &#039;metai&#039;: 14, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Eglė&#039;, &#039;metai&#039;: 17, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Darius&#039;, &#039;metai&#039;: 15, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 &lt;br /&gt;
 rikiuojame pagal pomėgį didėjančia tvarka, o vėliau pagal metus mažėjančia&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Eglė&#039;, &#039;metai&#039;: 17, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Darius&#039;, &#039;metai&#039;: 15, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Karolis&#039;, &#039;metai&#039;: 16, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Marius&#039;, &#039;metai&#039;: 14, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Gileta&#039;, &#039;metai&#039;: 13, &#039;pomėgis&#039;: &#039;tinklinis&#039;}&lt;br /&gt;
 &lt;br /&gt;
 nurodome atbuline tvarka&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Gileta&#039;, &#039;metai&#039;: 13, &#039;pomėgis&#039;: &#039;tinklinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Marius&#039;, &#039;metai&#039;: 14, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Karolis&#039;, &#039;metai&#039;: 16, &#039;pomėgis&#039;: &#039;krepšinis&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Darius&#039;, &#039;metai&#039;: 15, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
 {&#039;vardas&#039;: &#039;Eglė&#039;, &#039;metai&#039;: 17, &#039;pomėgis&#039;: &#039;bėgimas&#039;}&lt;br /&gt;
&lt;br /&gt;
Norint naudoti funkciją &amp;lt;code&amp;gt;sorted()&amp;lt;/code&amp;gt; su žodynais, reikia programai nurodyti, pagal kurią žodyno reikšmę nori rikiuoti sąrašą. Tai gali padaryti nurodydamas &amp;lt;code&amp;gt;key=lambda kintamasis: kintamasis[‘reikšmė’]&amp;lt;/code&amp;gt;. Parametras ‘’key’’ nurodo funkcijai ‘’sorted’’, kad norėsi naudoti papildoma funkciją. Štai čia mes paduodame bevardę funkciją ‘’lambda’’, kuri ir nurodo, pagal kuriuos parametrus mes norime rikiuoti sąrašą.&lt;br /&gt;
&lt;br /&gt;
=== Pagalbininkė &#039;&#039;map()&#039;&#039; ===&lt;br /&gt;
&amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; yra Python vidinė funkcija, kuri leidžia mums taikyti funkciją kiekvienam elementui sąraše ar kitame iteruojamame objekte. Ši funkcija grąžina naują sąrašą, kuriame kiekvienas elementas yra pritaikytas pagal paduotą funkciją.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
map(funkcija, sąrašas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ‘’funkcija’’ yra funkcija, kuri bus taikoma kiekvienam elementui sąraše.&lt;br /&gt;
* ‘’sąrašas’’ yra sąrašas, arba kitas iteruojamas objektas.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# sukuriame sąrašą skaičių&lt;br /&gt;
skaičiai = [1, 2, 3, 4, 5]&lt;br /&gt;
&lt;br /&gt;
# apibrėžiame funkciją, kurią norime pritaikyti kiekvienam elementui&lt;br /&gt;
def kvadratas(x):&lt;br /&gt;
    return x**2&lt;br /&gt;
&lt;br /&gt;
# naudojame map() funkciją, kad pritaikytume funkciją kiekvienam sąrašo elementui&lt;br /&gt;
skaičiai_kvadratu = map(kvadratas, skaičiai)&lt;br /&gt;
&lt;br /&gt;
# išspausdiname naują sąrašą, kuriame kiekvienas skaičius yra kvadratu didesnis nei prieš tai&lt;br /&gt;
print(list(skaičiai_kvadratu)) # [1, 4, 9, 16, 25]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Taip pat galime naudoti lambda funkcijas, kad nurodytume funkciją tiesiogiai &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; funkcijos viduje, kaip gali pamatyti čia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# sukuriame sąrašą skaičių&lt;br /&gt;
skaičiai = [1, 2, 3, 4, 5]&lt;br /&gt;
&lt;br /&gt;
# naudojame lambda funkciją, kad apibrėžtume funkciją tiesiogiai map() viduje&lt;br /&gt;
skaičiai_kvadratu = map(lambda x: x**2, skaičiai)&lt;br /&gt;
&lt;br /&gt;
# išspausdiname naują sąrašą, kuriame kiekvienas skaičius yra kvadratu didesnis nei prieš tai&lt;br /&gt;
print(list(skaičiai_kvadratu)) # [1, 4, 9, 16, 25]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; funkcija yra naudinga, kai reikia greitai ir efektyviai pritaikyti tam tikrą funkciją kiekvienam sąrašo ar kitame iteruojamame objekte esančiam elementui, ir gauti naują sąrašą su apdorotais elementais.&lt;br /&gt;
&lt;br /&gt;
Beje, ar atkreipei dėmesį, kad norint atspausdinti sąrašą, aš panaudojau funkciją &amp;lt;code&amp;gt;list()&amp;lt;/code&amp;gt;. Ar žinai kodėl?&lt;br /&gt;
&lt;br /&gt;
Tai yra dėl to, kad &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; funkcija grąžina iteruojamą objektą, kuris yra vadinamas &#039;&#039;generatoriumi&#039;&#039;. Generatorius yra specialus iteruojamas objektas, kuris leidžia gauti reikiamus duomenis vieną po kito pagal poreikį, taip sutaupant atminties resursus. Tačiau, norint matyti visus elementus iš karto, reikia sukurti sąrašą ar kitą tipo objektą, kuris saugotų visus &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; funkcijos grąžinamus elementus. Tai padaryti galime, panaudoję &amp;lt;code&amp;gt;list()&amp;lt;/code&amp;gt; funkciją, kuri konvertuoja generatoriaus grąžinamą objektą į sąrašą.&lt;br /&gt;
&lt;br /&gt;
=== Filtravimas su &#039;&#039;filter()&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;filter()&amp;lt;/code&amp;gt; yra Python funkcija, kuri leidžia filtruoti duomenis pagal tam tikras sąlygas. Ši funkcija veikia pagal panašų principą kaip &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; funkcija, tačiau jos veikimo būdas yra kitoks. &amp;lt;code&amp;gt;filter()&amp;lt;/code&amp;gt; funkcija taiko nurodytą sąlygą (funkciją) kiekvienam elementui iteruojamame objekte ir grąžina tik tuos elementus, kuriuos ta sąlyga tenkina. Tai yra, funkcija išfiltruoja tik tuos elementus, kurie tenkina nurodytą sąlygą.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;filter()&amp;lt;/code&amp;gt; funkcija naudojama kartu su lambda funkcijomis arba kitomis funkcijomis, kurios grąžina True arba False. Kai reikia išgauti tik tuos elementus, kurie tenkina nurodytą sąlygą, naudojama filter() funkcija.&lt;br /&gt;
&lt;br /&gt;
Pavyzdžiui, norint išfiltruoti tik lyginius skaičius iš sąrašo, galime naudoti šią filter() funkcijos ir lambda funkcijos kombinaciją:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Sukuriamas sąrašas skaičių&lt;br /&gt;
skaičiai = [1, 2, 3, 4, 5]&lt;br /&gt;
&lt;br /&gt;
# Sukuriamas naujas sąrašas tik su lyginiais skaičiais naudojant filter() ir lambda funkciją&lt;br /&gt;
lyginiai_skaičiai = filter(lambda x: x % 2 == 0, skaičiai)&lt;br /&gt;
&lt;br /&gt;
# Išspausdinamas naujas sąrašas tik su lyginiais skaičiais&lt;br /&gt;
print(list(lyginiai_skaičiai)) # [2, 4]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šioje situacijoje, filter() funkcija išfiltruoja tik tuos skaičius, kurių liekana yra lygi nuliui (t.y. tik lyginiai skaičiai).&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Duomen%C5%B3_tyryba_ir_informacija&amp;diff=336</id>
		<title>Vadovėlis/Duomenų tyryba ir informacija</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Duomen%C5%B3_tyryba_ir_informacija&amp;diff=336"/>
		<updated>2023-04-19T11:29:55Z</updated>

		<summary type="html">&lt;p&gt;Monika: /* Dirbtinis intelektas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Įvadas į importuotas bibliotekas ir kitas funkcijas|next=Pabaiga}}&lt;br /&gt;
==Dirbtinis intelektas==&lt;br /&gt;
&lt;br /&gt;
Dirbtinis intelektas (AI) sparčiai tampa integralia šiandienos technologijų dalimi ir planuojama, kad jis taps dar plačiau naudojamas ateityje. AI technologijos organizacijoms siūlo daugybę naudos, įskaitant pagerintą vertinimo tikslumą, didesnį darbo srauto greitį ir efektyvumą, geresnį klientų aptarnavimą, automatizuotus sprendimų priėmimo procesus, pagalbą spėjimo modeliams ir realiu laiku atliekamą analizę. AI taip pat gali pakeisti žmones atliekant nuobodžius, ar besikartojančius darbus, pvz., elektroninių laiškų rūšiavime ar paprastų duomenų įvedimo užduočių atlikime. Be to, jis kuria naujas darbo vietų galimybes žmonėms, kurie gali užtikrinti, kad AI technologijos veiktų teisingai.&lt;br /&gt;
&lt;br /&gt;
Tačiau šie privalumai nėra be rizikų. Yra įvairių etinių klausimų, susijusių su duomenų etiškumu, kai kuriamos jų AI; tai reikalauja asmenų su reikšmingu žinių lygiu, kad užtikrintų, jog AI technologijos būtų kuriamos teisingai.&lt;br /&gt;
&lt;br /&gt;
Neuroniniai tinklai yra vis populiaresnis įrankis skaičiavimo ir duomenų analizės pasaulyje. Jie yra dirbtinio intelekto rūšis, kuri yra sukurta imituoti žmogaus smegenų procesus, naudojant tarpusavyje susijusius mazgus ir sluoksnius, kad apdoroti didelius kiekius duomenų. Neuroniniai tinklai leidžia greičiau priimti sprendimus ir gauti tiksliausius rezultatus, kai reikia analizuoti sudėtingus duomenų rinkinius. Jų taikymo sritis yra ganėtinai plati, pradedant sukčiavimo apsauga, objektų ir veido atpažinimu.&lt;br /&gt;
&lt;br /&gt;
==Kriptografinės sistemos==&lt;br /&gt;
&lt;br /&gt;
Kriptografija yra saugios komunikacijos mokslas, kuris naudojamas įvairiomis formomis nuo senovės laikų. Šiandien, kriptografinės sistemos yra neišvengiamos mūsų modernioje pasaulyje. Jos padeda apsaugoti viską nuo internetinių finansinių sandorių iki asmeninių medicininių įrašų. Kaip technologijos tobulėja, kriptografija ir susijusios sistemos yra kuriamos ir tobulinamos, kad duomenys būtų saugūs ir apsaugoti. &lt;br /&gt;
&lt;br /&gt;
Simetrinė ir asimetrinė kodavimo technologijos yra du skirtingi kodavimo būdai, naudojami kriptografijoje ir duomenų saugumo srityse. Simetrinė kodavimo technologija naudojama efektyviai perdavimo duomenų šifruotai apsaugoti tarp dviejų šalių, o asimetrinis šifravimas leidžia suprasti perdavimo duomenis tik viena kryptimi, todėl ši technologija yra itin saugi.&lt;br /&gt;
Vienas iš paprastesnių simetrinio kodavimo pavyzdžių - &amp;quot;Atbash&amp;quot; kodavimas, kurio esmė yra pakeisti abėcėlės raides vietomis, t.y. pirmoji raidė tampa paskutine, antroji - priešpaskutine, ir taip toliau. Pvz., žinutė &amp;quot;LABAS&amp;quot; užšifruota &amp;quot;OZYZH&amp;quot;. Atkoduojant, tiesiog reikia pakeisti raidžių vietomis atgal, ir gautume pradinę žinutę &amp;quot;LABAS&amp;quot;. &lt;br /&gt;
Kalbant apie asimetrinį kodavimą, pavyzdys galėtų būti RSA kodavimas. Tai yra labai populiari viešojo raktų kriptografijos sistema, kuri naudoja matematinius algoritmus koduojant ir dekoduojant duomenis.&lt;br /&gt;
&lt;br /&gt;
Pavyzdžiui, norint užšifruoti pranešimą &amp;quot;LABAS&amp;quot;, reikia naudoti gavėjo viešąjį raktą, kuris gali būti naudojamas tik užšifruoti pranešimus, bet ne dekoduoti juos atgal į pradinę formą. Atkoduojant, naudojamas privatus raktas. Asimetrinis kodavimas yra sudėtingas procesas, reikalaujantis specialių žinių ir įrangos. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viešai prieinami duomenys==&lt;br /&gt;
&lt;br /&gt;
Kadangi pasaulis tampa vis labiau orientuotas į duomenis, viešieji duomenys tapo neišvengiamu elementu, padedančiu suprasti, kaip žmonės, organizacijos ir vyriausybės tarpusavyje sąveikauja. Šie duomenys yra laisvai prieinami visuomenei, kad jie galėtų juos peržiūrėti ir analizuoti. Išnaudojus pažinimo procese gautus rezultatus, galime geriau suprasti tendencijas, modelius, koreliacijas ir ryšius tarp skirtingų subjektų.&lt;br /&gt;
&lt;br /&gt;
Viešieji duomenys yra informacijos lobis, kuris gali būti naudojamas priimant sprendimus sudėtinguose projektuose ir verslo operacijose. Strategiškai naudojantis šia informacija, verslai gali gauti nepakeičiamų žinių apie savo operacijas, taip pat pasiekti konkurencinį pranašumą savo pramonėje. Viešųjų duomenų analizė taip pat padeda atskleisti sukčiavimus ir netikslumus esamuose sistemose, kurie galėtų turėti rimtų padarinių visuomenei apskritai.&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Įvadas į importuotas bibliotekas ir kitas funkcijas|next=Pabaiga}}&lt;br /&gt;
[[Category:Python Vadovėlis]]&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis&amp;diff=335</id>
		<title>Vadovėlis</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis&amp;diff=335"/>
		<updated>2023-04-19T11:07:46Z</updated>

		<summary type="html">&lt;p&gt;Monika: Pridėtas skyrius&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Vadovėlis}}&lt;br /&gt;
[[Category:Python Vadovėlis]]&lt;br /&gt;
&lt;br /&gt;
Tai - standartinės Python programavimo kalbos vadovėlis 9-10 klasei, išverstas iš [https://en.wikibooks.org/wiki/Non-Programmer%27s_Tutorial_for_Python_3 Non programmer&#039;s Tutorial for Python 3].&lt;br /&gt;
&lt;br /&gt;
Šis vadovėlis yra atvirojo kodo, [https://www.gnu.org/licenses/gpl-3.0.html GPL v3] licencija.&lt;br /&gt;
&lt;br /&gt;
==Turinys==&lt;br /&gt;
;[[/Autoriai|Autoriai]]&lt;br /&gt;
: Originalaus (angliško) vadovėlio autoriai ir vertėjai į lietuvių kalbą.&lt;br /&gt;
;[[/Įžanga|Įžanga]]&lt;br /&gt;
: Įžanginiai žodžiai&lt;br /&gt;
;[[/Įvadas|Įvadas]]&lt;br /&gt;
: Python&#039;o diegimas ir naudojimas&lt;br /&gt;
;[[/Labas, Pasauli|Labas, Pasauli]]&lt;br /&gt;
: Garsioji pirmoji programa &amp;amp;ndash; ekrano išvestis &amp;amp;ndash; kintamieji &amp;amp;ndash; skaičiai ir skaičiavimai&lt;br /&gt;
;[[/Kas čia eina?|Kas čia eina?]]&lt;br /&gt;
: Interaktyvi įvestis &amp;amp;ndash; tekstinė eilutė&lt;br /&gt;
;[[/Suskaičiuoti iki 10|Suskaičiuoti iki 10]]&lt;br /&gt;
: Ciklai &amp;lt;tt&amp;gt;while&amp;lt;/tt&amp;gt;&lt;br /&gt;
;[[/Pasirinkimai|Pasirinkimai]]&lt;br /&gt;
: &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt; sakiniai&lt;br /&gt;
;[[/Derinimas|Derinimas]]&lt;br /&gt;
: Išsiaiškinti, kas negerai&lt;br /&gt;
;[[/Funkcijų apibrėžimas|Funkcijų apibrėžimas]]&lt;br /&gt;
: Programų struktūrizavimas naudojant funkcijas&lt;br /&gt;
;[[/Rekursinės funkcijos|Rekursinės funkcijos]]&lt;br /&gt;
: (Beveik) stulbinantis pavyzdys, kaip programuotojai gali mąstyti&lt;br /&gt;
;[[/Sąrašai|Sąrašai]]&lt;br /&gt;
: Kintamieji, kuriuose yra daugiau nei viena reikšmė&lt;br /&gt;
;[[/Ciklai For|Ciklai For]]&lt;br /&gt;
: Dar vienos rūšies ciklai&lt;br /&gt;
;[[/Loginiai reiškiniai|Loginiai reiškiniai]]&lt;br /&gt;
: Kompiuterinė logika &amp;amp;ndash; &amp;lt;tt&amp;gt;True&amp;lt;/tt&amp;gt; ir &amp;lt;tt&amp;gt;False&amp;lt;/tt&amp;gt; &amp;amp;ndash; &amp;lt;tt&amp;gt;and&amp;lt;/tt&amp;gt; ir &amp;lt;tt&amp;gt;or&amp;lt;/tt&amp;gt; &amp;amp;ndash; &amp;lt;tt&amp;gt;not&amp;lt;/tt&amp;gt;&lt;br /&gt;
;[[/Žodynai|Žodynai]]&lt;br /&gt;
: Kintamieji, kuriuose yra raktų/reikšmių poros&lt;br /&gt;
;[[/Modulių naudojimas|Modulių naudojimas]]&lt;br /&gt;
: Standartinio funkcionalumo plėtiniai&lt;br /&gt;
;[[/Daugiau apie sąrašus|Daugiau apie sąrašus]]&lt;br /&gt;
: Sąrašų elementų ar dalių naudojimas&lt;br /&gt;
;[[/Daugiau apie tekstines eilutes|Daugiau apie tekstines eilutes]]&lt;br /&gt;
: Pažangesnės teksto manipuliacijos&lt;br /&gt;
;[[/Daugiau apie funkcijas|Daugiau apie funkcijas]]&lt;br /&gt;
: Parametrai, reikšmės, programos skaldymas&lt;br /&gt;
;[[/Failų tvarkymas|Failų tvarkymas]]&lt;br /&gt;
: Skaitymas iš failų ir rašymas į failus&lt;br /&gt;
;[[/Siekiant tobulumo|Siekiant tobulumo]]&lt;br /&gt;
: Kaip tvarkyti klaidas&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
;[[/Rekursija|Rekursija]]&lt;br /&gt;
: Rekursinės funkcijos&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
;[[/Įvadas į objektinį programavimą Python 3|Įvadas į objektinį programavimą Python 3]]&lt;br /&gt;
: OOP pagrindai (Objektinis programavimas, angl. &#039;&#039;Object-Oriented Programming&#039;&#039;)&lt;br /&gt;
;[[/Įvadas į importuotas bibliotekas ir kitas funkcijas|Įvadas į importuotas bibliotekas ir kitas funkcijas]]&lt;br /&gt;
: Pagrindinės funkcijos iš įvairių bibliotekų.&lt;br /&gt;
;[[/Duomenų tyryba ir informacija|Duomenų tyryba ir informacija]]&lt;br /&gt;
: Informacija apie dirbtinį intelektą, kriptografiją ir duomenis.&lt;br /&gt;
;[[/Pabaiga|Pabaiga]]&lt;br /&gt;
: Ką toliau daryti&lt;br /&gt;
;[[/DUK|D.U.K.]]&lt;br /&gt;
: Dažnai užduodami klausimai&lt;br /&gt;
;[[/Terminai|Terminai]]&lt;br /&gt;
: Terminų žodynas&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Importuotos_bibliotekos_ir_v%C4%97%C5%BElys&amp;diff=334</id>
		<title>Vadovėlis/Importuotos bibliotekos ir vėžlys</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Importuotos_bibliotekos_ir_v%C4%97%C5%BElys&amp;diff=334"/>
		<updated>2023-04-19T11:06:23Z</updated>

		<summary type="html">&lt;p&gt;Monika: Pakeista navigacija&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Įvadas į objektinį programavimą Python 3 |next=Duomenų tyryba ir informacija}}&lt;br /&gt;
&lt;br /&gt;
Šiame skyriuje apžvelgsime kai kurias funkcijas iš įvairių importuotų bibliotekų, kurios yra dažniausiai naudojamos Python&#039;e. Šis skyrius nėra būtinas norint visiškai suprasti Python&#039;o pagrindus. Šis skyrius skirtas parodyti tolesnes Python&#039;o galimybes, kurias galima panaudoti su tuo, ką jau žinote apie kalbą.&lt;br /&gt;
&lt;br /&gt;
=== math ===&lt;br /&gt;
&lt;br /&gt;
:Matematikos biblioteka aprėpia daug naudingų ir programoms reikalingų funkcijų, kurios atlieka įvarias matematines operacijas (kai neužtenka Python&#039;o operatorių).&lt;br /&gt;
&lt;br /&gt;
:Šiame skyriuje daroma prielaida, kad turi matematikos žinias iki trigonometrijos kurso imtinai.&lt;br /&gt;
&lt;br /&gt;
Šiame sąraše išvardintos visos matematikos bibliotekos funkcijos:&lt;br /&gt;
*math.ceil (Suapvalina skaičių iki artimiausio skaičiaus po kablelio)&lt;br /&gt;
*math.copysign (Grąžina absoliučią reikšmę &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; su ženklu, kurį turi skaičius &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;(x, y)&amp;lt;/code&amp;gt;)&lt;br /&gt;
*math.fabs (Grąžina absoliučią skaičiaus reikšmę, kaip slankiojo kablelio reikšmę)&lt;br /&gt;
*math.factorial (Grąžina skaičiaus faktorialą)&lt;br /&gt;
*math.floor (Grąžina didžiausią sveikąjį skaičių, mažesnį arba lygų duotajam skaičiui)&lt;br /&gt;
*math.fmod (Nėra pati idealiausia funkcija su kuria galima pasiekti nurodytą tikslą. Šiame skyriuje nebus detaliau paaiškinta.)&lt;br /&gt;
*math.frexp (Už šios pamokos ribų. Šiame skyriuje nebus detaliau paaiškinta.)&lt;br /&gt;
*math.fsum (Grąžina visų skliausteliuose esančių skaičių sumą)&lt;br /&gt;
*math.isfinite (Patikrina ar skaičius yra baigtinis)&lt;br /&gt;
*math.isinf (Patikrina ar skaičius yra begalinis ar ne)&lt;br /&gt;
*math.isnan (Patikrina, ar reikšmė yra NaN (ne skaičius), ar ne)&lt;br /&gt;
*math.modf  (Už šios pamokos srities ribų. Šiame skyriuje nebus detaliau paaiškinta.)&lt;br /&gt;
*math.trunc (Už šios pamokos srities ribų. Šiame skyriuje nebus detaliau paaiškinta.)&lt;br /&gt;
*math.exp (Apskaičiuoja eksponentinę funkciją e^x, kur e yra matematinė konstanta)&lt;br /&gt;
*math.expm1 (Grąžina E^x - 1)&lt;br /&gt;
*math.log (Grąžina natūralųjį skaičiaus logaritmą)&lt;br /&gt;
*math.log1p (Grąžina log(1+skaičius))&lt;br /&gt;
*math.log10 (Grąžina skaičiaus 10 bazinį logaritmą)&lt;br /&gt;
*math.pow (Grąžina x reikšmę, pakeltą laipsniu y)&lt;br /&gt;
*math.sqrt (Grąžina skaičiaus kvadratinę šaknį)&lt;br /&gt;
*math.acos (Grąžina arccos(x))&lt;br /&gt;
*math.asin (Grąžina arcsin(x))&lt;br /&gt;
*math.atan (Grąžina arctan(x))&lt;br /&gt;
*math.cos (Grąžina reikšmės kosinusą)&lt;br /&gt;
*math.hypot (Grąžina Euklido normą)&lt;br /&gt;
*math.sin (Grąžina reikšmės sinusą)&lt;br /&gt;
*math.tan (Grąžina reikšmės tangentą)&lt;br /&gt;
*math.degrees (Paverčia radianus į laipsnius)&lt;br /&gt;
*math.radians (Paverčia laipsnius į radianus)&lt;br /&gt;
*math.pi (Grąžina π reikšmę)&lt;br /&gt;
*math.e (Grąžina e reikšmę)&lt;br /&gt;
&lt;br /&gt;
:Žinoma, neapimsime visų šių funkcijų, bet padengsime didelę jų dalį.&lt;br /&gt;
&lt;br /&gt;
Pradėkime nuo dviejų konstantų matematikos bibliotekoje. &amp;lt;code&amp;gt;math.pi&amp;lt;/code&amp;gt; yra matematinė konstanta „π“, tavo kompiuteryje pasiekiamu tikslumu. &amp;lt;code&amp;gt;math.e&amp;lt;/code&amp;gt; yra matematinė konstanta „e“, tavo kompiuteryje pasiekiamu tikslumu.&lt;br /&gt;
Štai yra abiejų konstantų, įvestų interaktyviuoju režimu Python&#039;o terminale, pavyzdys:&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; import math&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; math.e&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;2.718281828459045&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; math.pi&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;3.141592653589793&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šios konstantos gali būti saugomos kintamajame, kaip ir bet kuris kitas skaičius. Žemiau pateikiamas būtent toks pavyzdys ir parodytos paprastos šių kintamųjų operacijos:&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; conste = math.e&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; (conste + 5 / 2) * 2.21&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;11.532402840894488&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; constpi = math.pi&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; (((7 /2.1) % constpi) * 2)&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;0.38348135948707984&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabar pažvelk į funkcijas: pradėk nuo sąrašo viršaus ir judėk žemyn (kai kurios funkcijos bus praleistos).&lt;br /&gt;
Kai žiūrėsi kiekvieną iš pavyzdžių, pabandyk išsiaiškinti, ką kiekviena funkcija daro. Šalia bus pateiktas sakinys ar du, kurie turėtų tau padėti.&lt;br /&gt;
&lt;br /&gt;
Žemiau pateikiamas kiekvienos &amp;lt;code&amp;gt;math&amp;lt;/code&amp;gt; modulio funkcijos pavyzdys ir kaip ji naudojama (išskyrus anksčiau nurodytas funkcijas, kurių nereikia paaiškinti)&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; import math&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; math.ceil(4.5) ** Suapvalina skaičių iki artimiausio skaičiaus po kablelio **&lt;br /&gt;
 5&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; math.ceil(4.1)&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; math.copysign(4, -.4)  ** Grąžina absoliučią reikšmę &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; su ženklu, kurį turi skaičius &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;(x, y)&amp;lt;/code&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;-4.0&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; math.copysign(-4, 4)&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;4.0&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; math.fabs(-44)  ** Grąžina absoliučią skaičiaus reikšmę, kaip slankiojo kablelio reikšmę **&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;44.0&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; math.factorial(4)  **  Grąžina skaičiaus faktorialą **&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;24&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; math.floor(4.3)  ** Grąžina didžiausią sveikąjį skaičių, mažesnį arba lygų duotajam skaičiui **&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; math.floor(4.99999)&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; math.fsum([.1,.2,5,45.2,-.054,.4]) **  Grąžina visų skliausteliuose esančių skaičių sumą. Funkcija ne visada tiksli **&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;50.846000000000004&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; math.isfinite(3) ** Grąžina &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt;, jei reikšmė nėra begalinė ar NaN. Kitu atveju, grąžina &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt;. **&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;True&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Įvadas į objektinį programavimą Python 3 |next=Duomenų tyryba ir informacija}}&lt;br /&gt;
[[Category:Python Vadovėlis]]&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Duomen%C5%B3_tyryba_ir_informacija&amp;diff=333</id>
		<title>Vadovėlis/Duomenų tyryba ir informacija</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Duomen%C5%B3_tyryba_ir_informacija&amp;diff=333"/>
		<updated>2023-04-19T11:05:49Z</updated>

		<summary type="html">&lt;p&gt;Monika: Pridėta informacija&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Įvadas į importuotas bibliotekas ir kitas funkcijas|next=Pabaiga}}&lt;br /&gt;
==Dirbtinis intelektas==&lt;br /&gt;
&lt;br /&gt;
Dirbtinis intelektas (AI) sparčiai tampa integralia šiandienos technologijų dalimi ir planuojama, kad jis taps dar plačiau naudojamas ateityje. AI technologijos organizacijoms siūlo daugybę naudos, įskaitant pagerintą vertinimo tikslumą, didesnį darbo srauto greitį ir efektyvumą, geresnį klientų aptarnavimą, automatizuotus sprendimų priėmimo procesus, pagalbą spėjimo modeliams ir realiu laiku atliekamą analizę. AI taip pat gali pakeisti žmones atliekant nuobodžius, ar besikartojančius darbus, pvz., elektroninių laiškų rūšiavime ar paprastų duomenų įvedimo užduočių atlikime. Be to, jis kuria naujas darbo vietų galimybes žmonėms, kurie gali užtikrinti, kad AI technologijos veiktų teisingai.&lt;br /&gt;
&lt;br /&gt;
Tačiau šie privalumai nėra be rizikų. Yra įvairių etinių klausimų, susijusių su duomenų etiškumu, kai kuriamos jų AI; tai reikalauja asmenų su reikšmingu žinių lygiu, kad užtikrintų, jog AI technologijos būtų kuriamos teisingai.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Kriptografinės sistemos==&lt;br /&gt;
&lt;br /&gt;
Kriptografija yra saugios komunikacijos mokslas, kuris naudojamas įvairiomis formomis nuo senovės laikų. Šiandien, kriptografinės sistemos yra neišvengiamos mūsų modernioje pasaulyje. Jos padeda apsaugoti viską nuo internetinių finansinių sandorių iki asmeninių medicininių įrašų. Kaip technologijos tobulėja, kriptografija ir susijusios sistemos yra kuriamos ir tobulinamos, kad duomenys būtų saugūs ir apsaugoti. &lt;br /&gt;
&lt;br /&gt;
Simetrinė ir asimetrinė kodavimo technologijos yra du skirtingi kodavimo būdai, naudojami kriptografijoje ir duomenų saugumo srityse. Simetrinė kodavimo technologija naudojama efektyviai perdavimo duomenų šifruotai apsaugoti tarp dviejų šalių, o asimetrinis šifravimas leidžia suprasti perdavimo duomenis tik viena kryptimi, todėl ši technologija yra itin saugi.&lt;br /&gt;
Vienas iš paprastesnių simetrinio kodavimo pavyzdžių - &amp;quot;Atbash&amp;quot; kodavimas, kurio esmė yra pakeisti abėcėlės raides vietomis, t.y. pirmoji raidė tampa paskutine, antroji - priešpaskutine, ir taip toliau. Pvz., žinutė &amp;quot;LABAS&amp;quot; užšifruota &amp;quot;OZYZH&amp;quot;. Atkoduojant, tiesiog reikia pakeisti raidžių vietomis atgal, ir gautume pradinę žinutę &amp;quot;LABAS&amp;quot;. &lt;br /&gt;
Kalbant apie asimetrinį kodavimą, pavyzdys galėtų būti RSA kodavimas. Tai yra labai populiari viešojo raktų kriptografijos sistema, kuri naudoja matematinius algoritmus koduojant ir dekoduojant duomenis.&lt;br /&gt;
&lt;br /&gt;
Pavyzdžiui, norint užšifruoti pranešimą &amp;quot;LABAS&amp;quot;, reikia naudoti gavėjo viešąjį raktą, kuris gali būti naudojamas tik užšifruoti pranešimus, bet ne dekoduoti juos atgal į pradinę formą. Atkoduojant, naudojamas privatus raktas. Asimetrinis kodavimas yra sudėtingas procesas, reikalaujantis specialių žinių ir įrangos. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Viešai prieinami duomenys==&lt;br /&gt;
&lt;br /&gt;
Kadangi pasaulis tampa vis labiau orientuotas į duomenis, viešieji duomenys tapo neišvengiamu elementu, padedančiu suprasti, kaip žmonės, organizacijos ir vyriausybės tarpusavyje sąveikauja. Šie duomenys yra laisvai prieinami visuomenei, kad jie galėtų juos peržiūrėti ir analizuoti. Išnaudojus pažinimo procese gautus rezultatus, galime geriau suprasti tendencijas, modelius, koreliacijas ir ryšius tarp skirtingų subjektų.&lt;br /&gt;
&lt;br /&gt;
Viešieji duomenys yra informacijos lobis, kuris gali būti naudojamas priimant sprendimus sudėtinguose projektuose ir verslo operacijose. Strategiškai naudojantis šia informacija, verslai gali gauti nepakeičiamų žinių apie savo operacijas, taip pat pasiekti konkurencinį pranašumą savo pramonėje. Viešųjų duomenų analizė taip pat padeda atskleisti sukčiavimus ir netikslumus esamuose sistemose, kurie galėtų turėti rimtų padarinių visuomenei apskritai.&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Įvadas į importuotas bibliotekas ir kitas funkcijas|next=Pabaiga}}&lt;br /&gt;
[[Category:Python Vadovėlis]]&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Rekursin%C4%97s_funkcijos&amp;diff=332</id>
		<title>Vadovėlis/Rekursinės funkcijos</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Rekursin%C4%97s_funkcijos&amp;diff=332"/>
		<updated>2023-04-19T10:26:20Z</updated>

		<summary type="html">&lt;p&gt;Monika: Pridėtas pratimas su Fibonačio seka&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Funkcijų apibrėžimas |next=Sąrašai}}&lt;br /&gt;
&lt;br /&gt;
Vieniems šis skyrius gali pasirodyti naudingas, o kitiems - painus. Jeigu tau informacija pasirodys paini, tai nesuk galvos ir praleisk,  prie šio skyriaus galėsi grįžti šiek tiek vėliau. &lt;br /&gt;
&lt;br /&gt;
O dabar pabandom pasižiūrėti į klaidingai parašytą programą:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def manoFunkcija(): &lt;br /&gt;
    print(&amp;quot;labas&amp;quot;)&lt;br /&gt;
    manoFunkcija() # ojojoi!&lt;br /&gt;
&lt;br /&gt;
manoFunkcija()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tokia programa keletą kartų parašys žodį &amp;lt;code&amp;gt;labas&amp;lt;/code&amp;gt; ir tada &amp;lt;b&amp;gt;nuluš&amp;lt;/b&amp;gt;... tai yra, galiausiai išspausdins kokią nors mįslingą klaidą, kaip &amp;lt;code&amp;gt;RecursionError: maximum recursion depth exceeded&amp;lt;/code&amp;gt;. Kodėl?&lt;br /&gt;
&lt;br /&gt;
Priežastis ta, kad &amp;lt;code&amp;gt;manoFunkcija&amp;lt;/code&amp;gt; kiekvieną kartą kviečia save, tai yra, kviečia funkciją &amp;lt;code&amp;gt;manoFunkcija&amp;lt;/code&amp;gt;. O tada &amp;lt;code&amp;gt;manoFunkcija&amp;lt;/code&amp;gt; vėl kviečia save, tai yra &amp;lt;code&amp;gt;manoFunkcija&amp;lt;/code&amp;gt;. Ir taip be galo! &lt;br /&gt;
&lt;br /&gt;
Štai dar vienas panašus (irgi blogas) pavyzdys, pasižiūrėkim:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def pirmaFunkcija():&lt;br /&gt;
    print(&amp;quot;pirma&amp;quot;)&lt;br /&gt;
    antraFunkcija()&lt;br /&gt;
&lt;br /&gt;
def antraFunkcija(): &lt;br /&gt;
    print(&amp;quot;antra&amp;quot;)&lt;br /&gt;
    pirmaFunkcija() &lt;br /&gt;
&lt;br /&gt;
pirmaFunkcija()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vėl nulūš programa, vėl nutiks klaida &amp;lt;code&amp;gt;RecursionError&amp;lt;/code&amp;gt;. Priežastis ta pati: &amp;lt;code&amp;gt;pirmaFunkcija&amp;lt;/code&amp;gt; visuomet kviečia funkciją &amp;lt;code&amp;gt;antraFunkcija&amp;lt;/code&amp;gt;, o ši visuomet kviečia &amp;lt;code&amp;gt;pirmaFunkcija&amp;lt;/code&amp;gt;. Ir taip be galo! Nei iš vienos funkcijos niekuomet nėra grįžtama.&lt;br /&gt;
&lt;br /&gt;
Aš paprastai labai atsargiai žiūriu į funkcijas, kurios kviečia pačios save (tiesiogiai arba netiesiogiai), kaip kad pavyzdžiuose aukščiau.&lt;br /&gt;
&lt;br /&gt;
Tačiau iš tiesų net ir tokias funkcijas įmanoma panaudoti, nesugriaunant programos. Tiesiog tokia funkcija turi kažkada nustoti kviesti save, ir tiesiog grįžti (&amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Štai nenulūžtančios programos pavyzdys:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def manoFunkcija(skaitiklis): &lt;br /&gt;
    skaitiklis = skaitiklis + 1&lt;br /&gt;
    if skaitiklis &amp;gt; 3:&lt;br /&gt;
        return&lt;br /&gt;
    print(&amp;quot;labas&amp;quot;)&lt;br /&gt;
    manoFunkcija(skaitiklis) &lt;br /&gt;
&lt;br /&gt;
manoFunkcija(0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši programa žodį &amp;quot;labas&amp;quot; išspausdins tik 3 kartus, ir tada baigsis. Jokios klaidos. Ar supratai, kodėl?&lt;br /&gt;
&lt;br /&gt;
Parametras &amp;quot;skaitiklis&amp;quot; yra skirtas apsaugai nuo begalinio kartojimosi. Funkcija &amp;lt;code&amp;gt;manoFunkcija&amp;lt;/code&amp;gt; kiekvieną kartą stropiai pasitikslina, ar &amp;lt;code&amp;gt;skaitiklis&amp;lt;/code&amp;gt; neviršytas, ir kiekvieną kartą pasididina to skaitiklio reikšmę. Kai tik skaitiklis padidėjau daugiau, nei leidžiama, funkcija savęs nebekviečia - tiesiog grįžta.&lt;br /&gt;
&lt;br /&gt;
Taigi, nors funkcija ir kviečia pati save, bet ne begalinį kartų skaičų.&lt;br /&gt;
&lt;br /&gt;
==== Rekursija ====&lt;br /&gt;
Funkcijos, kurios kreipiasi pačios į save yra vadinamos rekursinėmis funkcijomis. Šio skyriaus pavyzdžiuose panagrinėsime tokias funkcijas. Tai palengvina programavimo užduočių spendimų įgyvendinimą, nes kartais pakanka apsvarstyti tik vieną problemos žingsnį, o ne visą problemą iš karto. Be to tai leidžia išreikšti kai kurias matematines sąvokas paprastu, lengvai skaitomu kodu.&lt;br /&gt;
&lt;br /&gt;
Bet kokią problemą, kurią galime išspręsti naudojant rekursiją, gali būti išspręsta naudojant ciklus. Jie veikia greičiau, bet kartais ciklus sunku atlikti teisingai.&lt;br /&gt;
&lt;br /&gt;
Turbūt intuityviausias „rekursijos“ apibrėžimas yra toks:&lt;br /&gt;
  REKURSIJA&lt;br /&gt;
     Jei vis dar nesupranti, tai skaityk: REKURSIJA.&lt;br /&gt;
Pabandyk perskaityti dar kelis pavyzdžius.&lt;br /&gt;
&lt;br /&gt;
=== Pavyzdžiai ===&lt;br /&gt;
&#039;&#039;&#039;atgalinis_skaičiavimas.py&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def atgalinis_skaičiavimas(n):&lt;br /&gt;
    print(n)&lt;br /&gt;
    if n &amp;gt; 0:&lt;br /&gt;
        return atgalinis_skaičiavimas(n-1)&lt;br /&gt;
&lt;br /&gt;
atgalinis_skaičiavimas(5)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas:&lt;br /&gt;
 5&lt;br /&gt;
 4&lt;br /&gt;
 3&lt;br /&gt;
 2&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
&lt;br /&gt;
Šis pavyzdys labai panašus į ankstesnyjį, tik skaitiklis ne didėja, o mažėja. Rekursinė funkcija &amp;lt;code&amp;gt;atgalinis_skaičiavimas&amp;lt;/code&amp;gt; turi vidinę apsaugą nuo begalinio kartojimosi, tikrina kintamąjį &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; ir jį mažina, o nustoja save kvietinėti, kai &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; sumažėja iki nulio.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;sudetingas_pavyzdys.py&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def daug(a, b): # daug reiškia daugybą&lt;br /&gt;
    if b == 0:&lt;br /&gt;
        return 0&lt;br /&gt;
    lik = daug(a, b - 1) #lik reiškia likutį&lt;br /&gt;
    reikšmė = a + lik&lt;br /&gt;
    return reikšmė&lt;br /&gt;
&lt;br /&gt;
rezultatas = daug(3, 2)&lt;br /&gt;
print(&amp;quot;3 * 2 = &amp;quot;, rezultatas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Iš esmės ši programa - tai teigiamų sveikųjų skaičių daugyba (iš tikrųjų Python&#039;o programavimo kalboje daugybos funkcionalumas yra integruotas ir jo išradinėti nebūtina, tiesiog mes pabandėme suprogramuoti, kaip daugybą galima būtų pakeisti sudėties ir atimties veiksmais). &lt;br /&gt;
&lt;br /&gt;
; Kas nutinka, pirmą kartą iškvietus funkciją daug(3, 2)?&lt;br /&gt;
: Parametras &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; gauna jam priskirtą reikšmę 3, o parametras &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; - jam priskirtą reikšmę 2.&lt;br /&gt;
; Kas nutinka tada?&lt;br /&gt;
: Vykdoma eilutė &amp;lt;code&amp;gt;if b == 0:&amp;lt;/code&amp;gt;. Kadangi &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; reikšmė yra 2, todėl eilutė &amp;lt;code&amp;gt;return 0&amp;lt;/code&amp;gt; praleidžiama.&lt;br /&gt;
; Kas vyksta toliau?&lt;br /&gt;
: Vykdoma eilutė &amp;lt;code&amp;gt;lik = daug(a, b - 1)&amp;lt;/code&amp;gt;. Ši eilutė nustato lokalaus kintamojo &amp;lt;code&amp;gt;lik&amp;lt;/code&amp;gt; reikšmę į &amp;lt;code&amp;gt;daug(a, b - 1)&amp;lt;/code&amp;gt; reikšmę. &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; reikšmė yra 3, o &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; - 2, todėl funkcija kviečia funkciją &amp;lt;code&amp;gt;daug(3, 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
; Taigi kokia yra &amp;lt;code&amp;gt;daug(3, 1)&amp;lt;/code&amp;gt; reikšmė?&lt;br /&gt;
: Turime iškviesti funkciją &amp;lt;code&amp;gt;daug()&amp;lt;/code&amp;gt; su parametrais 3 ir 1.&lt;br /&gt;
; Kas nutinka toliau?&lt;br /&gt;
: Funkcijos viduje &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; reikšmė būtų 3, o &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; reikšmė – 1. Kadangi jie yra lokalūs kintamieji, todėl jie neturi įtakos ankstesnėms &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; reikšmėms.&lt;br /&gt;
; Kas įvyksta toliau?&lt;br /&gt;
: Kadangi &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; turi reikšmę 1, if sąlygos rezultatas yra neigiamas, todėl vykdoma kita eilutė &amp;lt;code&amp;gt;lik = daug(a, b - 1)&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Ką daro ši eilutė?&lt;br /&gt;
: Dabar kintamajam &amp;lt;code&amp;gt;lik&amp;lt;/code&amp;gt; priskiriam funkcijos &amp;lt;code&amp;gt;daug(3, 0)&amp;lt;/code&amp;gt; reikšmė.&lt;br /&gt;
; Kokia ši reikšmė?&lt;br /&gt;
: Norėdami tai išsiaiškinti, turime dar kartą paleisti funkciją. Šį kartą &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; reikšmė yra 3, o &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; – 0.&lt;br /&gt;
; Kas vyksta toliau?&lt;br /&gt;
: Pirmoji vykdytinos funkcijos eilutė yra &amp;lt;code&amp;gt;if b == 0:&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; reikšmė 0, todėl kita vykdoma eilutė yra &amp;lt;code&amp;gt;return 0&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką daro &amp;lt;code&amp;gt;return 0&amp;lt;/code&amp;gt; eilutė?&lt;br /&gt;
: Ši eilutė grąžina funkcijos reikšmę lygią 0 į tą vietą, kur ji buvo iškviesta.&lt;br /&gt;
; Kas iš to?&lt;br /&gt;
: Dabar mes žinome, kad &amp;lt;code&amp;gt;daug(3, 0)&amp;lt;/code&amp;gt; grąžina reikšmę 0. Dar žinome, ką daro eilutė &amp;lt;code&amp;gt;lik = daug(a, b - 1)&amp;lt;/code&amp;gt;, nes paleidžiame funkciją &amp;lt;code&amp;gt;daug()&amp;lt;/code&amp;gt; su parametrais 3 ir 0. Baigiame vykdyti &amp;lt;code&amp;gt;daug(3, 0)&amp;lt;/code&amp;gt; ir dabar vėl pradedame vykdyti &amp;lt;code&amp;gt;daug(3, 1)&amp;lt;/code&amp;gt;. Kintamajam &amp;lt;code&amp;gt;lik&amp;lt;/code&amp;gt; priskiriama reikšmė yra 0.&lt;br /&gt;
; Kurią eilutę kompiuteris skaito po to?&lt;br /&gt;
: Toliau vykdoma eilutė &amp;lt;code&amp;gt;reikšmė = a + lik&amp;lt;/code&amp;gt;. Žinome, kad &amp;lt;code&amp;gt;a = 3&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;lik = 0&amp;lt;/code&amp;gt; todėl dabar &amp;lt;code&amp;gt;reikšmė = 3&amp;lt;/code&amp;gt;. &lt;br /&gt;
; Kas nutinka toliau?&lt;br /&gt;
: Vykdoma eilutė &amp;lt;code&amp;gt;return reikšmė&amp;lt;/code&amp;gt;, kuri grąžina reikšmę 3. Šis skaičius atsiranda iš funkcijos &amp;lt;code&amp;gt;daug (3, 1)&amp;lt;/code&amp;gt; vykdymo. Iškvietus &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt;, grįžtame prie &amp;lt;code&amp;gt;daug(3, 2)&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Kur yra &amp;lt;code&amp;gt;daug(3, 2)&amp;lt;/code&amp;gt;?&lt;br /&gt;
: Mes turėjome kintamuosius &amp;lt;code&amp;gt;a = 3&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;b = 2&amp;lt;/code&amp;gt; ir nagrinėjome eilutę &amp;lt;code&amp;gt;lik = daug(a, b - 1)&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Kas įvyksta?&lt;br /&gt;
: Kintamajam &amp;lt;code&amp;gt;lik&amp;lt;/code&amp;gt; priskiriama reikšmė 3. Kita eilutė &amp;lt;code&amp;gt;reikšmė = a + lik&amp;lt;/code&amp;gt; priskiria kintamajam &amp;lt;code&amp;gt;reikšmė&amp;lt;/code&amp;gt; reikšmę &amp;lt;code&amp;gt;3 + 3&amp;lt;/code&amp;gt; arba 6.  &lt;br /&gt;
; Kas įvyksta toliau?&lt;br /&gt;
: Pradedama vykdyti kita eilutė, kuri grąžina 6 iš funkcijos. Tuomet grįžtame prie eilutės &amp;lt;code&amp;gt;rezultatas = daug(3, 2)&amp;lt;/code&amp;gt;, kur kintamajam &amp;lt;code&amp;gt;rezultatas&amp;lt;/code&amp;gt; dabar priskiriama reikšmė 6 &lt;br /&gt;
; Kas nutinka toliau?  &lt;br /&gt;
: Paleidžiama kita eilutė po funkcijos &amp;lt;code&amp;gt;print (&amp;quot;3 * 2 =&amp;quot;, rezultatas)&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Ji spausdina &amp;lt;code&amp;gt;3 * 2 =&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;rezultatas&amp;lt;/code&amp;gt; reikšmę, kuri yra 6. Visa išspausdinta eilutė yra &amp;lt;code&amp;gt;3 * 2 = 6&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Taigi, kas čia įvyko apskritai?  &lt;br /&gt;
: Iš esmės panaudojome du skirtingus faktus, kad apskaičiuotume dviejų skaičių kartotinį. Pirmas, kad bet koks skaičius padauginus iš nulio yra nulis &amp;lt;code&amp;gt;(x * 0 = 0)&amp;lt;/code&amp;gt;. Antras, kad skaičius padaugintas iš kito skaičiaus yra lygus pirmo skaičiaus ir pirmo bei vienetu mažesnio už antrąjį sandaugos sumai &amp;lt;code&amp;gt;(x * y = x + x * (y - 1))&amp;lt;/code&amp;gt;. Taigi ir čia &amp;lt;code&amp;gt;3 * 2&amp;lt;/code&amp;gt; pirmiausiai paverčiamas į &amp;lt;code&amp;gt;3 + 3 * 1&amp;lt;/code&amp;gt;. Tada &amp;lt;code&amp;gt;3 * 1&amp;lt;/code&amp;gt; paverčiamas į &amp;lt;code&amp;gt;3 + 3 * 0&amp;lt;/code&amp;gt;. Tuomet mes žinome, kad bet kuris skaičius padaugintas iš nulio yra nulis, todėl &amp;lt;code&amp;gt;3 * 0&amp;lt;/code&amp;gt; yra 0. Kai viskas surašoma vienoje eilutėje, gauname &amp;lt;code&amp;gt;3 + 3 + 0 &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Štai kaip viskas veikia:&lt;br /&gt;
&lt;br /&gt;
 daug(3, 2)&lt;br /&gt;
 3 + daug(3, 1)&lt;br /&gt;
 3 + 3 + daug(3, 0)&lt;br /&gt;
 3 + 3 + 0&lt;br /&gt;
 3 + 3&lt;br /&gt;
 6&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;faktorialas.py&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def faktorialas(n):&lt;br /&gt;
    if n == 0:&lt;br /&gt;
        return 1&lt;br /&gt;
    if n &amp;lt; 0:&lt;br /&gt;
        return &amp;quot;Klaida, neigiami skaičiai neturi faktorialo reikšmių!!&amp;quot;&lt;br /&gt;
    return n * faktorialas(n - 1)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;2! =&amp;quot;, faktorialas(2))&lt;br /&gt;
print(&amp;quot;3! =&amp;quot;, faktorialas(3))&lt;br /&gt;
print(&amp;quot;4! =&amp;quot;, faktorialas(4))&lt;br /&gt;
print(&amp;quot;5! =&amp;quot;, faktorialas(5))&lt;br /&gt;
print(&amp;quot;-3! =&amp;quot;, faktorialas(-3))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas:&lt;br /&gt;
 &lt;br /&gt;
 2! = 2&lt;br /&gt;
 3! = 6&lt;br /&gt;
 4! = 24&lt;br /&gt;
 5! = 120&lt;br /&gt;
 -3! = Klaida, neigiami skaičiai neturi faktorialo reikšmių!!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Dabar pabandyk žodį &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;(lietuviškai jei) pakeisti žodžiu &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; (lietuviškai kol). Pamatysi, kad kompiuteris pavirto skaičiuotuvu, kuris negali suskaičiuoti iki keturių. Iš esmės &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;(kol) veikia kaip &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; (jei) ir &amp;lt;code&amp;gt;repeat&amp;lt;/code&amp;gt;(angl. pakartok) kartu sudėjus.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
1. Parašyk programą, kuri paprašytų vartotojo įvesti skaičių ir laipsnį. Naudodamas rekursija, atspausdink skaičių pakelta duotuoju laipsniu. (Pvz: 2&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;=8)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
rezultatas = int()&lt;br /&gt;
&lt;br /&gt;
def keltiLaipsniu(skaičius, laipsnis):&lt;br /&gt;
    if laipsnis == 0:&lt;br /&gt;
        return 1&lt;br /&gt;
    return skaičius * keltiLaipsniu(skaičius, laipsnis - 1)&lt;br /&gt;
&lt;br /&gt;
rezultatas = keltiLaipsniu(2, 3)&lt;br /&gt;
&lt;br /&gt;
print(rezultatas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Parašyk programą, kuri prašo vartotojo įvesti skaičių ir grąžina sumą nuo 1 iki to skaičiaus. Pavyzdžiui, jei įvedamas skaičius 5, programa grąžina 5 + 4 + 3 + 2 + 1 = &#039;&#039;&#039;15&#039;&#039;&#039;. Nepamiršk naudoti rekursijos.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def suma_iki_vieno(skaičius, suma):&lt;br /&gt;
    if skaičius == 0:&lt;br /&gt;
        return suma&lt;br /&gt;
    else:&lt;br /&gt;
        return skaičius + suma_iki_vieno(skaičius - 1, suma)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
įvestas_skaičius = int(input(&amp;quot;Įvesk skaičių: &amp;quot;))&lt;br /&gt;
rezultatas = suma_iki_vieno(įvestas_skaičius, 0)&lt;br /&gt;
print (&amp;quot;Suma nuo 1 iki&amp;quot;, įvestas_skaičius, &#039;:&#039;, rezultatas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Parašyk programą, kuri išveda Fibonačio seką iki įvesto skaičiaus &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Fibonačio seka - tai tokia sveikųjų skaičių seka, kur kiekvienas skaičius yra lygus prieš jį buvusių skaičių sumai. Pirmieji sekos skaičiai: 0 1 1 2 3 5 8 13 21 ir t.t.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def fibonači(n):&lt;br /&gt;
    if n &amp;lt;= 1:&lt;br /&gt;
        return n&lt;br /&gt;
    else:&lt;br /&gt;
        return fibonači(n-1) + fibonači(n-2)&lt;br /&gt;
&lt;br /&gt;
įvestas_skaičius = int(input(&amp;quot;Įvesk skaičių: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
for i in range(įvestas_skaičius):&lt;br /&gt;
    print(fibonači(i))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Parašyk programą, kuri prašo vartotojo įvesti žodį ir grąžina tą žodį parašytą iš kitos pusės. Pvz “Labas” = “sabaL”. Šios užduoties sprendimui tau prireiks [[Vadovėlis/Daugiau apie sąrašus|daugiau žinių apie sąrašus]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def apversk(žodis):&lt;br /&gt;
    if len(žodis) == 0:&lt;br /&gt;
        return žodis&lt;br /&gt;
    else:&lt;br /&gt;
        return apversk(žodis[1:]) + žodis[0]&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
įvestas_žodis = input(&amp;quot;Įvesk žodį: &amp;quot;)&lt;br /&gt;
print(apversk(įvestas_žodis))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Funkcijų apibrėžimas |next=Sąrašai}}&lt;br /&gt;
[[Category:Python Vadovėlis]]&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Fail%C5%B3_tvarkymas&amp;diff=245</id>
		<title>Vadovėlis/Failų tvarkymas</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Fail%C5%B3_tvarkymas&amp;diff=245"/>
		<updated>2023-03-13T09:25:51Z</updated>

		<summary type="html">&lt;p&gt;Monika: Pridėta užduočių&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Daugiau apie tekstines eilutes |next=Siekiant tobulumo}}&lt;br /&gt;
{{BookCat}}&lt;br /&gt;
&lt;br /&gt;
=== Failų įvestis/išvestis ===&lt;br /&gt;
&lt;br /&gt;
Štai paprastas failo įvesties ir išvesties (I/O, ang. Input/Output) pavyzdys:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Rašyti į failą&lt;br /&gt;
with open(&amp;quot;testas.txt&amp;quot;, &amp;quot;wt&amp;quot;) as rašomas_failas:&lt;br /&gt;
    rašomas_failas.write(&amp;quot;Šis tekstas bus išsiųstas į failą\nPažiūrėk ir pamatysi!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Skaityti failą&lt;br /&gt;
with open(&amp;quot;testas.txt&amp;quot;, &amp;quot;rt&amp;quot;) as skaitomas_failas:&lt;br /&gt;
    tekstas = skaitomas_failas.read()&lt;br /&gt;
&lt;br /&gt;
print(tekstas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Failo &amp;lt;code&amp;gt;testas.txt&amp;lt;/code&amp;gt; išvestis ir turinys yra:&lt;br /&gt;
&lt;br /&gt;
 Šis tekstas bus išsiųstas į failą&lt;br /&gt;
 Pažiūrėk ir pamatysi!&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad programa sukūrė failą pavadinimu &amp;lt;code&amp;gt;testas.txt&amp;lt;/code&amp;gt; kataloge, iš kurio paleidai programą.  Eilutėje esantis &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; nurodo Python&#039;ui toje vietoje peršokti į naują eilutę.  &lt;br /&gt;
&lt;br /&gt;
Apžvelkime visus veiksmus su failais:&lt;br /&gt;
* Gauk failo objektą su funkcija &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;&lt;br /&gt;
* Skaityk iš arba rašyk į failo objektą (priklausomai nuo to, kokiu režimu jis buvo atidarytas)&lt;br /&gt;
* Jeigu failui atidaryti nenaudojai funkcijos &amp;lt;code&amp;gt;with&amp;lt;/code&amp;gt;, turėsi jį uždaryti rankiniu būdu&lt;br /&gt;
&lt;br /&gt;
Pirmas žingsnis yra gauti failo objektą. Tai galima padaryti naudojant funkciją &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;. Formatas yra &amp;lt;code&amp;gt;failo_objektas = open(failo_pavadinimas, režimas)&amp;lt;/code&amp;gt;, kur &amp;lt;code&amp;gt;failo_objektas&amp;lt;/code&amp;gt; yra kintamasis, į kurį reikia įdėti failo objektą, &amp;lt;code&amp;gt;failo_pavadinimas&amp;lt;/code&amp;gt; yra eilutė su failo pavadinimu, o &amp;lt;code&amp;gt;režimas&amp;lt;/code&amp;gt; yra &amp;lt;code&amp;gt;&amp;quot;rt&amp;quot;&amp;lt;/code&amp;gt;, kad (ang. &#039;&#039;r&#039;&#039;ead) skaityti failą kaip &#039;&#039;t&#039;&#039;ekstą arba &amp;lt;code&amp;gt;&amp;quot;wt&amp;quot;&amp;lt;/code&amp;gt; (&#039;&#039;w&#039;&#039;rite) rašytį į failą kaip &#039;&#039;t&#039;&#039;ekstą (ir keletą kitų režimų, kuriuos čia praleisime). Toliau galima iškviesti failų objektų funkcijas. Dvi dažniausiai naudojamos funkcijos yra &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; (skaityti) ir &amp;lt;code&amp;gt;write&amp;lt;/code&amp;gt; (rašyti). Funkcija &amp;lt;code&amp;gt;write&amp;lt;/code&amp;gt; prideda eilutę prie failo pabaigos. Funkcija &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; nuskaito failo turinį ir grąžina jį kaip eilutę (kaip padaryta pavyzdyje). &lt;br /&gt;
&lt;br /&gt;
O dabar čia yra nauja telefono numerių programos versija, kurią jau sukūrei anksčiau:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def spausdink_numerius(numeriai):&lt;br /&gt;
    print(&amp;quot;Telefono numeriai:&amp;quot;)&lt;br /&gt;
    for k, v in numeriai.items():&lt;br /&gt;
        print(&amp;quot;Vardas:&amp;quot;, k, &amp;quot;\tTelefono numeris:&amp;quot;, v)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
def pridėk_numerį(numeriai, vardas, numeris):&lt;br /&gt;
    numeriai[vardas] = numeris&lt;br /&gt;
&lt;br /&gt;
def surask_numerį(numeriai, vardas):&lt;br /&gt;
    if vardas in numeriai:&lt;br /&gt;
        return &amp;quot;Telefono numeris yra &amp;quot; + numeriai[vardas]&lt;br /&gt;
    else:&lt;br /&gt;
        return vardas + &amp;quot; nebuvo rastas&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def pašalink_numerį(numeriai, vardas):&lt;br /&gt;
    if vardas in numeriai:&lt;br /&gt;
        del numeriai[vardas]&lt;br /&gt;
    else:&lt;br /&gt;
        print(vardas,&amp;quot; nebuvo rastas&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def įkelti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    skaitymo_failas = open(failo_pavadinimas, &amp;quot;rt&amp;quot;)&lt;br /&gt;
    while True:&lt;br /&gt;
        skaitoma_eilutė = skaitymo_failas.readline()&lt;br /&gt;
        if not skaitoma_eilutė:&lt;br /&gt;
            break&lt;br /&gt;
        skaitoma_eilutė = skaitoma_eilutė[:-1]&lt;br /&gt;
        vardas, numeris = skaitoma_eilutė.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
        numeriai[vardas] = numeris&lt;br /&gt;
    skaitymo_failas.close()&lt;br /&gt;
&lt;br /&gt;
def išsaugoti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    išvesties_failas = open(failo_pavadinimas, &amp;quot;wt&amp;quot;)&lt;br /&gt;
    for k, v in numeriai.items():&lt;br /&gt;
        išvesties_failas.write(k + &amp;quot;,&amp;quot; + v + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    išvesties_failas.close()&lt;br /&gt;
&lt;br /&gt;
def spausdink_meniu():&lt;br /&gt;
    print(&#039;1. Spausdink telefonų numerius&#039;)&lt;br /&gt;
    print(&#039;2. Pridėk telefono numerį&#039;)&lt;br /&gt;
    print(&#039;3. Pašalink telefono numerį&#039;)&lt;br /&gt;
    print(&#039;4. Ieškok telefono numerio&#039;)&lt;br /&gt;
    print(&#039;5. Įkelk telefono numerius&#039;)&lt;br /&gt;
    print(&#039;6. Išsaugok telefono numerius&#039;)&lt;br /&gt;
    print(&#039;7. Išeik&#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
numeriai = {}&lt;br /&gt;
meniu_pasirinkimas = 0&lt;br /&gt;
spausdink_meniu()&lt;br /&gt;
while True:&lt;br /&gt;
    meniu_pasirinkimas = int(input(&amp;quot;Įvesk skaičių (1-7): &amp;quot;))&lt;br /&gt;
    if meniu_pasirinkimas == 1:&lt;br /&gt;
        spausdink_numerius(numeriai)&lt;br /&gt;
    elif meniu_pasirinkimas == 2:&lt;br /&gt;
        print(&amp;quot;Pridėk vardą ir telefono numerį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        numeris = input(&amp;quot;Telefono numeris: &amp;quot;)&lt;br /&gt;
        pridėk_numerį(numeriai, vardas, numeris)&lt;br /&gt;
    elif meniu_pasirinkimas == 3:&lt;br /&gt;
        print(&amp;quot;Pašalink vardą ir telefono numerį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        pašalink_numerį(numeriai, vardas)&lt;br /&gt;
    elif meniu_pasirinkimas == 4:&lt;br /&gt;
        print(&amp;quot;Ieškok telefono numerio&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        print(surask_numerį(numeriai, vardas))&lt;br /&gt;
    elif meniu_pasirinkimas == 5:&lt;br /&gt;
        failo_pavadinimas = input(&amp;quot;Failo pavadinimas, kurį nori įkelti: &amp;quot;)&lt;br /&gt;
        įkelti_numerius(numeriai, failo_pavadinimas)&lt;br /&gt;
    elif meniu_pasirinkimas == 6:&lt;br /&gt;
        failo_pavadinimas = input(&amp;quot;Failo pavadinimas išsaugojimui: &amp;quot;)&lt;br /&gt;
        išsaugoti_numerius(numeriai, failo_pavadinimas)&lt;br /&gt;
    elif meniu_pasirinkimas == 7:&lt;br /&gt;
        break&lt;br /&gt;
    else:&lt;br /&gt;
        spausdink_meniu()&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Viso!&amp;quot;)  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gali pastebėti, kad dabar kodas papildomai išsaugo ir perskaito failus. Štai dviejų programos vykdymų išvestis:&lt;br /&gt;
&lt;br /&gt;
 1. Spausdink telefonų numerius&lt;br /&gt;
 2. Pridėk telefono numerį&lt;br /&gt;
 3. Pašalink telefono numerį&lt;br /&gt;
 4. Ieškok telefono numerio&lt;br /&gt;
 5. Įkelk telefono numerius&lt;br /&gt;
 6. Išsaugok telefono numerius&lt;br /&gt;
 7. Išeik&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Liepa&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeris: &#039;&#039;&#039;1234&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Benas&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeris: &#039;&#039;&#039;4321&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeriai:&lt;br /&gt;
 Vardas: Liepa     Telefono numeris: 1234&lt;br /&gt;
 Vardas: Benas     Telefono numeris: 4321&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
 Failo pavadinimas išsaugojimui: &#039;&#039;&#039;numeriai.txt&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;7&#039;&#039;&#039;&lt;br /&gt;
 Viso!&lt;br /&gt;
&lt;br /&gt;
 1. Spausdink telefonų numerius&lt;br /&gt;
 2. Pridėk telefono numerį&lt;br /&gt;
 3. Pašalink telefono numerį&lt;br /&gt;
 4. Ieškok telefono numerio&lt;br /&gt;
 5. Įkelk telefono numerius&lt;br /&gt;
 6. Išsaugok telefono numerius&lt;br /&gt;
 7. Išeik&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
 Failo pavadinimas, kurį nori įkelti: &#039;&#039;&#039;numeriai.txt&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeriai:&lt;br /&gt;
 Vardas: Liepa     Telefono numeris: 1234&lt;br /&gt;
 Vardas: Benas     Telefono numeris: 4321&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;7&#039;&#039;&#039;&lt;br /&gt;
 Viso!&lt;br /&gt;
&lt;br /&gt;
Naujos šios programos dalys yra:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def įkelti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    skaitymo_failas = open(failo_pavadinimas, &amp;quot;rt&amp;quot;)&lt;br /&gt;
    while True:&lt;br /&gt;
        skaitoma_eilutė = skaitymo_failas.readline()&lt;br /&gt;
        if not skaitoma_eilutė:&lt;br /&gt;
            break&lt;br /&gt;
        skaitoma_eilutė = skaitoma_eilutė[:-1]&lt;br /&gt;
        vardas, numeris = skaitoma_eilutė.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
        numeriai[vardas] = numeris&lt;br /&gt;
    skaitymo_failas.close()&lt;br /&gt;
&lt;br /&gt;
def išsaugoti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    išvesties_failas = open(failo_pavadinimas, &amp;quot;wt&amp;quot;)&lt;br /&gt;
    for k, v in numeriai.items():&lt;br /&gt;
        išvesties_failas.write(k + &amp;quot;,&amp;quot; + v + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    išvesties_failas.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pirmiausia pažiūrėk į programos išsaugojimo dalį. Visų pirma, sukuriamas failo objektas su komanda &amp;lt;code&amp;gt;open(failo_pavadinimas, &amp;quot;wt&amp;quot;)&amp;lt;/code&amp;gt;. Toliau sukuriama eilutė kiekvienam telefono numeriui su komanda &amp;lt;code&amp;gt;išvesties_failas.write(k + &amp;quot;,&amp;quot; + v + &amp;quot;\n&amp;quot;)&amp;lt;/code&amp;gt;. Tai išrašo eilutę, kurioje yra vardas, kablelis, telefono numeris, o po jos rašoma nauja eilutė.&lt;br /&gt;
&lt;br /&gt;
Failo skaitymo dalis yra šiek tiek sudėtingesnė. Ji prasideda failo objekto gavimu. Tada ji naudoja &amp;lt;code&amp;gt;while True:&amp;lt;/code&amp;gt; ciklą, kad tęstųsi ciklas tol, kol bus aptikta komanda &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt;. Komanda &amp;lt;code&amp;gt;skaitoma_eilutė = skaitymo_failas.readline()&amp;lt;/code&amp;gt; perskaito pirmą eilutę ir priskiria kintamajam &amp;lt;code&amp;gt;skaitome_eilutė&amp;lt;/code&amp;gt;. Pasiekus failo pabaigą, funkcija &amp;lt;code&amp;gt;readline&amp;lt;/code&amp;gt; grąžins tuščią eilutę. Sąlyginis sakinys &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; tai patikrina ir panaudojant komandą &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt; nutraukia &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; ciklą. Funkcija &amp;lt;code&amp;gt;readline&amp;lt;/code&amp;gt; perskaito ir grąžina vieną eilutę kartu su jos pabaigos simboliu. Tai yra tam, kad būtų galima spręsti ar tai yra tik tuščia eilutė, ar jau failo pabaiga. Taigi turime atsikratyti to paskutinio eilutės pabaigos simbolio. Komanda &amp;lt;code&amp;gt;skaitoma_eilutė = skaitoma_eilutė[:-1]&amp;lt;/code&amp;gt; tai padaro už mus, išmesdama paskutinį simbolį. Toliau eilutė &amp;lt;code&amp;gt;vardas, numeris = skaitoma_eilutė.split(&amp;quot;,&amp;quot;)&amp;lt;/code&amp;gt; padalija eilutę ties kableliu į vardą ir telefono numerį ir visa tai įtraukiama į &amp;lt;code&amp;gt;numeriai&amp;lt;/code&amp;gt; žodyną.&lt;br /&gt;
&lt;br /&gt;
=== Darbo su failais rėžimai ===&lt;br /&gt;
Be &amp;lt;code&amp;gt;&amp;quot;rt&amp;quot;&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;&amp;quot;wt&amp;quot;&amp;lt;/code&amp;gt; yra ir kitų darbo su failais rėžimų. Lentelėje rasi visų rėžimų sąrašą:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Rėžimas&lt;br /&gt;
!Paaiškinimas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;rt&amp;quot;&lt;br /&gt;
|Tekstinio failo nuskatymas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;wt&amp;quot;&lt;br /&gt;
|Teksto rašymas į failą&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;xt&amp;quot;&lt;br /&gt;
|Naujo teskinio failo kūrimas. Jei toks failas jau egzistuoja bus gaunama klaida&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;at&amp;quot;&lt;br /&gt;
|Tekstinio failo papildymas. Failo turinys bus pildomas nuo edamo failo pabaigos&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;r&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;rt&amp;quot; rėžimui. Tekstinio failo nuskatymas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;w&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;w&amp;quot; rėžimui. Teksto rašymas į failą&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;x&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;x&amp;quot; rėžimui. Naujo teskinio failo kūrimas. Jei toks failas jau egzistuoja bus gaunama klaida&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;a&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;a&amp;quot; rėžimui. Tekstinio failo papildymas. Failo turinys bus pildomas nuo edamo failo pabaigos&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;rb&amp;quot;&lt;br /&gt;
|Dvejetainio duomenų failo nuskatymas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;wb&amp;quot;&lt;br /&gt;
|Dvejetainės informacijos rašymas į failą&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;xb&amp;quot;&lt;br /&gt;
|Naujo dvejetainio failo kūrimas. Jei toks failas jau egzistuoja bus gaunama klaida&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;ab&amp;quot;&lt;br /&gt;
|Dvejetainio failo papildymas. Failo turinys bus pildomas nuo edamo failo pabaigos&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;r+&amp;quot;&lt;br /&gt;
|Tekstinio failo skaitymas ir rašymas. Esamas failo turinys nėra išvalomas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;w+&amp;quot;&lt;br /&gt;
|Tekstinio failo skaitymas ir rašymas. Esamas failo turinys yra išvalomas rašant į failą.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;r+b&amp;quot;&lt;br /&gt;
|Dvejetainio failo skaitymas ir rašymas. Esamas failo turinys nėra išvalomas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;w+b&amp;quot;&lt;br /&gt;
|Dvejetainio failo skaitymas ir rašymas. Esamas failo turinys yra išvalomas rašant į failą.&lt;br /&gt;
|}&lt;br /&gt;
Dvvejetainiai rėžimai šiame vadovėlyje plačiau nagrinėjami nėra&lt;br /&gt;
&lt;br /&gt;
=== Pagrindinės darbo su tekstiniais failais operacijos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Operacija&lt;br /&gt;
!Paaiškinimas&lt;br /&gt;
|-&lt;br /&gt;
|failas.read()&lt;br /&gt;
|Nuskaitomas visas failo turinys&lt;br /&gt;
|-&lt;br /&gt;
|failas.read(kiek)&lt;br /&gt;
|Nuskaitomas nuordytas simbolių kiekis iš failo. Pvz naudojant failas.read(3) bus nuskaitomi 3 sekantys simboliai&lt;br /&gt;
|-&lt;br /&gt;
|failas.readline()&lt;br /&gt;
|Nuskaitoma sekanti failo eilutė&lt;br /&gt;
|-&lt;br /&gt;
|failas.readlines()&lt;br /&gt;
|Nuskaitomos visos failo eilutės. Gražinamas sąrašas sudarytas iš teksto eilučių&lt;br /&gt;
|-&lt;br /&gt;
|failas.close()&lt;br /&gt;
|Failo uždarymas. Uždarius failą veiksmai su juo negalimi. Atidarant failą naudojant with funkciją, jis bus uždarytas automatiškai, tad close() naudoti nebereikia&lt;br /&gt;
|-&lt;br /&gt;
|failas.write(rašomas_tesktas)&lt;br /&gt;
|Įrašo nurodytą tekstą į failą.&lt;br /&gt;
|-&lt;br /&gt;
|failas.writelines(rašomo_teksto_eilučių_sąrašas)&lt;br /&gt;
|Sąrašas sudarytas iš teskto eilučių yra įrašomas į failą. Kiekvienas sąrašo elementas bus įrašomas naujoje eilutėje&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pažangesnis .txt failų naudojimas ===&lt;br /&gt;
&lt;br /&gt;
Galbūt tau kyla toks klausimas: „Aš žinau, kaip skaityti ir rašyti tekstinį failą, bet ką daryti, jei noriu atspausdinti failą spausdintuvu?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Yra keletas skirtingų būdų, kaip tai padaryti. Iš tikrųjų, pats lengviausias būdas yra atidaryti kitą programą, tada leisti viskuo pasirūpinti Python&#039;o kodui, kad tau nereikėtų pačiam failo atidarinėti ir spausdinti. Šis metodas apima kitos programos subproceso (arba antrinis procesas; biblioteka &#039;subprocess&#039;) iškvietimą. &lt;br /&gt;
&lt;br /&gt;
Prisimeni failą, į kurį įrašėme išvestį aukščiau esančioje programoje? Panaudokime tą failą.&lt;br /&gt;
Turėk omenyje, kad norint išvengti klaidų, ši programa naudoja sąvokas iš kito skyriaus. Nedvejodamas gali dar kartą peržiūrėti šį pavyzdį po kito skyriaus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import subprocess&lt;br /&gt;
def pagrindinis():&lt;br /&gt;
    try:&lt;br /&gt;
        print(&amp;quot;Ši maža programa iškviečia spausdinimo funkciją Notepad programoje&amp;quot;)&lt;br /&gt;
        #Atspausdinkime failą, kurį sukūrėme aukščiau esančioje programoje&lt;br /&gt;
        subprocess.call([&#039;notepad&#039;,&#039;/p&#039;,&#039;numeriai.txt&#039;])&lt;br /&gt;
    except WindowsError:&lt;br /&gt;
        print(&amp;quot;Pakviesto subproceso nėra arba jo negalima iškviesti.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
pagrindinis()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;subprocess.call&amp;lt;/code&amp;gt; turi tris argumentus. Pirmasis argumentas šio pavyzdžio kontekste turėtų būti programos pavadinimas, iš kurios nori iškviesti spausdinimo subprocesą. Antrasis argumentas turėtų būti konkretus tos programos subprocesas. Kad būtų paprasčiau, tiesiog suprask, kad šioje programoje &amp;lt;code&amp;gt;&#039;/p&#039;&amp;lt;/code&amp;gt; yra subprocesas, naudojamas norint pasiekti spausdintuvą per nurodytą programą. Paskutinis argumentas turėtų būti failo pavadinimas, kurį norite siųsti į spausdinimo subprocesą. Šiuo atveju tai yra tas pats failas, naudotas anksčiau šiame skyriuje.&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
1. Parašyk programą, kuri suskaičiuotų, kiek faile yra eilučių.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
failas = input(&amp;quot;Kokio failo eilutes skaičiuoti? &amp;quot;)&lt;br /&gt;
įvesties_failas = open(failas, &amp;quot;r&amp;quot;)&lt;br /&gt;
eilutės = įvesties_failas.readlines()&lt;br /&gt;
įvesties_failas.close()&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Failas&amp;quot;, failas, &amp;quot;turi&amp;quot;, len(eilutės), &amp;quot; eilutes&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Parašyk programą, kuri nukopijuotų vieno failo lygines eilutes į kitą failą.&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
įvesties_failo_pavadinimas = input(&amp;quot;Kokio failo eilutes kopijuoti? &amp;quot;)&lt;br /&gt;
įvesties_failas = open(įvesties_failo_pavadinimas, &amp;quot;r&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
išvesties_failo_pavadinimas = input(&amp;quot;Į kokį failą išsaugoti lygines eilutes? &amp;quot;)&lt;br /&gt;
išvesties_failas = open(išvesties_failo_pavadinimas, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
eilutės_numeris = 0&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    eilutė = įvesties_failas.readline()&lt;br /&gt;
    eilutės_numeris = eilutės_numeris + 1&lt;br /&gt;
    if not eilutė:&lt;br /&gt;
        break&lt;br /&gt;
    else:&lt;br /&gt;
        if (eilutės_numeris % 2) == 0:&lt;br /&gt;
            išvesties_failas.write(eilutė)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
įvesties_failas.close()&lt;br /&gt;
išvesties_failas.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Dabar pakeisk pažymių programą iš skyriaus [[Vadovėlis/Žodynai|Žodynai]], kad ji naudotų failus mokinių pažymiams saugoti.&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
užduotys = [&#039;nd sk 1&#039;, &#039;nd sk 2&#039;, &#039;viktorina   &#039;, &#039;nd sk 3&#039;, &#039;testas&#039;]&lt;br /&gt;
mokiniai = { }&lt;br /&gt;
&lt;br /&gt;
def įkelti_pažymius(pažymių_failas):&lt;br /&gt;
    įvesties_failas = open(pažymių_failas, &amp;quot;r&amp;quot;)&lt;br /&gt;
    pažymiai = [ ]&lt;br /&gt;
    while True:&lt;br /&gt;
        mokinys_ir_pažymys = įvesties_failas.readline()&lt;br /&gt;
        mokinys_ir_pažymys = mokinys_ir_pažymys[:-1]&lt;br /&gt;
        if not mokinys_ir_pažymys:&lt;br /&gt;
            break&lt;br /&gt;
        else:&lt;br /&gt;
            mokinio_vardas, mokinio_pažymiai = mokinys_ir_pažymys.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
            mokinio_pažymiai = mokinio_pažymiai.split(&amp;quot; &amp;quot;)&lt;br /&gt;
            mokiniai[mokinio_vardas] = mokinio_pažymiai&lt;br /&gt;
    įvesties_failas.close()&lt;br /&gt;
    print(&amp;quot;Pažymiai įkelti.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def išsaugoti_pažymius(pažymių_failas):&lt;br /&gt;
    išvesties_failas = open(pažymių_failas, &amp;quot;w&amp;quot;)&lt;br /&gt;
    for k, v in mokiniai.items():&lt;br /&gt;
        išvesties_failas.write(k + &amp;quot;,&amp;quot;)&lt;br /&gt;
        for x in v:&lt;br /&gt;
            išvesties_failas.write(str(x) + &amp;quot; &amp;quot;)&lt;br /&gt;
        išvesties_failas.write(&amp;quot;\n&amp;quot;)&lt;br /&gt;
    išvesties_failas.close()&lt;br /&gt;
    print(&amp;quot;Pažymiai išsaugoti.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def spausdink_meniu():&lt;br /&gt;
    print(&amp;quot;1. Pridėk mokinį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;2. Pašalink mokinį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;3. Įkrauti pažymius&amp;quot;)&lt;br /&gt;
    print(&amp;quot;4. Įrašyk pažymį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;5. Spausdink pažymius&amp;quot;)&lt;br /&gt;
    print(&amp;quot;6. Įšsaugoti pažymius&amp;quot;)&lt;br /&gt;
    print(&amp;quot;7. Spausdink meniu&amp;quot;)&lt;br /&gt;
    print(&amp;quot;9. Išeik&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def spausdink_visus_pažymius():&lt;br /&gt;
    if mokiniai:&lt;br /&gt;
        raktai = sorted(mokiniai.keys())&lt;br /&gt;
        print(&#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
        for x in užduotys:&lt;br /&gt;
            print(x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
        print()&lt;br /&gt;
        for x in raktai:&lt;br /&gt;
            print(x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
            pažymiai = mokiniai[x]&lt;br /&gt;
            spausdink_pažymius(pažymiai)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Neradau pažymių spausdinimui.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def spausdink_pažymius(pažymiai):&lt;br /&gt;
    for x in pažymiai:&lt;br /&gt;
        print(x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
spausdink_meniu()&lt;br /&gt;
meniu_pasirinkimas = 0&lt;br /&gt;
while meniu_pasirinkimas != 9:&lt;br /&gt;
    print()&lt;br /&gt;
    meniu_pasirinkimas = int(input(&amp;quot;Meniu pasirinkimas: &amp;quot;))&lt;br /&gt;
    if meniu_pasirinkimas == 1:&lt;br /&gt;
        vardas = input(&amp;quot;Pridėk mokinį: &amp;quot;)&lt;br /&gt;
        mokiniai[vardas] = [0] * len(užduotys)&lt;br /&gt;
    elif meniu_pasirinkimas == 2:&lt;br /&gt;
        vardas = input(&amp;quot;Pašalink mokinį: &amp;quot;)&lt;br /&gt;
        if vardas in mokiniai:&lt;br /&gt;
            del mokiniai[vardas]&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Mokinys vardu:&amp;quot;, vardas, &amp;quot; nerastas.&amp;quot;)&lt;br /&gt;
    elif meniu_pasirinkimas == 3:&lt;br /&gt;
        pažymių_failas = input(&amp;quot;Įkrauti pažymius iš kokio failo? &amp;quot;)&lt;br /&gt;
        įkelti_pažymius(pažymių_failas)&lt;br /&gt;
    elif meniu_pasirinkimas == 4:&lt;br /&gt;
        print(&amp;quot;Įrašyk pažymį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Mokinys: &amp;quot;)&lt;br /&gt;
        if vardas in mokiniai:&lt;br /&gt;
            pažymiai = mokiniai[vardas]&lt;br /&gt;
            print(&amp;quot;Įrašyk mokinio pažymį&amp;quot;)&lt;br /&gt;
            print(&amp;quot;Įrašyk 0 (nulį), kad išeitum&amp;quot;)&lt;br /&gt;
            for i,x in enumerate(užduotys):&lt;br /&gt;
                print(i + 1, x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
            print()&lt;br /&gt;
            spausdink_pažymius(pažymiai)&lt;br /&gt;
            kuris = 1234&lt;br /&gt;
            while kuris != -1:&lt;br /&gt;
                kuris = int(input(&amp;quot;Pažymys, kurį nori pakeisti: &amp;quot;))&lt;br /&gt;
                kuris -= 1&lt;br /&gt;
                if 0 &amp;lt;= kuris &amp;lt; len(pažymiai):&lt;br /&gt;
                    pažymys = int(input(&amp;quot;Pažymys: &amp;quot;))&lt;br /&gt;
                    pažymiai[kuris] = pažymys&lt;br /&gt;
                elif kuris != -1:&lt;br /&gt;
                    print(&amp;quot;Klaidingas pažymys&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Mokinys nerastas&amp;quot;)&lt;br /&gt;
    elif meniu_pasirinkimas == 5:&lt;br /&gt;
        spausdink_visus_pažymius()&lt;br /&gt;
    elif meniu_pasirinkimas == 6:&lt;br /&gt;
        pažymių_failas = input(&amp;quot;Į kokį failą išsaugoti pažymius? &amp;quot;)&lt;br /&gt;
        išsaugoti_pažymius(pažymių_failas)&lt;br /&gt;
    elif meniu_pasirinkimas != 9:&lt;br /&gt;
        spausdink_meniu()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Daugiau apie tekstines eilutes |next=Siekiant tobulumo}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Fail%C5%B3_tvarkymas&amp;diff=244</id>
		<title>Vadovėlis/Failų tvarkymas</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Fail%C5%B3_tvarkymas&amp;diff=244"/>
		<updated>2023-03-13T08:48:30Z</updated>

		<summary type="html">&lt;p&gt;Monika: Sutvarkyta nuoroda&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Daugiau apie tekstines eilutes |next=Siekiant tobulumo}}&lt;br /&gt;
{{BookCat}}&lt;br /&gt;
&lt;br /&gt;
=== Failų įvestis/išvestis ===&lt;br /&gt;
&lt;br /&gt;
Štai paprastas failo įvesties ir išvesties (I/O, ang. Input/Output) pavyzdys:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Rašyti į failą&lt;br /&gt;
with open(&amp;quot;testas.txt&amp;quot;, &amp;quot;wt&amp;quot;) as rašomas_failas:&lt;br /&gt;
    rašomas_failas.write(&amp;quot;Šis tekstas bus išsiųstas į failą\nPažiūrėk ir pamatysi!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Skaityti failą&lt;br /&gt;
with open(&amp;quot;testas.txt&amp;quot;, &amp;quot;rt&amp;quot;) as skaitomas_failas:&lt;br /&gt;
    tekstas = skaitomas_failas.read()&lt;br /&gt;
&lt;br /&gt;
print(tekstas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Failo &amp;lt;code&amp;gt;testas.txt&amp;lt;/code&amp;gt; išvestis ir turinys yra:&lt;br /&gt;
&lt;br /&gt;
 Šis tekstas bus išsiųstas į failą&lt;br /&gt;
 Pažiūrėk ir pamatysi!&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad programa sukūrė failą pavadinimu &amp;lt;code&amp;gt;testas.txt&amp;lt;/code&amp;gt; kataloge, iš kurio paleidai programą.  Eilutėje esantis &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; nurodo Python&#039;ui toje vietoje peršokti į naują eilutę.  &lt;br /&gt;
&lt;br /&gt;
Apžvelkime visus veiksmus su failais:&lt;br /&gt;
* Gauk failo objektą su funkcija &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;&lt;br /&gt;
* Skaityk iš arba rašyk į failo objektą (priklausomai nuo to, kokiu režimu jis buvo atidarytas)&lt;br /&gt;
* Jeigu failui atidaryti nenaudojai funkcijos &amp;lt;code&amp;gt;with&amp;lt;/code&amp;gt;, turėsi jį uždaryti rankiniu būdu&lt;br /&gt;
&lt;br /&gt;
Pirmas žingsnis yra gauti failo objektą. Tai galima padaryti naudojant funkciją &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;. Formatas yra &amp;lt;code&amp;gt;failo_objektas = open(failo_pavadinimas, režimas)&amp;lt;/code&amp;gt;, kur &amp;lt;code&amp;gt;failo_objektas&amp;lt;/code&amp;gt; yra kintamasis, į kurį reikia įdėti failo objektą, &amp;lt;code&amp;gt;failo_pavadinimas&amp;lt;/code&amp;gt; yra eilutė su failo pavadinimu, o &amp;lt;code&amp;gt;režimas&amp;lt;/code&amp;gt; yra &amp;lt;code&amp;gt;&amp;quot;rt&amp;quot;&amp;lt;/code&amp;gt;, kad (ang. &#039;&#039;r&#039;&#039;ead) skaityti failą kaip &#039;&#039;t&#039;&#039;ekstą arba &amp;lt;code&amp;gt;&amp;quot;wt&amp;quot;&amp;lt;/code&amp;gt; (&#039;&#039;w&#039;&#039;rite) rašytį į failą kaip &#039;&#039;t&#039;&#039;ekstą (ir keletą kitų režimų, kuriuos čia praleisime). Toliau galima iškviesti failų objektų funkcijas. Dvi dažniausiai naudojamos funkcijos yra &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; (skaityti) ir &amp;lt;code&amp;gt;write&amp;lt;/code&amp;gt; (rašyti). Funkcija &amp;lt;code&amp;gt;write&amp;lt;/code&amp;gt; prideda eilutę prie failo pabaigos. Funkcija &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; nuskaito failo turinį ir grąžina jį kaip eilutę (kaip padaryta pavyzdyje). &lt;br /&gt;
&lt;br /&gt;
O dabar čia yra nauja telefono numerių programos versija, kurią jau sukūrei anksčiau:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def spausdink_numerius(numeriai):&lt;br /&gt;
    print(&amp;quot;Telefono numeriai:&amp;quot;)&lt;br /&gt;
    for k, v in numeriai.items():&lt;br /&gt;
        print(&amp;quot;Vardas:&amp;quot;, k, &amp;quot;\tTelefono numeris:&amp;quot;, v)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
def pridėk_numerį(numeriai, vardas, numeris):&lt;br /&gt;
    numeriai[vardas] = numeris&lt;br /&gt;
&lt;br /&gt;
def surask_numerį(numeriai, vardas):&lt;br /&gt;
    if vardas in numeriai:&lt;br /&gt;
        return &amp;quot;Telefono numeris yra &amp;quot; + numeriai[vardas]&lt;br /&gt;
    else:&lt;br /&gt;
        return vardas + &amp;quot; nebuvo rastas&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def pašalink_numerį(numeriai, vardas):&lt;br /&gt;
    if vardas in numeriai:&lt;br /&gt;
        del numeriai[vardas]&lt;br /&gt;
    else:&lt;br /&gt;
        print(vardas,&amp;quot; nebuvo rastas&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def įkelti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    skaitymo_failas = open(failo_pavadinimas, &amp;quot;rt&amp;quot;)&lt;br /&gt;
    while True:&lt;br /&gt;
        skaitoma_eilutė = skaitymo_failas.readline()&lt;br /&gt;
        if not skaitoma_eilutė:&lt;br /&gt;
            break&lt;br /&gt;
        skaitoma_eilutė = skaitoma_eilutė[:-1]&lt;br /&gt;
        vardas, numeris = skaitoma_eilutė.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
        numeriai[vardas] = numeris&lt;br /&gt;
    skaitymo_failas.close()&lt;br /&gt;
&lt;br /&gt;
def išsaugoti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    išvesties_failas = open(failo_pavadinimas, &amp;quot;wt&amp;quot;)&lt;br /&gt;
    for k, v in numeriai.items():&lt;br /&gt;
        išvesties_failas.write(k + &amp;quot;,&amp;quot; + v + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    išvesties_failas.close()&lt;br /&gt;
&lt;br /&gt;
def spausdink_meniu():&lt;br /&gt;
    print(&#039;1. Spausdink telefonų numerius&#039;)&lt;br /&gt;
    print(&#039;2. Pridėk telefono numerį&#039;)&lt;br /&gt;
    print(&#039;3. Pašalink telefono numerį&#039;)&lt;br /&gt;
    print(&#039;4. Ieškok telefono numerio&#039;)&lt;br /&gt;
    print(&#039;5. Įkelk telefono numerius&#039;)&lt;br /&gt;
    print(&#039;6. Išsaugok telefono numerius&#039;)&lt;br /&gt;
    print(&#039;7. Išeik&#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
numeriai = {}&lt;br /&gt;
meniu_pasirinkimas = 0&lt;br /&gt;
spausdink_meniu()&lt;br /&gt;
while True:&lt;br /&gt;
    meniu_pasirinkimas = int(input(&amp;quot;Įvesk skaičių (1-7): &amp;quot;))&lt;br /&gt;
    if meniu_pasirinkimas == 1:&lt;br /&gt;
        spausdink_numerius(numeriai)&lt;br /&gt;
    elif meniu_pasirinkimas == 2:&lt;br /&gt;
        print(&amp;quot;Pridėk vardą ir telefono numerį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        numeris = input(&amp;quot;Telefono numeris: &amp;quot;)&lt;br /&gt;
        pridėk_numerį(numeriai, vardas, numeris)&lt;br /&gt;
    elif meniu_pasirinkimas == 3:&lt;br /&gt;
        print(&amp;quot;Pašalink vardą ir telefono numerį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        pašalink_numerį(numeriai, vardas)&lt;br /&gt;
    elif meniu_pasirinkimas == 4:&lt;br /&gt;
        print(&amp;quot;Ieškok telefono numerio&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        print(surask_numerį(numeriai, vardas))&lt;br /&gt;
    elif meniu_pasirinkimas == 5:&lt;br /&gt;
        failo_pavadinimas = input(&amp;quot;Failo pavadinimas, kurį nori įkelti: &amp;quot;)&lt;br /&gt;
        įkelti_numerius(numeriai, failo_pavadinimas)&lt;br /&gt;
    elif meniu_pasirinkimas == 6:&lt;br /&gt;
        failo_pavadinimas = input(&amp;quot;Failo pavadinimas išsaugojimui: &amp;quot;)&lt;br /&gt;
        išsaugoti_numerius(numeriai, failo_pavadinimas)&lt;br /&gt;
    elif meniu_pasirinkimas == 7:&lt;br /&gt;
        break&lt;br /&gt;
    else:&lt;br /&gt;
        spausdink_meniu()&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Viso!&amp;quot;)  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gali pastebėti, kad dabar kodas papildomai išsaugo ir perskaito failus. Štai dviejų programos vykdymų išvestis:&lt;br /&gt;
&lt;br /&gt;
 1. Spausdink telefonų numerius&lt;br /&gt;
 2. Pridėk telefono numerį&lt;br /&gt;
 3. Pašalink telefono numerį&lt;br /&gt;
 4. Ieškok telefono numerio&lt;br /&gt;
 5. Įkelk telefono numerius&lt;br /&gt;
 6. Išsaugok telefono numerius&lt;br /&gt;
 7. Išeik&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Liepa&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeris: &#039;&#039;&#039;1234&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Benas&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeris: &#039;&#039;&#039;4321&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeriai:&lt;br /&gt;
 Vardas: Liepa     Telefono numeris: 1234&lt;br /&gt;
 Vardas: Benas     Telefono numeris: 4321&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
 Failo pavadinimas išsaugojimui: &#039;&#039;&#039;numeriai.txt&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;7&#039;&#039;&#039;&lt;br /&gt;
 Viso!&lt;br /&gt;
&lt;br /&gt;
 1. Spausdink telefonų numerius&lt;br /&gt;
 2. Pridėk telefono numerį&lt;br /&gt;
 3. Pašalink telefono numerį&lt;br /&gt;
 4. Ieškok telefono numerio&lt;br /&gt;
 5. Įkelk telefono numerius&lt;br /&gt;
 6. Išsaugok telefono numerius&lt;br /&gt;
 7. Išeik&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
 Failo pavadinimas, kurį nori įkelti: &#039;&#039;&#039;numeriai.txt&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeriai:&lt;br /&gt;
 Vardas: Liepa     Telefono numeris: 1234&lt;br /&gt;
 Vardas: Benas     Telefono numeris: 4321&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-7): &#039;&#039;&#039;7&#039;&#039;&#039;&lt;br /&gt;
 Viso!&lt;br /&gt;
&lt;br /&gt;
Naujos šios programos dalys yra:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def įkelti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    skaitymo_failas = open(failo_pavadinimas, &amp;quot;rt&amp;quot;)&lt;br /&gt;
    while True:&lt;br /&gt;
        skaitoma_eilutė = skaitymo_failas.readline()&lt;br /&gt;
        if not skaitoma_eilutė:&lt;br /&gt;
            break&lt;br /&gt;
        skaitoma_eilutė = skaitoma_eilutė[:-1]&lt;br /&gt;
        vardas, numeris = skaitoma_eilutė.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
        numeriai[vardas] = numeris&lt;br /&gt;
    skaitymo_failas.close()&lt;br /&gt;
&lt;br /&gt;
def išsaugoti_numerius(numeriai, failo_pavadinimas):&lt;br /&gt;
    išvesties_failas = open(failo_pavadinimas, &amp;quot;wt&amp;quot;)&lt;br /&gt;
    for k, v in numeriai.items():&lt;br /&gt;
        išvesties_failas.write(k + &amp;quot;,&amp;quot; + v + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    išvesties_failas.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pirmiausia pažiūrėk į programos išsaugojimo dalį. Visų pirma, sukuriamas failo objektas su komanda &amp;lt;code&amp;gt;open(failo_pavadinimas, &amp;quot;wt&amp;quot;)&amp;lt;/code&amp;gt;. Toliau sukuriama eilutė kiekvienam telefono numeriui su komanda &amp;lt;code&amp;gt;išvesties_failas.write(k + &amp;quot;,&amp;quot; + v + &amp;quot;\n&amp;quot;)&amp;lt;/code&amp;gt;. Tai išrašo eilutę, kurioje yra vardas, kablelis, telefono numeris, o po jos rašoma nauja eilutė.&lt;br /&gt;
&lt;br /&gt;
Failo skaitymo dalis yra šiek tiek sudėtingesnė. Ji prasideda failo objekto gavimu. Tada ji naudoja &amp;lt;code&amp;gt;while True:&amp;lt;/code&amp;gt; ciklą, kad tęstųsi ciklas tol, kol bus aptikta komanda &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt;. Komanda &amp;lt;code&amp;gt;skaitoma_eilutė = skaitymo_failas.readline()&amp;lt;/code&amp;gt; perskaito pirmą eilutę ir priskiria kintamajam &amp;lt;code&amp;gt;skaitome_eilutė&amp;lt;/code&amp;gt;. Pasiekus failo pabaigą, funkcija &amp;lt;code&amp;gt;readline&amp;lt;/code&amp;gt; grąžins tuščią eilutę. Sąlyginis sakinys &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; tai patikrina ir panaudojant komandą &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt; nutraukia &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; ciklą. Funkcija &amp;lt;code&amp;gt;readline&amp;lt;/code&amp;gt; perskaito ir grąžina vieną eilutę kartu su jos pabaigos simboliu. Tai yra tam, kad būtų galima spręsti ar tai yra tik tuščia eilutė, ar jau failo pabaiga. Taigi turime atsikratyti to paskutinio eilutės pabaigos simbolio. Komanda &amp;lt;code&amp;gt;skaitoma_eilutė = skaitoma_eilutė[:-1]&amp;lt;/code&amp;gt; tai padaro už mus, išmesdama paskutinį simbolį. Toliau eilutė &amp;lt;code&amp;gt;vardas, numeris = skaitoma_eilutė.split(&amp;quot;,&amp;quot;)&amp;lt;/code&amp;gt; padalija eilutę ties kableliu į vardą ir telefono numerį ir visa tai įtraukiama į &amp;lt;code&amp;gt;numeriai&amp;lt;/code&amp;gt; žodyną.&lt;br /&gt;
&lt;br /&gt;
=== Darbo su failais rėžimai ===&lt;br /&gt;
Be &amp;lt;code&amp;gt;&amp;quot;rt&amp;quot;&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;&amp;quot;wt&amp;quot;&amp;lt;/code&amp;gt; yra ir kitų darbo su failais rėžimų. Lentelėje rasi visų rėžimų sąrašą:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Rėžimas&lt;br /&gt;
!Paaiškinimas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;rt&amp;quot;&lt;br /&gt;
|Tekstinio failo nuskatymas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;wt&amp;quot;&lt;br /&gt;
|Teksto rašymas į failą&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;xt&amp;quot;&lt;br /&gt;
|Naujo teskinio failo kūrimas. Jei toks failas jau egzistuoja bus gaunama klaida&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;at&amp;quot;&lt;br /&gt;
|Tekstinio failo papildymas. Failo turinys bus pildomas nuo edamo failo pabaigos&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;r&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;rt&amp;quot; rėžimui. Tekstinio failo nuskatymas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;w&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;w&amp;quot; rėžimui. Teksto rašymas į failą&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;x&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;x&amp;quot; rėžimui. Naujo teskinio failo kūrimas. Jei toks failas jau egzistuoja bus gaunama klaida&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;a&amp;quot;&lt;br /&gt;
|Sinonimas &amp;quot;a&amp;quot; rėžimui. Tekstinio failo papildymas. Failo turinys bus pildomas nuo edamo failo pabaigos&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;rb&amp;quot;&lt;br /&gt;
|Dvejetainio duomenų failo nuskatymas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;wb&amp;quot;&lt;br /&gt;
|Dvejetainės informacijos rašymas į failą&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;xb&amp;quot;&lt;br /&gt;
|Naujo dvejetainio failo kūrimas. Jei toks failas jau egzistuoja bus gaunama klaida&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;ab&amp;quot;&lt;br /&gt;
|Dvejetainio failo papildymas. Failo turinys bus pildomas nuo edamo failo pabaigos&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;r+&amp;quot;&lt;br /&gt;
|Tekstinio failo skaitymas ir rašymas. Esamas failo turinys nėra išvalomas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;w+&amp;quot;&lt;br /&gt;
|Tekstinio failo skaitymas ir rašymas. Esamas failo turinys yra išvalomas rašant į failą.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;r+b&amp;quot;&lt;br /&gt;
|Dvejetainio failo skaitymas ir rašymas. Esamas failo turinys nėra išvalomas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;w+b&amp;quot;&lt;br /&gt;
|Dvejetainio failo skaitymas ir rašymas. Esamas failo turinys yra išvalomas rašant į failą.&lt;br /&gt;
|}&lt;br /&gt;
Dvvejetainiai rėžimai šiame vadovėlyje plačiau nagrinėjami nėra&lt;br /&gt;
&lt;br /&gt;
=== Pagrindinės darbo su tekstiniais failais operacijos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Operacija&lt;br /&gt;
!Paaiškinimas&lt;br /&gt;
|-&lt;br /&gt;
|failas.read()&lt;br /&gt;
|Nuskaitomas visas failo turinys&lt;br /&gt;
|-&lt;br /&gt;
|failas.read(kiek)&lt;br /&gt;
|Nuskaitomas nuordytas simbolių kiekis iš failo. Pvz naudojant failas.read(3) bus nuskaitomi 3 sekantys simboliai&lt;br /&gt;
|-&lt;br /&gt;
|failas.readline()&lt;br /&gt;
|Nuskaitoma sekanti failo eilutė&lt;br /&gt;
|-&lt;br /&gt;
|failas.readlines()&lt;br /&gt;
|Nuskaitomos visos failo eilutės. Gražinamas sąrašas sudarytas iš teksto eilučių&lt;br /&gt;
|-&lt;br /&gt;
|failas.close()&lt;br /&gt;
|Failo uždarymas. Uždarius failą veiksmai su juo negalimi. Atidarant failą naudojant with funkciją, jis bus uždarytas automatiškai, tad close() naudoti nebereikia&lt;br /&gt;
|-&lt;br /&gt;
|failas.write(rašomas_tesktas)&lt;br /&gt;
|Įrašo nurodytą tekstą į failą.&lt;br /&gt;
|-&lt;br /&gt;
|failas.writelines(rašomo_teksto_eilučių_sąrašas)&lt;br /&gt;
|Sąrašas sudarytas iš teskto eilučių yra įrašomas į failą. Kiekvienas sąrašo elementas bus įrašomas naujoje eilutėje&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pažangesnis .txt failų naudojimas ===&lt;br /&gt;
&lt;br /&gt;
Galbūt tau kyla toks klausimas: „Aš žinau, kaip skaityti ir rašyti tekstinį failą, bet ką daryti, jei noriu atspausdinti failą spausdintuvu?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Yra keletas skirtingų būdų, kaip tai padaryti. Iš tikrųjų, pats lengviausias būdas yra atidaryti kitą programą, tada leisti viskuo pasirūpinti Python&#039;o kodui, kad tau nereikėtų pačiam failo atidarinėti ir spausdinti. Šis metodas apima kitos programos subproceso (arba antrinis procesas; biblioteka &#039;subprocess&#039;) iškvietimą. &lt;br /&gt;
&lt;br /&gt;
Prisimeni failą, į kurį įrašėme išvestį aukščiau esančioje programoje? Panaudokime tą failą.&lt;br /&gt;
Turėk omenyje, kad norint išvengti klaidų, ši programa naudoja sąvokas iš kito skyriaus. Nedvejodamas gali dar kartą peržiūrėti šį pavyzdį po kito skyriaus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import subprocess&lt;br /&gt;
def pagrindinis():&lt;br /&gt;
    try:&lt;br /&gt;
        print(&amp;quot;Ši maža programa iškviečia spausdinimo funkciją Notepad programoje&amp;quot;)&lt;br /&gt;
        #Atspausdinkime failą, kurį sukūrėme aukščiau esančioje programoje&lt;br /&gt;
        subprocess.call([&#039;notepad&#039;,&#039;/p&#039;,&#039;numeriai.txt&#039;])&lt;br /&gt;
    except WindowsError:&lt;br /&gt;
        print(&amp;quot;Pakviesto subproceso nėra arba jo negalima iškviesti.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
pagrindinis()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;subprocess.call&amp;lt;/code&amp;gt; turi tris argumentus. Pirmasis argumentas šio pavyzdžio kontekste turėtų būti programos pavadinimas, iš kurios nori iškviesti spausdinimo subprocesą. Antrasis argumentas turėtų būti konkretus tos programos subprocesas. Kad būtų paprasčiau, tiesiog suprask, kad šioje programoje &amp;lt;code&amp;gt;&#039;/p&#039;&amp;lt;/code&amp;gt; yra subprocesas, naudojamas norint pasiekti spausdintuvą per nurodytą programą. Paskutinis argumentas turėtų būti failo pavadinimas, kurį norite siųsti į spausdinimo subprocesą. Šiuo atveju tai yra tas pats failas, naudotas anksčiau šiame skyriuje.&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
Dabar pakeisk pažymių programą iš skyriaus [[Vadovėlis/Žodynai|Žodynai]], kad ji naudotų failus mokinių pažymiams saugoti.&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
užduotys = [&#039;nd sk 1&#039;, &#039;nd sk 2&#039;, &#039;viktorina   &#039;, &#039;nd sk 3&#039;, &#039;testas&#039;]&lt;br /&gt;
mokiniai = { }&lt;br /&gt;
&lt;br /&gt;
def įkelti_pažymius(pažymių_failas):&lt;br /&gt;
    įvesties_failas = open(pažymių_failas, &amp;quot;r&amp;quot;)&lt;br /&gt;
    pažymiai = [ ]&lt;br /&gt;
    while True:&lt;br /&gt;
        mokinys_ir_pažymys = įvesties_failas.readline()&lt;br /&gt;
        mokinys_ir_pažymys = mokinys_ir_pažymys[:-1]&lt;br /&gt;
        if not mokinys_ir_pažymys:&lt;br /&gt;
            break&lt;br /&gt;
        else:&lt;br /&gt;
            mokinio_vardas, mokinio_pažymiai = mokinys_ir_pažymys.split(&amp;quot;,&amp;quot;)&lt;br /&gt;
            mokinio_pažymiai = mokinio_pažymiai.split(&amp;quot; &amp;quot;)&lt;br /&gt;
            mokiniai[mokinio_vardas] = mokinio_pažymiai&lt;br /&gt;
    įvesties_failas.close()&lt;br /&gt;
    print(&amp;quot;Pažymiai įkelti.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def išsaugoti_pažymius(pažymių_failas):&lt;br /&gt;
    išvesties_failas = open(pažymių_failas, &amp;quot;w&amp;quot;)&lt;br /&gt;
    for k, v in mokiniai.items():&lt;br /&gt;
        išvesties_failas.write(k + &amp;quot;,&amp;quot;)&lt;br /&gt;
        for x in v:&lt;br /&gt;
            išvesties_failas.write(str(x) + &amp;quot; &amp;quot;)&lt;br /&gt;
        išvesties_failas.write(&amp;quot;\n&amp;quot;)&lt;br /&gt;
    išvesties_failas.close()&lt;br /&gt;
    print(&amp;quot;Pažymiai išsaugoti.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def spausdink_meniu():&lt;br /&gt;
    print(&amp;quot;1. Pridėk mokinį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;2. Pašalink mokinį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;3. Įkrauti pažymius&amp;quot;)&lt;br /&gt;
    print(&amp;quot;4. Įrašyk pažymį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;5. Spausdink pažymius&amp;quot;)&lt;br /&gt;
    print(&amp;quot;6. Įšsaugoti pažymius&amp;quot;)&lt;br /&gt;
    print(&amp;quot;7. Spausdink meniu&amp;quot;)&lt;br /&gt;
    print(&amp;quot;9. Išeik&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def spausdink_visus_pažymius():&lt;br /&gt;
    if mokiniai:&lt;br /&gt;
        raktai = sorted(mokiniai.keys())&lt;br /&gt;
        print(&#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
        for x in užduotys:&lt;br /&gt;
            print(x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
        print()&lt;br /&gt;
        for x in raktai:&lt;br /&gt;
            print(x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
            pažymiai = mokiniai[x]&lt;br /&gt;
            spausdink_pažymius(pažymiai)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Neradau pažymių spausdinimui.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def spausdink_pažymius(pažymiai):&lt;br /&gt;
    for x in pažymiai:&lt;br /&gt;
        print(x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
spausdink_meniu()&lt;br /&gt;
meniu_pasirinkimas = 0&lt;br /&gt;
while meniu_pasirinkimas != 9:&lt;br /&gt;
    print()&lt;br /&gt;
    meniu_pasirinkimas = int(input(&amp;quot;Meniu pasirinkimas: &amp;quot;))&lt;br /&gt;
    if meniu_pasirinkimas == 1:&lt;br /&gt;
        vardas = input(&amp;quot;Pridėk mokinį: &amp;quot;)&lt;br /&gt;
        mokiniai[vardas] = [0] * len(užduotys)&lt;br /&gt;
    elif meniu_pasirinkimas == 2:&lt;br /&gt;
        vardas = input(&amp;quot;Pašalink mokinį: &amp;quot;)&lt;br /&gt;
        if vardas in mokiniai:&lt;br /&gt;
            del mokiniai[vardas]&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Mokinys vardu:&amp;quot;, vardas, &amp;quot; nerastas.&amp;quot;)&lt;br /&gt;
    elif meniu_pasirinkimas == 3:&lt;br /&gt;
        pažymių_failas = input(&amp;quot;Įkrauti pažymius iš kokio failo? &amp;quot;)&lt;br /&gt;
        įkelti_pažymius(pažymių_failas)&lt;br /&gt;
    elif meniu_pasirinkimas == 4:&lt;br /&gt;
        print(&amp;quot;Įrašyk pažymį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Mokinys: &amp;quot;)&lt;br /&gt;
        if vardas in mokiniai:&lt;br /&gt;
            pažymiai = mokiniai[vardas]&lt;br /&gt;
            print(&amp;quot;Įrašyk mokinio pažymį&amp;quot;)&lt;br /&gt;
            print(&amp;quot;Įrašyk 0 (nulį), kad išeitum&amp;quot;)&lt;br /&gt;
            for i,x in enumerate(užduotys):&lt;br /&gt;
                print(i + 1, x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
            print()&lt;br /&gt;
            spausdink_pažymius(pažymiai)&lt;br /&gt;
            kuris = 1234&lt;br /&gt;
            while kuris != -1:&lt;br /&gt;
                kuris = int(input(&amp;quot;Pažymys, kurį nori pakeisti: &amp;quot;))&lt;br /&gt;
                kuris -= 1&lt;br /&gt;
                if 0 &amp;lt;= kuris &amp;lt; len(pažymiai):&lt;br /&gt;
                    pažymys = int(input(&amp;quot;Pažymys: &amp;quot;))&lt;br /&gt;
                    pažymiai[kuris] = pažymys&lt;br /&gt;
                elif kuris != -1:&lt;br /&gt;
                    print(&amp;quot;Klaidingas pažymys&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Mokinys nerastas&amp;quot;)&lt;br /&gt;
    elif meniu_pasirinkimas == 5:&lt;br /&gt;
        spausdink_visus_pažymius()&lt;br /&gt;
    elif meniu_pasirinkimas == 6:&lt;br /&gt;
        pažymių_failas = input(&amp;quot;Į kokį failą išsaugoti pažymius? &amp;quot;)&lt;br /&gt;
        išsaugoti_pažymius(pažymių_failas)&lt;br /&gt;
    elif meniu_pasirinkimas != 9:&lt;br /&gt;
        spausdink_meniu()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Daugiau apie tekstines eilutes |next=Siekiant tobulumo}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Daugiau_apie_tekstines_eilutes&amp;diff=241</id>
		<title>Vadovėlis/Daugiau apie tekstines eilutes</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Daugiau_apie_tekstines_eilutes&amp;diff=241"/>
		<updated>2023-03-02T07:18:47Z</updated>

		<summary type="html">&lt;p&gt;Monika: Pridėta užduočių&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Daugiau apie sąrašus |next=Failų tvarkymas}}&lt;br /&gt;
{{BookCat}}&lt;br /&gt;
&lt;br /&gt;
Šiame skyriuje pamatysi, kiek šaunių dalykų galime padaryti su tekstine reikšme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def rėk(tekstinė_reikšmė):&lt;br /&gt;
    for raidė in tekstinė_reikšmė:&lt;br /&gt;
        print(&amp;quot;Duok man &amp;quot; + raidė)&lt;br /&gt;
        print(&amp;quot;&#039;&amp;quot; + raidė + &amp;quot;&#039;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
rėk(&amp;quot;Ačiū&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def vidurys(tekstas):&lt;br /&gt;
    print(&amp;quot;Raidė esanti viduryje yra:&amp;quot;, tekstas[len(tekstas) // 2])&lt;br /&gt;
&lt;br /&gt;
vidurys(&amp;quot;abcdefg&amp;quot;)&lt;br /&gt;
vidurys(&amp;quot;The Python Programming Language&amp;quot;)&lt;br /&gt;
vidurys(&amp;quot;Atlanta&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas:&lt;br /&gt;
&lt;br /&gt;
 Duok man A&lt;br /&gt;
 &#039;A&#039;&lt;br /&gt;
 Duok man č&lt;br /&gt;
 &#039;č&#039;&lt;br /&gt;
 Duok man i&lt;br /&gt;
 &#039;i&#039;&lt;br /&gt;
 Duok man ū&lt;br /&gt;
 &#039;ū&#039;&lt;br /&gt;
 Raidė esanti viduryje yra: d&lt;br /&gt;
 Raidė esanti viduryje yra: r&lt;br /&gt;
 Raidė esanti viduryje yra: a&lt;br /&gt;
&lt;br /&gt;
Šios dvi programos rodo, kad tekstinė reikšmė (string) yra keliais aspektais panaši į sąrašą (list). Funkcija &amp;lt;code&amp;gt;rėk()&amp;lt;/code&amp;gt; rodo, kad ciklas &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; gali būti naudojamas su tekstine reikšme lygiai taip pat kaip ir su sąrašais. Funkcija &amp;lt;code&amp;gt;vidurys()&amp;lt;/code&amp;gt; rodo, kad su tekstine reikšme galima naudoti sąrašo funkciją &amp;lt;code&amp;gt;len()&amp;lt;/code&amp;gt;, taip pat sąrašo indeksavimu ir pjaustymu. Taigi, dauguma sąrašo (list) funkcijų veikia ir su tekstine reikšme.&lt;br /&gt;
&lt;br /&gt;
Kita šio skyriaus funkcija parodo tam tikras tekstinės reikšmės ypatybes:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def pavertimas_didžiosiomis_raidėmis(tekstas):&lt;br /&gt;
    ## Ši funkcija, tekstinę reikšmę užrašo didžiosiomis raidėmis&lt;br /&gt;
    didžiosios_raidės = &amp;quot;&amp;quot;&lt;br /&gt;
    for raidė in tekstas:&lt;br /&gt;
        if &#039;a&#039; &amp;lt;= raidė &amp;lt;= &#039;z&#039;:&lt;br /&gt;
            lokacija = ord(raidė) - ord(&#039;a&#039;)&lt;br /&gt;
            naujas_ascii = lokacija + ord(&#039;A&#039;)&lt;br /&gt;
            raidė= chr(naujas_ascii)&lt;br /&gt;
        didžiosios_raidės = didžiosios_raidės + raidė&lt;br /&gt;
    return didžiosios_raidės&lt;br /&gt;
&lt;br /&gt;
print(pavertimas_didžiosiomis_raidėmis(&amp;quot;Įrašytas tekstas&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas:&lt;br /&gt;
&lt;br /&gt;
 ĮRAŠYTAS TEKSTAS&lt;br /&gt;
&lt;br /&gt;
Tai veikia, nes kompiuteris tekstinės reikšmės simbolius šifruoja skaičiais nuo 0 iki 1 114 111. Visos šios tekstinės reikšmės turi savo unikalias unikodo reikšmes. Pavyzdžiui, simboliui „A“ yra priskirtas skaičius 65, simbolis „B“ kompiuterio suprantamas kaip 66, o simbolis א yra 1488. Visi simboliai yra tarsi surikiuoti ir turi savo eilės numerį. Python&#039;o programavimo kalba turi funkciją, vadinamą &amp;lt;code&amp;gt;ord()&amp;lt;/code&amp;gt; (trumpinys angliško žodžio ordinal, kuris reiškia iš eilės), kuri grąžina simbolio skaičių (eilės numerį_. Taip pat Python&#039;o programavimo kalba turi ir atvirkščią funkciją, vadinamą &amp;lt;code&amp;gt;chr()&amp;lt;/code&amp;gt;, kuri skaičių paverčia simboliu. Supratus, kaip veikia šios funkcijos aukščiau užrašyta programa turėtų atrodyti logiška.&lt;br /&gt;
&lt;br /&gt;
Programos pirmoji eilutė &amp;lt;code&amp;gt;if &#039;a&#039; &amp;lt;= simbolis &amp;lt;= &#039;z&#039;:&amp;lt;/code&amp;gt; patikrina, ar raidė yra mažoji. Jeigu taip, tada naudojamos kitos programos eilutės:&lt;br /&gt;
Pirmiausia eilutė &amp;lt;code&amp;gt;lokacija= ord(simbolis) - ord(&#039;a&#039;)&amp;lt;/code&amp;gt; nurodo simbolio vietą: a = 0, b = 1, c = 2 ir t.t. &lt;br /&gt;
Tada nauja reikšmė randama su kodo eilute &amp;lt;code&amp;gt;naujas_ascii = lokacija + ord (&#039;A&#039;)&amp;lt;/code&amp;gt;. &lt;br /&gt;
Tada ši reikšmė paverčiama atgal į simbolį, kuris dabar yra didžioji raidė. &lt;br /&gt;
&lt;br /&gt;
Žinoma, tai tik programos pavyzdys, tačiau daug paprasčiau tai padaryti naudojantis funkcija &amp;lt;code&amp;gt;tekstoEilutė.upper()&amp;lt;/code&amp;gt;, kuri veikia su visomis kalbomis.&lt;br /&gt;
&lt;br /&gt;
O dabar pabandykime pasižiūrėti į šį pavyzdį:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;# Skaičius į tekstinę reikšmę&#039;&#039;&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 2&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;str(2)&#039;&#039;&#039;&lt;br /&gt;
 &#039;2&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;-123&#039;&#039;&#039;&lt;br /&gt;
 -123&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;str(-123)&#039;&#039;&#039;&lt;br /&gt;
 &#039;-123&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;# Tekstinė reikšmė į skaičių&#039;&#039;&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;&amp;quot;23&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
 &#039;23&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;int(&amp;quot;23&amp;quot;)&#039;&#039;&#039;&lt;br /&gt;
 23&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;&amp;quot;23&amp;quot; * 2&#039;&#039;&#039;&lt;br /&gt;
 &#039;2323&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;int(&amp;quot;23&amp;quot;) * 2&#039;&#039;&#039;&lt;br /&gt;
 46&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;# Skaičius po kablelio į tekstinę reikšmę&#039;&#039;&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;1.23&#039;&#039;&#039;&lt;br /&gt;
 1.23&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;str(1.23)&#039;&#039;&#039;&lt;br /&gt;
 &#039;1.23&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;# Skaičius po kablelio į skaičių&#039;&#039;&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;1.23&#039;&#039;&#039;&lt;br /&gt;
 1.23&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;int(1.23)&#039;&#039;&#039;&lt;br /&gt;
 1&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;int(-1.23)&#039;&#039;&#039;&lt;br /&gt;
 -1&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;# Tekstinė reikšmė į skaičių po kablelio&#039;&#039;&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;float(&amp;quot;1.23&amp;quot;)&#039;&#039;&#039;&lt;br /&gt;
 1.23&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;&amp;quot;1.23&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
 &#039;1.23&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;float(&amp;quot;123&amp;quot;)&#039;&#039;&#039;&lt;br /&gt;
 123.0&lt;br /&gt;
&lt;br /&gt;
Jeigu dar nesupratai, tai funkcija &amp;lt;code&amp;gt;str()&amp;lt;/code&amp;gt; konvertuoja skaičių į tekstinę reikšmę (skaičiai suprantami, kaip simblių seka), o funkcija &amp;lt;code&amp;gt;int()&amp;lt;/code&amp;gt; konvertuoja tekstinę reikšmę į sveikąjį skaičių. Funkcija &amp;lt;code&amp;gt;float()&amp;lt;/code&amp;gt; konvertuoja tekstinę reikšmę arba skaičių į dešimtainį skaičių (skaičių su kableliu). Grįžtant prie funkcijos &amp;lt;code&amp;gt;str()&amp;lt;/code&amp;gt; – ji grąžina tekstinę įrašytos reikšmės versiją. Štai keli pavyzdžiai:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;str(1)&#039;&#039;&#039;&lt;br /&gt;
 &#039;1&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;str(234.14)&#039;&#039;&#039;&lt;br /&gt;
 &#039;234.14&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;str([4, 42, 10])&#039;&#039;&#039;&lt;br /&gt;
 &#039;[4, 42, 10]&#039;&lt;br /&gt;
&lt;br /&gt;
Funkcija &amp;lt;code&amp;gt;int()&amp;lt;/code&amp;gt; konvertuoja tekstinę reikšmę (ar dešimtainė skaičių) į sveikąjį skaičių. Panaši funkcija &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; konvertuoja skaičių ar tekstinę reikšmę į dešimtainį skaičių. Taip pat Python&#039;o programavimo kalba turi funkciją &amp;lt;code&amp;gt;type()&amp;lt;/code&amp;gt;, kuri grąžina kintamojo reikšmės tipą. Pavyzdžiui:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
v = &#039;123&#039;&lt;br /&gt;
print(type(v))&lt;br /&gt;
# &amp;lt;class &#039;str&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
v = 645.123&lt;br /&gt;
print(type(v))&lt;br /&gt;
# &amp;lt;class &#039;float&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
v = [1, 2, 3]&lt;br /&gt;
print(type(v))&lt;br /&gt;
# &amp;lt;class &#039;list&#039;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Naudojant funkciją &amp;lt;code&amp;gt;type()&amp;lt;/code&amp;gt; pasitikrink, ar grąžinamas toks reikšmės tipas, kurio tikėjaisi.&lt;br /&gt;
&lt;br /&gt;
Taip pat naudingas ir dažnai paprastose užduotyse naudojama funkcija &amp;lt;code&amp;gt;split()&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;&amp;quot;Čia yra tik žodžių kratinys&amp;quot;.split()&#039;&#039;&#039;&lt;br /&gt;
 [&#039;Čia&#039;, &#039;yra&#039;, &#039;tik&#039;, &#039;žodžių&#039;, &#039;kratinys&#039;]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;tekstas= &amp;quot;Pirma partija, antra partija, trečia, ketvirta&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;tekstas.split(&amp;quot;,&amp;quot;)&#039;&#039;&#039;&lt;br /&gt;
 [&#039;Pirma partija&#039;, &#039; antra partija&#039;, &#039; trečia&#039;, &#039; ketvirta&#039;]&lt;br /&gt;
&lt;br /&gt;
Ar pastebėjai kaip &amp;lt;code&amp;gt;split()&amp;lt;/code&amp;gt; konvertuoja tekstinę reikšmę į tekstinių reikšmių sąrašą (angl. list)? Kai funkcijai nenurodytas argmentas – skyriklis, pagal ką suskirstyti į skirtingus sąrašo elementus, funkcija skirsto pagal tarpus. Antrame pavyzdyje skyriklis yra kablelis.&lt;br /&gt;
Taip pat galima pridėti ir kitą argumentą, kuris nurodo &amp;lt;code&amp;gt;split()&amp;lt;/code&amp;gt; funkcijai, kurioje sąrašo vietoje reikia atskirti tekstą:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;sąrašas= tekstas.split(&amp;quot;,&amp;quot;)&#039;&#039;&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;len(sąrašas)&#039;&#039;&#039;&lt;br /&gt;
 4&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;sąrašas[-1]&#039;&#039;&#039;&lt;br /&gt;
 &#039; ketvirta&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;sąrašas = tekstas.split(&amp;quot;,&amp;quot;, 2)&#039;&#039;&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;len(sąrašas)&#039;&#039;&#039;&lt;br /&gt;
 3&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;sąrašas[-1]&#039;&#039;&#039;&lt;br /&gt;
 &#039; trečia, ketvirta&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO add more on strings --&amp;gt;&lt;br /&gt;
=== Tekstinės (ir sąrašo) reikšmės pjaustymas ir sujungimas ===&lt;br /&gt;
&lt;br /&gt;
Tekstinę reikšmę galima pjaustyti/skaidyti į skirtingas mažesnes reikšmes. Tą jau matei ankstesniame pavyzdyje su sąrašais, kai laužtiniuose skliaustuose &amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt; buvo nurodyta reikiama teksto vieta. Pjaustymo operatorius veikia taip: &amp;lt;code&amp;gt;tekstas[pradžios_indeksas:pabaigos_indeksas]&amp;lt;/code&amp;gt; (retais atvejais galime pridėti dar ir trečią argumentą, kaip apačioje esančiame pavyzdyje).&lt;br /&gt;
&lt;br /&gt;
Kad nesusipainiotum įrašydamas indekso skaičius, įsivaizduok, kad žirklėmis karpai tekstą, o programai nurodai, kurioje vietoje kirpti. Štai vienas pavyzdys, kaip tai viekia – geltonai pažymėtos kirpimo vietos, o raudonai ir mėlynai indekso numeris&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
{| style=&amp;quot;text-align:center&amp;quot; cellspacing=&amp;quot;0px&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex;color:red&amp;quot; |0&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex;color:red&amp;quot; |1&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex;color:red&amp;quot; |2&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; | ...&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex;color:blue&amp;quot; | -2&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex;color:blue&amp;quot; | -1&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;darr;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;darr;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;darr;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;darr;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;darr;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;darr;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;darr;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| tekstas = &lt;br /&gt;
|&amp;quot;&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
!S &lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
!T&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
!R&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
!I&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
!N&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
!G&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
|&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;uarr;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;uarr;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|[:&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|:]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Įsidėmėk, kad raudonai pažymėti indeksai skaičiuojami nuo pradžios, o mėlyni atvirkščiai nuo kito galo t.y. teksto pabaigos. Taip pat ar pastebėjai, kad skaičiuojant nuo galo nėra -0 reikšmės? Taip yra todėl, kad 0 visada priskiriamas tik reikšmės pradžiai:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|tekstas[1:4] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;TRI&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekstas[:5] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;STRIN&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekstas[:-1] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;STRIN&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekstas[-4:] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;RING&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekstas[2] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;R&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekstas[:] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;STRING&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekstas[::-1] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;GNIRTS&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;tekstas[1:4]&amp;lt;/tt&amp;gt; duoda visas &amp;lt;tt&amp;gt;tekstas&amp;lt;/tt&amp;gt; reikšmes tarp 1 ir 4, &amp;quot;&amp;lt;tt&amp;gt;TRI&amp;lt;/tt&amp;gt;&amp;quot;. Jei praleisi vieną iš argumentų [pradžios_indeksas:pabaigos indeksas], automatiškai gausi tekstinę reikšmę nuo pradžios ar pabaigos: &amp;lt;tt&amp;gt;tekstas[:5]&amp;lt;/tt&amp;gt; atspausdina&amp;quot;&amp;lt;tt&amp;gt;STRIN&amp;lt;/tt&amp;gt;&amp;quot;. Taip pat, tiek su &amp;lt;tt&amp;gt;pradžios_indeksas&amp;lt;/tt&amp;gt;, tiek su &amp;lt;tt&amp;gt;pabaigos_indeksas&amp;lt;/tt&amp;gt; galime naudoti raudonai ir mėlynai pavaizduotą skaičiavimo schemą - t.y. galime skaičuoti nuo pradžios, arba nuo pabaigos: &amp;lt;tt&amp;gt;tekstas[:-1]&amp;lt;/tt&amp;gt; duoda tą patį rezultatą kaip &amp;lt;tt&amp;gt;tekstas[:5]&amp;lt;/tt&amp;gt;, todėl, kad indekas -1 šiame žodyje yra toje pačioje vietoje kaip indeksas 5. Jeigu nenaudojame argumento kartu su dvitaškiu, tai skaičius traktuojamas kitaip, pavyzdžiui: &amp;lt;tt&amp;gt;tekstas[2]&amp;lt;/tt&amp;gt; duoda vieną raidę, kuri yra nurodytoje vietoje, šiuo atveju &amp;quot;&amp;lt;tt&amp;gt;R&amp;lt;/tt&amp;gt;&amp;quot;. Speciali pjaustymo operacija &amp;lt;tt&amp;gt;tekstas[:]&amp;lt;/tt&amp;gt; reiškia nuo pradžios iki pabaigos ir duodą visos tekstinės reikšmės ar sąrašo (list) kopiją. &lt;br /&gt;
&lt;br /&gt;
Na ir galiausiai, pjaustymo operacija gali turėti ir trečią argumentą, kuris suprantamas, kaip „žingsnio dydis“: &amp;lt;tt&amp;gt;tekstas[::-1]&amp;lt;/tt&amp;gt; yra &amp;lt;tt&amp;gt;tekstas&amp;lt;/tt&amp;gt; nuo pradžios iki pabaigos, kai nurodytas žingsnio dydis yra -1. Tai reiškia - kiekviena raidė, tik atvirkštine eilės tvarka. &amp;quot;&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;&amp;quot; atvirkščiai yra &amp;quot;&amp;lt;tt&amp;gt;GNIRTS&amp;lt;/tt&amp;gt;&amp;quot; (jeigu nesupratai, tai pabandyk prasitestuoti įrašydamas kaip žingsnio ilgį skaičių 2).&lt;br /&gt;
&lt;br /&gt;
Visos šios pjaustymo operacijos veikia ir su sąrašais (lists). Šiuo atveju tekstinę reikšmę galime suprasti, kaip sąrašą, kai visi sąrašo elementai yra atskiros raidės. Iš šio skyriaus atsimink pagrindinį principą - į viską žiūrėk taip lyg karpytum, tai padės nesusipainioti įrašant indeksus.&lt;br /&gt;
&lt;br /&gt;
Papasakojau tau apie pjaustymą, dabar laikas sužinoti, kaip sujungti sąrašą į vieną tekstinę eilutę. &amp;lt;code&amp;gt;join()&amp;lt;/code&amp;gt; yra Python kalbos integruota funkcija, kuri naudojama sujungti kelis teksto fragmentus į vieną eilutę. Ji naudojama su teksto eilute kaip metodo argumentu ir jungia kiekvieną elementą iš sąrašo arba kolekcijos, naudojant tą eilutę kaip jungiamąjį simbolį. Pavyzdžiui:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
žodžiai = [&amp;quot;Sujungtas&amp;quot;, &amp;quot;sakinys&amp;quot;]&lt;br /&gt;
sakinys = &amp;quot; &amp;quot;.join(žodžiai)&lt;br /&gt;
print(sakinys) # &amp;quot;Sujungtas sakinys&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
žodžiai = [&amp;quot;Sujungtas&amp;quot;, &amp;quot;sakinys&amp;quot;]&lt;br /&gt;
sakinys = &amp;quot;,&amp;quot;.join(žodžiai)&lt;br /&gt;
print(sakinys) # &amp;quot;Sujungtas,sakinys&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Daugiau naudingų tekstinės eilutės funkcijų  ===&lt;br /&gt;
&lt;br /&gt;
Čia yra keletas kitų dažniausiai naudojamų tekstinės eilutės metodų Python kalboje:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
tekstas = &#039;Čia yra tekstinė eilutė. &#039;&lt;br /&gt;
&lt;br /&gt;
# `upper` keičia visus simbolius eilutėje į didžiąsias raides.&lt;br /&gt;
tekstas.upper() # &#039;ČIA YRA TEKSTINĖ EILUTĖ.&#039;&lt;br /&gt;
&lt;br /&gt;
# `lower` keičia visus simbolius eilutėje į mažąsias raides.&lt;br /&gt;
tekstas.lower() # &#039;čia yra tekstinė eilutė.&#039;&lt;br /&gt;
&lt;br /&gt;
# `strip` pašalina tarpus iš eilutės pradžios ir pabaigos.&lt;br /&gt;
tekstas.strip() # &#039;Čia yra tekstinė eilutė.&#039;&lt;br /&gt;
&lt;br /&gt;
# `replace` keičia visus senos eilutės pasikartojimus nauja eilute.&lt;br /&gt;
senas = &#039;tekstinė&#039;&lt;br /&gt;
naujas = &#039;pakeista&#039;&lt;br /&gt;
tekstas.replace(senas, naujas) # &#039;Čia yra pakeista eilutė.&#039;&lt;br /&gt;
&lt;br /&gt;
# `find` grąžina pirmo pasikartojimo indeksą, arba -1 jei nerasta.&lt;br /&gt;
ieškomas_žodis = &#039;yra&#039;&lt;br /&gt;
tekstas.find(ieškomas_žodis) # 4&lt;br /&gt;
&lt;br /&gt;
# `startswith` grąžina &#039;true&#039; jei eilutė prasideda su nurodytu priešdėliu.&lt;br /&gt;
priešdėlis = &#039;Čia&#039;&lt;br /&gt;
tekstas.startswith(priešdėlis) # True&lt;br /&gt;
&lt;br /&gt;
# `endswith` grąžina &#039;true&#039; jei eilutė baigiasi su nurodyta priesaga.&lt;br /&gt;
priesaga = &#039;eilutė.&#039;&lt;br /&gt;
tekstas.endswith(priesaga) # True&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Svarbu žinoti, kad šie metodai grąžina naują eilutę ir nekeičia originalios eilutės.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime iš arčiau į vieną iš šių metodų: &amp;lt;code&amp;gt;strip()&amp;lt;/code&amp;gt; yra Python kalbos integruota funkcija, kuri naudojama pašalinti tarpus iš teksto eilutės pradžios ir/arba pabaigos. Jei nori pašalinti kitus simbolius, tau reikia nurodyti juos kaip papildomus argumentus funkcijai. Pavyzdžiui:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
tekstas = &amp;quot;   Sveikas, Pasauli!   &amp;quot;&lt;br /&gt;
švarus_tekstas = tekstas.strip()&lt;br /&gt;
print(švarus_tekstas) # &amp;quot;Sveikas, Pasauli!&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
tekstas = &amp;quot;$$$Sveikas, Pasauli!$$$&amp;quot;&lt;br /&gt;
švarus_tekstas = tekstas.strip(&amp;quot;$&amp;quot;)&lt;br /&gt;
print(švarus_tekstas) # &amp;quot;Sveikas, Pasauli!&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Taigi strip() funkcija leidžia pašalinti ne tik tarpus, bet ir kitus simbolius iš teksto eilutės pradžios ir/arba pabaigos.&lt;br /&gt;
&lt;br /&gt;
=== Ar įvestas sveikasis skaičius? ===&lt;br /&gt;
Panagrinėkime paprastą kodą:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#Ši programa patikrina ar įvestas sveikasis sakičius yra lyginis&lt;br /&gt;
skaičius = int(input(&amp;quot;Sveikasis skaičius: &amp;quot;))&lt;br /&gt;
if (skaičius % 2) == 0:&lt;br /&gt;
    print(&amp;quot;Lyginis&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Nelyginis&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Kas atsitiktų, jeigu įvestume ne skaičių, o pavyzdžiui žodį &amp;quot;pitonas&amp;quot;? Jei pabandytumn įvykdyti progamą, pamatytum, jog tokiu atveju įvyktų klaida. Kaip patikrinti ar įvestas tekstas yra skaičius? Tam galime panaudoti funkciją &amp;lt;code&amp;gt;isdecimal()&amp;lt;/code&amp;gt; . Ši funkcija gražina ar teksto eilutę galime paversti į sveikąjį skaičių.&lt;br /&gt;
Aukšiau pateiktą, kodą galime patobulinti šitaip:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#Ši programa patikrina ar įvestas sakičius yra lyginis&lt;br /&gt;
įvestas_skaičius = input(&amp;quot;Sveikasis skaičius: &amp;quot;)&lt;br /&gt;
if įvestas_skaičius.isdecimal():&lt;br /&gt;
    skaičius = int(įvestas_skaičius)&lt;br /&gt;
    if (skaičius % 2) == 0:&lt;br /&gt;
        print(&amp;quot;Lyginis&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Nelyginis&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Įvedei ne sveikąjį skaičių&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Išsiaiškinome kaip patikrinti ar teskto eilutę galime konvertuotį į sveikjį skaičių. O ką daryti jei norime patikrinit ar galime konvertutuoti į realųjį skaičių. Deja tokios paprastos funkcijos nėra, tad reikia naudoti kitokius metodus. Kaip tai padaryti pamatyri perskaitęs skyrių [[Vadovėlis/Siekiant tobulumo|Siekiant tobulumo]]. &lt;br /&gt;
&lt;br /&gt;
=== Pavyzdžiai ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Ši programa reikalauja dešimtainių skaičių supratimo.&lt;br /&gt;
def į_tekstą(į_skaičių):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Konvertuoja skaičių į tekstą&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    tekstas = &amp;quot;&amp;quot;&lt;br /&gt;
    prefiksas = &amp;quot;&amp;quot;&lt;br /&gt;
    if į_skaičių &amp;lt; 0:&lt;br /&gt;
        prefiksas = &amp;quot;-&amp;quot;&lt;br /&gt;
        į_skaičių = -į_skaičių&lt;br /&gt;
    while į_skaičių // 10 != 0:&lt;br /&gt;
        tekstas = str(į_skaičių % 10) + tekstas&lt;br /&gt;
        į_skaičių= į_skaičių// 10&lt;br /&gt;
    tekstas = str(į_skaičių % 10) + tekstas&lt;br /&gt;
    return prefiksas + tekstas&lt;br /&gt;
&lt;br /&gt;
def į_skaičių(į_tekstą):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Konvertuoja tekstą į skaičių&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    skaičius = 0&lt;br /&gt;
    if į_tekstą[0] == &amp;quot;-&amp;quot;:&lt;br /&gt;
        daugiklis = -1&lt;br /&gt;
        į_tekstą = į_tekstą[1:]&lt;br /&gt;
    else:&lt;br /&gt;
        daugiklis = 1&lt;br /&gt;
    for c in į_tekstą:&lt;br /&gt;
        skaičius = skaičius* 10 + int(c)&lt;br /&gt;
    return skaičius * daugiklis&lt;br /&gt;
&lt;br /&gt;
print(į_tekstą(2))&lt;br /&gt;
print(į_tekstą(23445))&lt;br /&gt;
print(į_tekstą(-23445))&lt;br /&gt;
print(į_skaičių(&amp;quot;14234&amp;quot;))&lt;br /&gt;
print(į_skaičių(&amp;quot;12345&amp;quot;))&lt;br /&gt;
print(į_skaičių(&amp;quot;-3512&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas:&lt;br /&gt;
&lt;br /&gt;
 2&lt;br /&gt;
 23445&lt;br /&gt;
 -23445&lt;br /&gt;
 14234&lt;br /&gt;
 12345&lt;br /&gt;
 -3512&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
1. Parašyk programą, kuri sukonstruotų žodį iš pirmų 2 ir paskutinių 2 įvestos tekstinės eilutės simbolių. Pvz., įvedus “Moku programuoti pitonu”, programa turėtų išvesti “Monu”. Jei įvesta eilutė yra trumpesnė, nei du simboliai, turėtų būti išvedama tuščia eilutė.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
įvesta_eilutė = input(&amp;quot;Įvesk tekstinę eilutę: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if len(įvesta_eilutė) &amp;lt; 2:&lt;br /&gt;
    print(&amp;quot;&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(įvesta_eilutė[:2] + įvesta_eilutė[len(įvesta_eilutė)-2:len(įvesta_eilutė)])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Parašyk programą, kuri prašytų įvesti du žodžius ir išvestų tuos žodžius apverstus ir sujungtus tarpu. Pavyzdžiui, jei vartotojas įveda &amp;quot;Labas&amp;quot; ir &amp;quot;rytas&amp;quot;, programa turėtų išvesti &amp;quot;sabaL satyr&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
pirmas = input(&amp;quot;Įvesk pirmą žodį: &amp;quot;)&lt;br /&gt;
antras = input(&amp;quot;Įvesk antrą žodį: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
pirmas_apverstas = pirmas[::-1]&lt;br /&gt;
antras_apverstas = antras[::-1]&lt;br /&gt;
&lt;br /&gt;
sujungta = &amp;quot; &amp;quot;.join([pirmas_apverstas, antras_apverstas])&lt;br /&gt;
&lt;br /&gt;
print(sujungta)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Parašyk programą, kuri prašo vartotojo įvesti žodį arba sakinį. Tada programa turi pasakyti, ar įvestas žodis/sakinys yra palindromas (žodis, eilėraštis arba frazė, skaitomi iš kairės į dešinę ir iš dešinės į kairę, išlaikantys tą pačią prasmę. Pvz., lietuvių k. žodis savas, sakinys &#039;Abu gaišo po šia guba&#039;)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
žodis = input(&amp;quot;Iveskite žodį&amp;quot;)​&lt;br /&gt;
​&lt;br /&gt;
def yra_palindromas(ž):&lt;br /&gt;
    ž_nuo_galo = &amp;quot;&amp;quot;&lt;br /&gt;
    for i in ž:&lt;br /&gt;
        ž_nuo_galo = i + ž_nuo_galo&lt;br /&gt;
    return ž_nuo_galo == ž​&lt;br /&gt;
​&lt;br /&gt;
ats = yra_palindromas(žodis)​&lt;br /&gt;
​&lt;br /&gt;
if ats:&lt;br /&gt;
    print(&amp;quot;Įvestas žodis yra palindromas&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Įvestas žodis nėra palindromas&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Daugiau apie sąrašus |next=Failų tvarkymas}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/%C5%BDodynai&amp;diff=240</id>
		<title>Vadovėlis/Žodynai</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/%C5%BDodynai&amp;diff=240"/>
		<updated>2023-02-27T14:52:43Z</updated>

		<summary type="html">&lt;p&gt;Monika: /* Pratimai */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Loginiai reiškiniai |next=Modulių naudojimas}}&lt;br /&gt;
&lt;br /&gt;
Šis skyrius yra apie žodynus. Žodynai turi raktus ir reikšmes. Raktai naudojami reikšmėms rasti. Štai žodyno pavyzdys:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def spausdink_meniu():&lt;br /&gt;
    print(&#039;1. Spausdink telefonų numerius&#039;)&lt;br /&gt;
    print(&#039;2. Pridėk telefono numerį&#039;)&lt;br /&gt;
    print(&#039;3. Pašalink telefono numerį&#039;)&lt;br /&gt;
    print(&#039;4. Ieškok telefono numerio&#039;)&lt;br /&gt;
    print(&#039;5. Išeik&#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
numeriai = {}&lt;br /&gt;
meniu_pasirinkimas = 0&lt;br /&gt;
spausdink_meniu ()&lt;br /&gt;
while meniu_pasirinkimas != 5:&lt;br /&gt;
    meniu_pasirinkimas = int(input(&amp;quot;Įvesk skaičių (1-5): &amp;quot;))&lt;br /&gt;
    if meniu_pasirinkimas == 1:&lt;br /&gt;
        print(&amp;quot;Telefono numeriai: &amp;quot;)&lt;br /&gt;
        for x in numeriai.keys():&lt;br /&gt;
            print(&amp;quot;Vardas: &amp;quot;, x, &amp;quot;\tTelefono numeris:&amp;quot;, numeriai[x])&lt;br /&gt;
        print()&lt;br /&gt;
    elif meniu_pasirinkimas == 2:&lt;br /&gt;
        print(&amp;quot;Pridėk vardą ir telefono numerį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        numeris = input(&amp;quot;Telefono numeris: &amp;quot;)&lt;br /&gt;
        numeriai[vardas] = numeris &lt;br /&gt;
    elif meniu_pasirinkimas == 3:&lt;br /&gt;
        print(&amp;quot;Pašalink vardą ir telefono numerį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        if vardas in numeriai:&lt;br /&gt;
            del numeriai[vardas]&lt;br /&gt;
        else:&lt;br /&gt;
            print(vardas, &amp;quot; nebuvo rastas&amp;quot;)&lt;br /&gt;
    elif meniu_pasirinkimas == 4:&lt;br /&gt;
        print(&amp;quot;Ieškok telefono numerio&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        if vardas in numeriai:&lt;br /&gt;
            print(&amp;quot;Telefono numeris yra &amp;quot;, numeriai[vardas])&lt;br /&gt;
        else:&lt;br /&gt;
            print(vardas, &amp;quot; nebuvo rastas&amp;quot;)&lt;br /&gt;
    elif meniu_pasirinkimas  != 5:&lt;br /&gt;
        print_menu()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O čia - mano išvestis:&lt;br /&gt;
&lt;br /&gt;
 1. Spausdink telefonų numerius&lt;br /&gt;
 2. Pridėk telefono numerį&lt;br /&gt;
 3. Pašalink telefono numerį&lt;br /&gt;
 4. Ieškok telefono numerio&lt;br /&gt;
 5. Išeik&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-5): &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Benas&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeris: &#039;&#039;&#039;869935951&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-5): &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Liepa&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeris: &#039;&#039;&#039;869935952&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-5): &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Markas&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeris: &#039;&#039;&#039;869935957&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-5): &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeriai:&lt;br /&gt;
 Vardas: Benas         Telefono numeris: 869935951&lt;br /&gt;
 Vardas: Liepa         Telefono numeris: 869935952&lt;br /&gt;
 Vardas: Markas        Telefono numeris: 869935957&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-5): &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
 Ieškok telefono numerio&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Benas&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeris yra 869935951&lt;br /&gt;
 Įvesk skaičių (1-5): &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
 Pašalink telefono numerį&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Markas&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-5): &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeriai:&lt;br /&gt;
 Vardas: Liepa      Telefono numeris: 869935952&lt;br /&gt;
 Vardas: Benas      Telefono numeris: 869935951&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-5): &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ši programa yra panaši į programą su vardų sąrašu, pateiktu prieš tai buvusiame skyriuje apie sąrašus.  Štai kaip veikia programa.  Pirmiausiai yra aprašoma funkcija &amp;lt;code&amp;gt;spausdink_meniu&amp;lt;/code&amp;gt;.  &amp;lt;code&amp;gt;spausdink_meniu&amp;lt;/code&amp;gt; tiesiog spausdina meniu, kuris vėliau du kartus naudojamas programoje.  Po to, pateikiama keistai atrodanti eilutė &amp;lt;code&amp;gt;numeriai = {}&amp;lt;/code&amp;gt;.  Ši eilutė Python&#039;ui pasako, kad &amp;lt;code&amp;gt;numeriai&amp;lt;/code&amp;gt; yra žodynas.  Kitos kelios eilutės tiesiog padaro taip, kad meniu veiktų.  Vykdydant ciklą:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for x in numeriai.keys():&lt;br /&gt;
    print(&amp;quot;Vardas: &amp;quot;, x, &amp;quot;\tTelefono numeris:&amp;quot;, numeriai[x])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
einama per žodyną ir spausdinami žodyne esantys elementai.  Funkcija &amp;lt;code&amp;gt; numeriai.keys()&amp;lt;/code&amp;gt; grąžina žodyno elementų raktų sąrašą, kuris yra vėliau naudojamas &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; cikle.  Sąrašas grąžinamas &amp;lt;code&amp;gt;keys()&amp;lt;/code&amp;gt; metodo pagalba neturi jokio eiliškumo, todėl, jei tu nori, kad jis būtų abėcėlės tvarka, jis turi būti surūšiuotas. Taigi, šiuo atveju &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; yra tekstinė eilutė – vardai. Panašiai kaip sąrašai, komanda &amp;lt;code&amp;gt;numeriai[x]&amp;lt;/code&amp;gt; naudojama norint pasiekti konkretų žodyno elementą. Šiuo atveju tai yra telefonų numeriai. Komanda &amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt; visa tai atspausdina.  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Pridėk vardą ir telefono numerį&amp;quot;)&lt;br /&gt;
vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
numeris = input(&amp;quot;Telefono numeris: &amp;quot;)&lt;br /&gt;
numeriai[vardas] = numeris &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Padarius kitą pasirinkimą, pirmiausiai paklausiamas vardas – tai bus žodyno elemento raktas, ir paklausiamas numeris. Toliau, komanda &amp;lt;code&amp;gt;numeriai[vardas] = telefonas&amp;lt;/code&amp;gt; prideda vardą ir telefono numerį į žodyną. Jei &amp;lt;code&amp;gt;vardas&amp;lt;/code&amp;gt; jau būtų buvęs žodyne, &amp;lt;code&amp;gt;telefonas&amp;lt;/code&amp;gt; pakeistų prieš tai buvusią reikšmę. &lt;br /&gt;
Toliau sąlyginis sakinys&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
if vardas in numeriai:&lt;br /&gt;
    del numeriai[vardas]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
tikrina, ar vardas yra žodyne, ir jei yra, jį pašalina.  Komanda &amp;lt;code&amp;gt;vardas in numeriai&amp;lt;/code&amp;gt; grąžina loginę reikšmę &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt;, jei &amp;lt;code&amp;gt;vardas&amp;lt;/code&amp;gt; yra &amp;lt;code&amp;gt;numeriai&amp;lt;/code&amp;gt; žodyne, bet kitu atveju grąžina &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt;. Komanda &amp;lt;code&amp;gt;del numeriai[vardas]&amp;lt;/code&amp;gt; pašalina raktą &amp;lt;code&amp;gt;vardas&amp;lt;/code&amp;gt; ir su tuo raktu susietą reikšmę. &lt;br /&gt;
Sąlyginis sakinys&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
if vardas in numeriai:&lt;br /&gt;
    print(&amp;quot;Telefono numeris yra &amp;quot;, numeriai[vardas])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
patikrina, ar žodynas turi tam tikrą raktą ir jei žodynas turi tą raktą, išspausdina su juo susietą numerį.  Galiausiai, jei meniu pasirinkimas negalioja, pagrindinis meniu yra atspausdinamas, kad tu galėtum juo pasigrožėti.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- \label{firstgrades}--&amp;gt;&lt;br /&gt;
Apibendrinimas: žodynai turi raktus ir reikšmes.  Raktu gali būti tekstinė eilutė arba&lt;br /&gt;
skaičius.  Raktai nurodo reikšmes.  Reikšmės gali būti bet kokio tipo kintamieji&lt;br /&gt;
(įskaitant sąrašus ar net žodynus (žinoma, tuose žodynuose ar sąrašuose&lt;br /&gt;
gali būti patys žodynai ar sąrašai (baisu, ane? :-)&lt;br /&gt;
))).  Štai yra pavyzdys, kai naudojamas sąrašas žodyne:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
max_taškai = [25, 25, 50, 25, 100]&lt;br /&gt;
užduotys = [&#039;nd sk 1&#039;, &#039;nd sk 2&#039;, &#039;viktorina   &#039;, &#039;nd sk 3&#039;, &#039;testas&#039;]&lt;br /&gt;
mokiniai = {&#039;#Max&#039;: max_taškai}&lt;br /&gt;
&lt;br /&gt;
def spausdink_meniu():&lt;br /&gt;
    print(&amp;quot;1. Pridėk mokinį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;2. Pašalink mokinį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;3. Spausdink pažymius&amp;quot;)&lt;br /&gt;
    print(&amp;quot;4. Įrašyk pažymį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;5. Spausdink meniu&amp;quot;)&lt;br /&gt;
    print(&amp;quot;6. Išeik&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def spausdink_visus_pažymius():&lt;br /&gt;
    print(&#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
    for i in range(len(užduotys)):&lt;br /&gt;
        print(užduotys[i], &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
    print()&lt;br /&gt;
    raktai = list(mokiniai.keys())&lt;br /&gt;
    raktai.sort()&lt;br /&gt;
    for x in raktai:&lt;br /&gt;
        print(x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
        pažymiai = mokiniai[x]&lt;br /&gt;
        spausdink_pažymius(pažymiai)&lt;br /&gt;
&lt;br /&gt;
def spausdink_pažymius(pažymiai):&lt;br /&gt;
    for i in range(len(pažymiai)):&lt;br /&gt;
        print(pažymiai[i], &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
spausdink_meniu()&lt;br /&gt;
meniu_pasirinkimas = 0&lt;br /&gt;
while meniu_pasirinkimas != 6:&lt;br /&gt;
    print()&lt;br /&gt;
    meniu_pasirinkimas = int(input(&amp;quot;Meniu pasirinkimas (1-6): &amp;quot;))&lt;br /&gt;
    if meniu_pasirinkimas == 1:&lt;br /&gt;
        vardas = input(&amp;quot;Pridėk mokinį: &amp;quot;)&lt;br /&gt;
        mokiniai[vardas] = [0] * len(max_taškai)&lt;br /&gt;
    elif meniu_pasirinkimas == 2:&lt;br /&gt;
        vardas = input(&amp;quot;Pašalink mokinį: &amp;quot;)&lt;br /&gt;
        if vardas in mokiniai:&lt;br /&gt;
            del mokiniai[vardas]&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Vardas: &amp;quot;, vardas, &amp;quot; nebuvo rastas&amp;quot;)&lt;br /&gt;
    elif meniu_pasirinkimas == 3:&lt;br /&gt;
        spausdink_visus_pažymius()&lt;br /&gt;
    elif meniu_pasirinkimas == 4:&lt;br /&gt;
        print(&amp;quot;Įrašyk pažymį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Mokinys: &amp;quot;)&lt;br /&gt;
        if vardas in mokiniai:&lt;br /&gt;
            pažymiai = mokiniai[vardas]&lt;br /&gt;
            print(&amp;quot;Įrašyk mokinio pažymį&amp;quot;)&lt;br /&gt;
            print(&amp;quot;Įrašyk 0 (nulį), kad išeitum&amp;quot;)&lt;br /&gt;
            for i in range(len(užduotys)):&lt;br /&gt;
                print(i + 1, užduotys[i], &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
            print()&lt;br /&gt;
            spausdink_pažymius(pažymiai)&lt;br /&gt;
            kuris = 1234&lt;br /&gt;
            while kuris != -1:&lt;br /&gt;
                kuris = int(input(&amp;quot;Pakeisk kuris pažymį: &amp;quot;))&lt;br /&gt;
                kuris -= 1    #tas pats kaip ir: kuris = kuris - 1&lt;br /&gt;
                if 0 &amp;lt;= kuris &amp;lt; len(pažymiai):&lt;br /&gt;
                    pažymys = int(input(&amp;quot;Pažymys: &amp;quot;))&lt;br /&gt;
                    pažymiai[kuris] = pažymys&lt;br /&gt;
                elif kuris != -1:&lt;br /&gt;
                    print(&amp;quot;Klaidingas pažymys&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Mokinys nerastas&amp;quot;)&lt;br /&gt;
    elif meniu_pasirinkimas != 6:&lt;br /&gt;
        spausdink_meniu()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O štai čia yra išvestis:&lt;br /&gt;
&lt;br /&gt;
 1. Pridėk mokinį&lt;br /&gt;
 2. Pašalink mokinį&lt;br /&gt;
 3. Spausdink pažymius&lt;br /&gt;
 4. Įrašyk pažymį&lt;br /&gt;
 5. Spausdink meniu&lt;br /&gt;
 6. Išeik&lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
        nd sk 1         nd sk 2       viktorina       nd sk 3            testas &lt;br /&gt;
 #Max    25              25              50              25              100 &lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
 1. Pridėk mokinį&lt;br /&gt;
 2. Pašalink mokinį&lt;br /&gt;
 3. Spausdink pažymius&lt;br /&gt;
 4. Įrašyk pažymį&lt;br /&gt;
 5. Spausdink meniu&lt;br /&gt;
 6. Išeik&lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Pridėk mokinį: &#039;&#039;&#039;Markas&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
 Įrašyk pažymį&lt;br /&gt;
 Mokinys: &#039;&#039;&#039;Markas&#039;&#039;&#039;&lt;br /&gt;
 Įrašyk mokinio pažymį&lt;br /&gt;
 Įrašyk 0 (nulį), kad išeitum&lt;br /&gt;
 1   nd sk 1     2   nd sk 2     3   viktorina        4   nd sk 3     5   testas &lt;br /&gt;
 0               0               0               0               0 &lt;br /&gt;
 Pakeisk kuris pažymį: &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Pažymys: &#039;&#039;&#039;25&#039;&#039;&#039;&lt;br /&gt;
 Pakeisk kuris pažymį: &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Pažymys: &#039;&#039;&#039;24&#039;&#039;&#039;&lt;br /&gt;
 Pakeisk kuris pažymį: &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
 Pažymys: &#039;&#039;&#039;45&#039;&#039;&#039;&lt;br /&gt;
 Pakeisk kuris pažymį: &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
 Pažymys: &#039;&#039;&#039;23&#039;&#039;&#039;&lt;br /&gt;
 Pakeisk kuris pažymį: &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
 Pažymys: &#039;&#039;&#039;95&#039;&#039;&#039;&lt;br /&gt;
 Pakeisk kuris pažymį: &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
           nd sk 1         nd sk 2         viktorina       nd sk 3          testas&lt;br /&gt;
 #Max        25              25              50              25              100&lt;br /&gt;
 Markas      25              24              45              23              95 &lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Štai kaip veikia programa.  Iš esmės, kintamasis &amp;lt;code&amp;gt;mokiniai&amp;lt;/code&amp;gt; yra žodynas, kurio raktai yra mokinių vardai, o reikšmės – jų pažymiai.  Pirmosios dvi eilutės tik sukuria du sąrašus.&lt;br /&gt;
Kita eilutė &amp;lt;code&amp;gt;mokiniai = {&#039;#Max&#039;: max_taškai}&amp;lt;/code&amp;gt; sukuria naują&lt;br /&gt;
žodyną su raktu {&amp;lt;code&amp;gt;#Max&amp;lt;/code&amp;gt;}, o reikšmė yra &amp;lt;code&amp;gt;[25, 25, 50, 25, 100]&amp;lt;/code&amp;gt; (pirmame sakinyje &amp;lt;code&amp;gt;max_taškai&amp;lt;/code&amp;gt; buvo padarytas priskyrimas) (aš naudoju raktą &amp;lt;code&amp;gt;#Max&amp;lt;/code&amp;gt;, nes rūšiuojant simolis &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; patenka prieš bet kokias abėcėlės raides).  Toliau aprašoma funkcija &amp;lt;code&amp;gt;spausdink_meniu&amp;lt;/code&amp;gt;. Kaip jau žinai, ji spausdina meniu.&lt;br /&gt;
Po to aprašoma funkcija &amp;lt;code&amp;gt;spausdink_visus_pažymius&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def spausdink_visus_pažymius():&lt;br /&gt;
    print(&#039;\t&#039;,end=&amp;quot; &amp;quot;)&lt;br /&gt;
    for i in range(len(užduotys)):&lt;br /&gt;
        print(užduotys[i], &#039;\t&#039;,end=&amp;quot; &amp;quot;)&lt;br /&gt;
    print()&lt;br /&gt;
    raktai = list(mokiniai.keys())&lt;br /&gt;
    keys.sort()&lt;br /&gt;
    for x in raktai:&lt;br /&gt;
        print(x, &#039;\t&#039;,end=&#039; &#039;)&lt;br /&gt;
        pažymiai = mokiniai[x]&lt;br /&gt;
        spausdink_pažymius(pažymiai)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, į tai, kaip žodyno &amp;lt;code&amp;gt;mokiniai&amp;lt;/code&amp;gt; raktai yra išimami į kintamąjį &amp;lt;code&amp;gt;raktai&amp;lt;/code&amp;gt; su komanda &amp;lt;code&amp;gt;raktai = list(mokiniai.keys())&amp;lt;/code&amp;gt;. Kintamasis &amp;lt;code&amp;gt;raktai&amp;lt;/code&amp;gt; turės būti rūšiuojamas, todėl yra paverčiamas į sąrašą. Taip bus galima naudoti visas sąrašų funkcijas.  Toliau raktai yra surūšiuojami eilutėje &amp;lt;code&amp;gt;raktai.sort()&amp;lt;/code&amp;gt;.  &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; yra naudojamas pereiti per visus raktus.  Pažymiai yra saugomi kaip sąrašas žodyno viduje, todėl priskyrimas &amp;lt;code&amp;gt;pažymiai = mokiniai[x]&amp;lt;/code&amp;gt; duoda &amp;lt;code&amp;gt;pažymiai&amp;lt;/code&amp;gt; sąrašą, kuris yra saugomas su &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; raktu.  Funkcija &amp;lt;code&amp;gt;spausdink_pažymius&amp;lt;/code&amp;gt; tiesiog spausdina sąrašą ir yra aprašyta keliomis eilutėmis žemiau.&lt;br /&gt;
&lt;br /&gt;
Tolimesnės programos eilutės įgyvendina įvairius meniu pasirinkimus.  Eilutė &amp;lt;code&amp;gt;mokiniai[vardas] = [0] * len(max_taškai)&amp;lt;/code&amp;gt; prideda mokinį į žodyną: &amp;lt;code&amp;gt;vardas&amp;lt;/code&amp;gt; yra naujas raktas.  Komanda &amp;lt;code&amp;gt;[0] * len(max_taškai)&amp;lt;/code&amp;gt; tiesiog sukuria žodyno elementą – 0-ių sąrašą, kuris yra tokio pat ilgio kaip ir &amp;lt;code&amp;gt;max_taškai&amp;lt;/code&amp;gt; sąrašas, kuriame vėliau bus sukelti pažymiai.  &lt;br /&gt;
&lt;br /&gt;
Pašalinti mokinį pasirinkimas tiesiog ištrina mokinį, panašiai kaip ir telefonų knygutės pavyzdyje.  &lt;br /&gt;
Įrašyti mokinį pasirinkimas yra šiek tiek sudėtingesnis.  Pažymiai yra  gaunami komandinėje eilutėje &lt;br /&gt;
&amp;lt;code&amp;gt;pažymiai = mokiniai[vardas]&amp;lt;/code&amp;gt;, ji gauna nuorodą į mokinio &amp;lt;code&amp;gt;vardas&amp;lt;/code&amp;gt; pažymius.  Tada pažymys yra  įrašomas komanda &amp;lt;code&amp;gt;pažymiai[kuris] = pažymys&amp;lt;/code&amp;gt;.  Tu gali pastebėti, kad &amp;lt;code&amp;gt;pažymiai&amp;lt;/code&amp;gt; niekada negrąžinami į mokinių žodyną (tokios komandos niekada nerašome:  &amp;lt;code&amp;gt;mokiniai[vardas] = pažymiai&amp;lt;/code&amp;gt;).  Pakeisto pažymių sąrašo į žodyną grąžinti nereikia todėl, kad komanda &amp;lt;code&amp;gt;pažymiai[kuris] = pažymys&amp;lt;/code&amp;gt; mes gauname ne realų sąrašą, o nuorodą į tą sąrašą, tada  &amp;lt;code&amp;gt;pažymiai&amp;lt;/code&amp;gt; iš tiesų yra tik kitas &amp;lt;code&amp;gt;mokiniai[vardas]&amp;lt;/code&amp;gt; pavadinimas. Dėl to, keičiant &amp;lt;code&amp;gt;pažymiai&amp;lt;/code&amp;gt; keičiasi ir &amp;lt;code&amp;gt;mokiniai[vardas]&amp;lt;/code&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
Žodynai turi nesudėtingą metodą susieti raktus su reikšmėmis. Tai gali būti naudojama norint lengvai sekti duomenis, pridedamus prie įvairių raktų.&lt;br /&gt;
&lt;br /&gt;
Pagrindinės operacijos su žodynu:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Funkcija&lt;br /&gt;
!Paaiškinimas&lt;br /&gt;
!Pavyzdys&lt;br /&gt;
|-&lt;br /&gt;
|keys()&lt;br /&gt;
|Gražina žodyno raktus&lt;br /&gt;
|print(žodynas.keys())&lt;br /&gt;
|-&lt;br /&gt;
|values()&lt;br /&gt;
|Gražina žodyno reikšmes&lt;br /&gt;
|print(žodynas.values())&lt;br /&gt;
|-&lt;br /&gt;
|del&lt;br /&gt;
|Pašalina elementą iš žodyno&lt;br /&gt;
|del žodynas[raktas]&lt;br /&gt;
|-&lt;br /&gt;
|in&lt;br /&gt;
|Patikrina ar žodynas turi elementą su nurodytu raktu&lt;br /&gt;
|(raktas in žodynas) == True&lt;br /&gt;
|-&lt;br /&gt;
|not in&lt;br /&gt;
|Patikrina ar žodynas neturi elemento su nurodytu raktu&lt;br /&gt;
|(raktas not in žodynas) == False&lt;br /&gt;
|-&lt;br /&gt;
|len&lt;br /&gt;
|Gražina žodyno elementų kiekį&lt;br /&gt;
|print(len(žodynas))&lt;br /&gt;
|-&lt;br /&gt;
|clear&lt;br /&gt;
|Pašalina visą žodyno turinį&lt;br /&gt;
|len(clear(žodynas))==0&lt;br /&gt;
|-&lt;br /&gt;
|list&lt;br /&gt;
|Gražina žodyno raktus, kaip sąrašą&lt;br /&gt;
|print(list(žodynas))&lt;br /&gt;
|-&lt;br /&gt;
|sorted&lt;br /&gt;
|Gražina surūšiuotus žodyno raktus, kaip sąrašą&lt;br /&gt;
|print(sorted(žodynas))&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
1. Parašyk programą, kuri sukurtų žodyną, kurio raktas būtų skaičiai nuo 1 iki 10, o vertė - raktas pakeltas antruoju laipsniu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
žodynas = {}&lt;br /&gt;
&lt;br /&gt;
for skaičius in range(1, 11):&lt;br /&gt;
    žodynas[skaičius] = skaičius * skaičius&lt;br /&gt;
    &lt;br /&gt;
print(žodynas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Parašyk programą, kuri patikrintų, ar įvestas raktas jau egzistuoja žodyne.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
žodynas = {&amp;quot;raktas 1&amp;quot;: &amp;quot;reikšmė 1&amp;quot;, &amp;quot;raktas 2&amp;quot;: &amp;quot;reikšmė 2&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
tikrinamas_raktas = input(&amp;quot;Įvesk raktą patikrinimui: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if tikrinamas_raktas in žodynas.keys():&lt;br /&gt;
    print(&amp;quot;Raktas egzistuoja&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Tokio rakto nėra&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Parašyk balsų skaičiavimo programą, kurioje tu vedi vardus tol, kol yra įvedamas žodis &amp;quot;pabaiga&amp;quot;. Tada programa išveda, visus vardus ir kiek kartų jis buvo įvestas.&lt;br /&gt;
&lt;br /&gt;
Įvesits:&lt;br /&gt;
&lt;br /&gt;
Benas, Liepa, Benas, Benas, Benas, Jonas, Liepa&lt;br /&gt;
&lt;br /&gt;
Išvestis:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
Benas 4&lt;br /&gt;
Liepa 2&lt;br /&gt;
Jonas 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
balsai = dict()&lt;br /&gt;
vardas = str()&lt;br /&gt;
&lt;br /&gt;
def balsuoti(naujasBalsas, balsai):&lt;br /&gt;
    if naujasBalsas in balsai:&lt;br /&gt;
        balsai[naujasBalsas] += 1&lt;br /&gt;
    else:&lt;br /&gt;
        if naujasBalsas != &amp;quot;pabaiga&amp;quot;:&lt;br /&gt;
            balsai[naujasBalsas] = 1&lt;br /&gt;
&lt;br /&gt;
while vardas != &amp;quot;pabaiga&amp;quot;:&lt;br /&gt;
    print(&amp;quot;Įrašyk vardą ir spausk &#039;enter&#039; klavišą&amp;quot;)&lt;br /&gt;
    vardas = input()&lt;br /&gt;
    balsuoti(vardas, balsai)&lt;br /&gt;
&lt;br /&gt;
print(balsai)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Loginiai reiškiniai |next=Modulių naudojimas}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/%C5%BDodynai&amp;diff=239</id>
		<title>Vadovėlis/Žodynai</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/%C5%BDodynai&amp;diff=239"/>
		<updated>2023-02-27T14:52:09Z</updated>

		<summary type="html">&lt;p&gt;Monika: Pridėta papildomų pratimų&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Loginiai reiškiniai |next=Modulių naudojimas}}&lt;br /&gt;
&lt;br /&gt;
Šis skyrius yra apie žodynus. Žodynai turi raktus ir reikšmes. Raktai naudojami reikšmėms rasti. Štai žodyno pavyzdys:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def spausdink_meniu():&lt;br /&gt;
    print(&#039;1. Spausdink telefonų numerius&#039;)&lt;br /&gt;
    print(&#039;2. Pridėk telefono numerį&#039;)&lt;br /&gt;
    print(&#039;3. Pašalink telefono numerį&#039;)&lt;br /&gt;
    print(&#039;4. Ieškok telefono numerio&#039;)&lt;br /&gt;
    print(&#039;5. Išeik&#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
numeriai = {}&lt;br /&gt;
meniu_pasirinkimas = 0&lt;br /&gt;
spausdink_meniu ()&lt;br /&gt;
while meniu_pasirinkimas != 5:&lt;br /&gt;
    meniu_pasirinkimas = int(input(&amp;quot;Įvesk skaičių (1-5): &amp;quot;))&lt;br /&gt;
    if meniu_pasirinkimas == 1:&lt;br /&gt;
        print(&amp;quot;Telefono numeriai: &amp;quot;)&lt;br /&gt;
        for x in numeriai.keys():&lt;br /&gt;
            print(&amp;quot;Vardas: &amp;quot;, x, &amp;quot;\tTelefono numeris:&amp;quot;, numeriai[x])&lt;br /&gt;
        print()&lt;br /&gt;
    elif meniu_pasirinkimas == 2:&lt;br /&gt;
        print(&amp;quot;Pridėk vardą ir telefono numerį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        numeris = input(&amp;quot;Telefono numeris: &amp;quot;)&lt;br /&gt;
        numeriai[vardas] = numeris &lt;br /&gt;
    elif meniu_pasirinkimas == 3:&lt;br /&gt;
        print(&amp;quot;Pašalink vardą ir telefono numerį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        if vardas in numeriai:&lt;br /&gt;
            del numeriai[vardas]&lt;br /&gt;
        else:&lt;br /&gt;
            print(vardas, &amp;quot; nebuvo rastas&amp;quot;)&lt;br /&gt;
    elif meniu_pasirinkimas == 4:&lt;br /&gt;
        print(&amp;quot;Ieškok telefono numerio&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
        if vardas in numeriai:&lt;br /&gt;
            print(&amp;quot;Telefono numeris yra &amp;quot;, numeriai[vardas])&lt;br /&gt;
        else:&lt;br /&gt;
            print(vardas, &amp;quot; nebuvo rastas&amp;quot;)&lt;br /&gt;
    elif meniu_pasirinkimas  != 5:&lt;br /&gt;
        print_menu()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O čia - mano išvestis:&lt;br /&gt;
&lt;br /&gt;
 1. Spausdink telefonų numerius&lt;br /&gt;
 2. Pridėk telefono numerį&lt;br /&gt;
 3. Pašalink telefono numerį&lt;br /&gt;
 4. Ieškok telefono numerio&lt;br /&gt;
 5. Išeik&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-5): &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Benas&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeris: &#039;&#039;&#039;869935951&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-5): &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Liepa&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeris: &#039;&#039;&#039;869935952&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-5): &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Markas&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeris: &#039;&#039;&#039;869935957&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-5): &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeriai:&lt;br /&gt;
 Vardas: Benas         Telefono numeris: 869935951&lt;br /&gt;
 Vardas: Liepa         Telefono numeris: 869935952&lt;br /&gt;
 Vardas: Markas        Telefono numeris: 869935957&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-5): &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
 Ieškok telefono numerio&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Benas&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeris yra 869935951&lt;br /&gt;
 Įvesk skaičių (1-5): &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
 Pašalink telefono numerį&lt;br /&gt;
 Vardas: &#039;&#039;&#039;Markas&#039;&#039;&#039;&lt;br /&gt;
 Įvesk skaičių (1-5): &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Telefono numeriai:&lt;br /&gt;
 Vardas: Liepa      Telefono numeris: 869935952&lt;br /&gt;
 Vardas: Benas      Telefono numeris: 869935951&lt;br /&gt;
 &lt;br /&gt;
 Įvesk skaičių (1-5): &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ši programa yra panaši į programą su vardų sąrašu, pateiktu prieš tai buvusiame skyriuje apie sąrašus.  Štai kaip veikia programa.  Pirmiausiai yra aprašoma funkcija &amp;lt;code&amp;gt;spausdink_meniu&amp;lt;/code&amp;gt;.  &amp;lt;code&amp;gt;spausdink_meniu&amp;lt;/code&amp;gt; tiesiog spausdina meniu, kuris vėliau du kartus naudojamas programoje.  Po to, pateikiama keistai atrodanti eilutė &amp;lt;code&amp;gt;numeriai = {}&amp;lt;/code&amp;gt;.  Ši eilutė Python&#039;ui pasako, kad &amp;lt;code&amp;gt;numeriai&amp;lt;/code&amp;gt; yra žodynas.  Kitos kelios eilutės tiesiog padaro taip, kad meniu veiktų.  Vykdydant ciklą:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for x in numeriai.keys():&lt;br /&gt;
    print(&amp;quot;Vardas: &amp;quot;, x, &amp;quot;\tTelefono numeris:&amp;quot;, numeriai[x])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
einama per žodyną ir spausdinami žodyne esantys elementai.  Funkcija &amp;lt;code&amp;gt; numeriai.keys()&amp;lt;/code&amp;gt; grąžina žodyno elementų raktų sąrašą, kuris yra vėliau naudojamas &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; cikle.  Sąrašas grąžinamas &amp;lt;code&amp;gt;keys()&amp;lt;/code&amp;gt; metodo pagalba neturi jokio eiliškumo, todėl, jei tu nori, kad jis būtų abėcėlės tvarka, jis turi būti surūšiuotas. Taigi, šiuo atveju &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; yra tekstinė eilutė – vardai. Panašiai kaip sąrašai, komanda &amp;lt;code&amp;gt;numeriai[x]&amp;lt;/code&amp;gt; naudojama norint pasiekti konkretų žodyno elementą. Šiuo atveju tai yra telefonų numeriai. Komanda &amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt; visa tai atspausdina.  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Pridėk vardą ir telefono numerį&amp;quot;)&lt;br /&gt;
vardas = input(&amp;quot;Vardas: &amp;quot;)&lt;br /&gt;
numeris = input(&amp;quot;Telefono numeris: &amp;quot;)&lt;br /&gt;
numeriai[vardas] = numeris &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Padarius kitą pasirinkimą, pirmiausiai paklausiamas vardas – tai bus žodyno elemento raktas, ir paklausiamas numeris. Toliau, komanda &amp;lt;code&amp;gt;numeriai[vardas] = telefonas&amp;lt;/code&amp;gt; prideda vardą ir telefono numerį į žodyną. Jei &amp;lt;code&amp;gt;vardas&amp;lt;/code&amp;gt; jau būtų buvęs žodyne, &amp;lt;code&amp;gt;telefonas&amp;lt;/code&amp;gt; pakeistų prieš tai buvusią reikšmę. &lt;br /&gt;
Toliau sąlyginis sakinys&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
if vardas in numeriai:&lt;br /&gt;
    del numeriai[vardas]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
tikrina, ar vardas yra žodyne, ir jei yra, jį pašalina.  Komanda &amp;lt;code&amp;gt;vardas in numeriai&amp;lt;/code&amp;gt; grąžina loginę reikšmę &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt;, jei &amp;lt;code&amp;gt;vardas&amp;lt;/code&amp;gt; yra &amp;lt;code&amp;gt;numeriai&amp;lt;/code&amp;gt; žodyne, bet kitu atveju grąžina &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt;. Komanda &amp;lt;code&amp;gt;del numeriai[vardas]&amp;lt;/code&amp;gt; pašalina raktą &amp;lt;code&amp;gt;vardas&amp;lt;/code&amp;gt; ir su tuo raktu susietą reikšmę. &lt;br /&gt;
Sąlyginis sakinys&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
if vardas in numeriai:&lt;br /&gt;
    print(&amp;quot;Telefono numeris yra &amp;quot;, numeriai[vardas])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
patikrina, ar žodynas turi tam tikrą raktą ir jei žodynas turi tą raktą, išspausdina su juo susietą numerį.  Galiausiai, jei meniu pasirinkimas negalioja, pagrindinis meniu yra atspausdinamas, kad tu galėtum juo pasigrožėti.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- \label{firstgrades}--&amp;gt;&lt;br /&gt;
Apibendrinimas: žodynai turi raktus ir reikšmes.  Raktu gali būti tekstinė eilutė arba&lt;br /&gt;
skaičius.  Raktai nurodo reikšmes.  Reikšmės gali būti bet kokio tipo kintamieji&lt;br /&gt;
(įskaitant sąrašus ar net žodynus (žinoma, tuose žodynuose ar sąrašuose&lt;br /&gt;
gali būti patys žodynai ar sąrašai (baisu, ane? :-)&lt;br /&gt;
))).  Štai yra pavyzdys, kai naudojamas sąrašas žodyne:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
max_taškai = [25, 25, 50, 25, 100]&lt;br /&gt;
užduotys = [&#039;nd sk 1&#039;, &#039;nd sk 2&#039;, &#039;viktorina   &#039;, &#039;nd sk 3&#039;, &#039;testas&#039;]&lt;br /&gt;
mokiniai = {&#039;#Max&#039;: max_taškai}&lt;br /&gt;
&lt;br /&gt;
def spausdink_meniu():&lt;br /&gt;
    print(&amp;quot;1. Pridėk mokinį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;2. Pašalink mokinį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;3. Spausdink pažymius&amp;quot;)&lt;br /&gt;
    print(&amp;quot;4. Įrašyk pažymį&amp;quot;)&lt;br /&gt;
    print(&amp;quot;5. Spausdink meniu&amp;quot;)&lt;br /&gt;
    print(&amp;quot;6. Išeik&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def spausdink_visus_pažymius():&lt;br /&gt;
    print(&#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
    for i in range(len(užduotys)):&lt;br /&gt;
        print(užduotys[i], &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
    print()&lt;br /&gt;
    raktai = list(mokiniai.keys())&lt;br /&gt;
    raktai.sort()&lt;br /&gt;
    for x in raktai:&lt;br /&gt;
        print(x, &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
        pažymiai = mokiniai[x]&lt;br /&gt;
        spausdink_pažymius(pažymiai)&lt;br /&gt;
&lt;br /&gt;
def spausdink_pažymius(pažymiai):&lt;br /&gt;
    for i in range(len(pažymiai)):&lt;br /&gt;
        print(pažymiai[i], &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
spausdink_meniu()&lt;br /&gt;
meniu_pasirinkimas = 0&lt;br /&gt;
while meniu_pasirinkimas != 6:&lt;br /&gt;
    print()&lt;br /&gt;
    meniu_pasirinkimas = int(input(&amp;quot;Meniu pasirinkimas (1-6): &amp;quot;))&lt;br /&gt;
    if meniu_pasirinkimas == 1:&lt;br /&gt;
        vardas = input(&amp;quot;Pridėk mokinį: &amp;quot;)&lt;br /&gt;
        mokiniai[vardas] = [0] * len(max_taškai)&lt;br /&gt;
    elif meniu_pasirinkimas == 2:&lt;br /&gt;
        vardas = input(&amp;quot;Pašalink mokinį: &amp;quot;)&lt;br /&gt;
        if vardas in mokiniai:&lt;br /&gt;
            del mokiniai[vardas]&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Vardas: &amp;quot;, vardas, &amp;quot; nebuvo rastas&amp;quot;)&lt;br /&gt;
    elif meniu_pasirinkimas == 3:&lt;br /&gt;
        spausdink_visus_pažymius()&lt;br /&gt;
    elif meniu_pasirinkimas == 4:&lt;br /&gt;
        print(&amp;quot;Įrašyk pažymį&amp;quot;)&lt;br /&gt;
        vardas = input(&amp;quot;Mokinys: &amp;quot;)&lt;br /&gt;
        if vardas in mokiniai:&lt;br /&gt;
            pažymiai = mokiniai[vardas]&lt;br /&gt;
            print(&amp;quot;Įrašyk mokinio pažymį&amp;quot;)&lt;br /&gt;
            print(&amp;quot;Įrašyk 0 (nulį), kad išeitum&amp;quot;)&lt;br /&gt;
            for i in range(len(užduotys)):&lt;br /&gt;
                print(i + 1, užduotys[i], &#039;\t&#039;, end=&#039; &#039;)&lt;br /&gt;
            print()&lt;br /&gt;
            spausdink_pažymius(pažymiai)&lt;br /&gt;
            kuris = 1234&lt;br /&gt;
            while kuris != -1:&lt;br /&gt;
                kuris = int(input(&amp;quot;Pakeisk kuris pažymį: &amp;quot;))&lt;br /&gt;
                kuris -= 1    #tas pats kaip ir: kuris = kuris - 1&lt;br /&gt;
                if 0 &amp;lt;= kuris &amp;lt; len(pažymiai):&lt;br /&gt;
                    pažymys = int(input(&amp;quot;Pažymys: &amp;quot;))&lt;br /&gt;
                    pažymiai[kuris] = pažymys&lt;br /&gt;
                elif kuris != -1:&lt;br /&gt;
                    print(&amp;quot;Klaidingas pažymys&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Mokinys nerastas&amp;quot;)&lt;br /&gt;
    elif meniu_pasirinkimas != 6:&lt;br /&gt;
        spausdink_meniu()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O štai čia yra išvestis:&lt;br /&gt;
&lt;br /&gt;
 1. Pridėk mokinį&lt;br /&gt;
 2. Pašalink mokinį&lt;br /&gt;
 3. Spausdink pažymius&lt;br /&gt;
 4. Įrašyk pažymį&lt;br /&gt;
 5. Spausdink meniu&lt;br /&gt;
 6. Išeik&lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
        nd sk 1         nd sk 2       viktorina       nd sk 3            testas &lt;br /&gt;
 #Max    25              25              50              25              100 &lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
 1. Pridėk mokinį&lt;br /&gt;
 2. Pašalink mokinį&lt;br /&gt;
 3. Spausdink pažymius&lt;br /&gt;
 4. Įrašyk pažymį&lt;br /&gt;
 5. Spausdink meniu&lt;br /&gt;
 6. Išeik&lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Pridėk mokinį: &#039;&#039;&#039;Markas&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
 Įrašyk pažymį&lt;br /&gt;
 Mokinys: &#039;&#039;&#039;Markas&#039;&#039;&#039;&lt;br /&gt;
 Įrašyk mokinio pažymį&lt;br /&gt;
 Įrašyk 0 (nulį), kad išeitum&lt;br /&gt;
 1   nd sk 1     2   nd sk 2     3   viktorina        4   nd sk 3     5   testas &lt;br /&gt;
 0               0               0               0               0 &lt;br /&gt;
 Pakeisk kuris pažymį: &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Pažymys: &#039;&#039;&#039;25&#039;&#039;&#039;&lt;br /&gt;
 Pakeisk kuris pažymį: &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Pažymys: &#039;&#039;&#039;24&#039;&#039;&#039;&lt;br /&gt;
 Pakeisk kuris pažymį: &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
 Pažymys: &#039;&#039;&#039;45&#039;&#039;&#039;&lt;br /&gt;
 Pakeisk kuris pažymį: &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
 Pažymys: &#039;&#039;&#039;23&#039;&#039;&#039;&lt;br /&gt;
 Pakeisk kuris pažymį: &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
 Pažymys: &#039;&#039;&#039;95&#039;&#039;&#039;&lt;br /&gt;
 Pakeisk kuris pažymį: &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
           nd sk 1         nd sk 2         viktorina       nd sk 3          testas&lt;br /&gt;
 #Max        25              25              50              25              100&lt;br /&gt;
 Markas      25              24              45              23              95 &lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Štai kaip veikia programa.  Iš esmės, kintamasis &amp;lt;code&amp;gt;mokiniai&amp;lt;/code&amp;gt; yra žodynas, kurio raktai yra mokinių vardai, o reikšmės – jų pažymiai.  Pirmosios dvi eilutės tik sukuria du sąrašus.&lt;br /&gt;
Kita eilutė &amp;lt;code&amp;gt;mokiniai = {&#039;#Max&#039;: max_taškai}&amp;lt;/code&amp;gt; sukuria naują&lt;br /&gt;
žodyną su raktu {&amp;lt;code&amp;gt;#Max&amp;lt;/code&amp;gt;}, o reikšmė yra &amp;lt;code&amp;gt;[25, 25, 50, 25, 100]&amp;lt;/code&amp;gt; (pirmame sakinyje &amp;lt;code&amp;gt;max_taškai&amp;lt;/code&amp;gt; buvo padarytas priskyrimas) (aš naudoju raktą &amp;lt;code&amp;gt;#Max&amp;lt;/code&amp;gt;, nes rūšiuojant simolis &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; patenka prieš bet kokias abėcėlės raides).  Toliau aprašoma funkcija &amp;lt;code&amp;gt;spausdink_meniu&amp;lt;/code&amp;gt;. Kaip jau žinai, ji spausdina meniu.&lt;br /&gt;
Po to aprašoma funkcija &amp;lt;code&amp;gt;spausdink_visus_pažymius&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def spausdink_visus_pažymius():&lt;br /&gt;
    print(&#039;\t&#039;,end=&amp;quot; &amp;quot;)&lt;br /&gt;
    for i in range(len(užduotys)):&lt;br /&gt;
        print(užduotys[i], &#039;\t&#039;,end=&amp;quot; &amp;quot;)&lt;br /&gt;
    print()&lt;br /&gt;
    raktai = list(mokiniai.keys())&lt;br /&gt;
    keys.sort()&lt;br /&gt;
    for x in raktai:&lt;br /&gt;
        print(x, &#039;\t&#039;,end=&#039; &#039;)&lt;br /&gt;
        pažymiai = mokiniai[x]&lt;br /&gt;
        spausdink_pažymius(pažymiai)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, į tai, kaip žodyno &amp;lt;code&amp;gt;mokiniai&amp;lt;/code&amp;gt; raktai yra išimami į kintamąjį &amp;lt;code&amp;gt;raktai&amp;lt;/code&amp;gt; su komanda &amp;lt;code&amp;gt;raktai = list(mokiniai.keys())&amp;lt;/code&amp;gt;. Kintamasis &amp;lt;code&amp;gt;raktai&amp;lt;/code&amp;gt; turės būti rūšiuojamas, todėl yra paverčiamas į sąrašą. Taip bus galima naudoti visas sąrašų funkcijas.  Toliau raktai yra surūšiuojami eilutėje &amp;lt;code&amp;gt;raktai.sort()&amp;lt;/code&amp;gt;.  &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; yra naudojamas pereiti per visus raktus.  Pažymiai yra saugomi kaip sąrašas žodyno viduje, todėl priskyrimas &amp;lt;code&amp;gt;pažymiai = mokiniai[x]&amp;lt;/code&amp;gt; duoda &amp;lt;code&amp;gt;pažymiai&amp;lt;/code&amp;gt; sąrašą, kuris yra saugomas su &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; raktu.  Funkcija &amp;lt;code&amp;gt;spausdink_pažymius&amp;lt;/code&amp;gt; tiesiog spausdina sąrašą ir yra aprašyta keliomis eilutėmis žemiau.&lt;br /&gt;
&lt;br /&gt;
Tolimesnės programos eilutės įgyvendina įvairius meniu pasirinkimus.  Eilutė &amp;lt;code&amp;gt;mokiniai[vardas] = [0] * len(max_taškai)&amp;lt;/code&amp;gt; prideda mokinį į žodyną: &amp;lt;code&amp;gt;vardas&amp;lt;/code&amp;gt; yra naujas raktas.  Komanda &amp;lt;code&amp;gt;[0] * len(max_taškai)&amp;lt;/code&amp;gt; tiesiog sukuria žodyno elementą – 0-ių sąrašą, kuris yra tokio pat ilgio kaip ir &amp;lt;code&amp;gt;max_taškai&amp;lt;/code&amp;gt; sąrašas, kuriame vėliau bus sukelti pažymiai.  &lt;br /&gt;
&lt;br /&gt;
Pašalinti mokinį pasirinkimas tiesiog ištrina mokinį, panašiai kaip ir telefonų knygutės pavyzdyje.  &lt;br /&gt;
Įrašyti mokinį pasirinkimas yra šiek tiek sudėtingesnis.  Pažymiai yra  gaunami komandinėje eilutėje &lt;br /&gt;
&amp;lt;code&amp;gt;pažymiai = mokiniai[vardas]&amp;lt;/code&amp;gt;, ji gauna nuorodą į mokinio &amp;lt;code&amp;gt;vardas&amp;lt;/code&amp;gt; pažymius.  Tada pažymys yra  įrašomas komanda &amp;lt;code&amp;gt;pažymiai[kuris] = pažymys&amp;lt;/code&amp;gt;.  Tu gali pastebėti, kad &amp;lt;code&amp;gt;pažymiai&amp;lt;/code&amp;gt; niekada negrąžinami į mokinių žodyną (tokios komandos niekada nerašome:  &amp;lt;code&amp;gt;mokiniai[vardas] = pažymiai&amp;lt;/code&amp;gt;).  Pakeisto pažymių sąrašo į žodyną grąžinti nereikia todėl, kad komanda &amp;lt;code&amp;gt;pažymiai[kuris] = pažymys&amp;lt;/code&amp;gt; mes gauname ne realų sąrašą, o nuorodą į tą sąrašą, tada  &amp;lt;code&amp;gt;pažymiai&amp;lt;/code&amp;gt; iš tiesų yra tik kitas &amp;lt;code&amp;gt;mokiniai[vardas]&amp;lt;/code&amp;gt; pavadinimas. Dėl to, keičiant &amp;lt;code&amp;gt;pažymiai&amp;lt;/code&amp;gt; keičiasi ir &amp;lt;code&amp;gt;mokiniai[vardas]&amp;lt;/code&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
Žodynai turi nesudėtingą metodą susieti raktus su reikšmėmis. Tai gali būti naudojama norint lengvai sekti duomenis, pridedamus prie įvairių raktų.&lt;br /&gt;
&lt;br /&gt;
Pagrindinės operacijos su žodynu:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Funkcija&lt;br /&gt;
!Paaiškinimas&lt;br /&gt;
!Pavyzdys&lt;br /&gt;
|-&lt;br /&gt;
|keys()&lt;br /&gt;
|Gražina žodyno raktus&lt;br /&gt;
|print(žodynas.keys())&lt;br /&gt;
|-&lt;br /&gt;
|values()&lt;br /&gt;
|Gražina žodyno reikšmes&lt;br /&gt;
|print(žodynas.values())&lt;br /&gt;
|-&lt;br /&gt;
|del&lt;br /&gt;
|Pašalina elementą iš žodyno&lt;br /&gt;
|del žodynas[raktas]&lt;br /&gt;
|-&lt;br /&gt;
|in&lt;br /&gt;
|Patikrina ar žodynas turi elementą su nurodytu raktu&lt;br /&gt;
|(raktas in žodynas) == True&lt;br /&gt;
|-&lt;br /&gt;
|not in&lt;br /&gt;
|Patikrina ar žodynas neturi elemento su nurodytu raktu&lt;br /&gt;
|(raktas not in žodynas) == False&lt;br /&gt;
|-&lt;br /&gt;
|len&lt;br /&gt;
|Gražina žodyno elementų kiekį&lt;br /&gt;
|print(len(žodynas))&lt;br /&gt;
|-&lt;br /&gt;
|clear&lt;br /&gt;
|Pašalina visą žodyno turinį&lt;br /&gt;
|len(clear(žodynas))==0&lt;br /&gt;
|-&lt;br /&gt;
|list&lt;br /&gt;
|Gražina žodyno raktus, kaip sąrašą&lt;br /&gt;
|print(list(žodynas))&lt;br /&gt;
|-&lt;br /&gt;
|sorted&lt;br /&gt;
|Gražina surūšiuotus žodyno raktus, kaip sąrašą&lt;br /&gt;
|print(sorted(žodynas))&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
1. Parašyk programą, kuri sukurtų žodyną, kurio raktas būtų skaičiai nuo 1 iki 10, o vertė - raktas pakeltas antruoju laipsniu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
žodynas = {}&lt;br /&gt;
&lt;br /&gt;
for skaičius in range(1, 11):&lt;br /&gt;
    žodynas[skaičius] = skaičius * skaičius&lt;br /&gt;
    &lt;br /&gt;
print(žodynas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Parašyk programą, kuri patikrintų, ar įvestas raktas jau egzistuoja žodyne.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
žodynas = {&amp;quot;raktas 1&amp;quot;: &amp;quot;reikšmė 1&amp;quot;, &amp;quot;raktas 2&amp;quot;: &amp;quot;reikšmė 2&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
tikrinamas_raktas = input(&amp;quot;Įvesk raktą patikrinimui: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if tikrinamas_raktas in žodynas.keys():&lt;br /&gt;
    print(&amp;quot;Raktas egzistuoja&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Tokio rakto nėra&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Parašyk balsų skaičiavimo programą, kurioje tu vedi vardus tol, kol yra įvedamas žodis &amp;quot;pabaiga&amp;quot;. Tada programa išveda, visus vardus ir kiek kartų jis buvo įvestas.&lt;br /&gt;
&lt;br /&gt;
Įvesits:&lt;br /&gt;
&lt;br /&gt;
Benas, Liepa, Benas, Benas, Benas, Jonas, Liepa&lt;br /&gt;
&lt;br /&gt;
Išvestis:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
Benas 4&lt;br /&gt;
Liepa 2&lt;br /&gt;
Jonas 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
balsai = dict()&lt;br /&gt;
vardas = str()&lt;br /&gt;
&lt;br /&gt;
def balsuoti(naujasBalsas, balsai):&lt;br /&gt;
    if naujasBalsas in balsai:&lt;br /&gt;
        balsai[naujasBalsas] += 1&lt;br /&gt;
    else:&lt;br /&gt;
        if naujasBalsas != &amp;quot;pabaiga&amp;quot;:&lt;br /&gt;
            balsai[naujasBalsas] = 1&lt;br /&gt;
&lt;br /&gt;
while vardas != &amp;quot;pabaiga&amp;quot;:&lt;br /&gt;
    print(&amp;quot;Įrašyk vardą ir spausk &#039;enter&#039; klavišą&amp;quot;)&lt;br /&gt;
    vardas = input()&lt;br /&gt;
    balsuoti(vardas, balsai)&lt;br /&gt;
&lt;br /&gt;
print(balsai)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Loginiai reiškiniai |next=Modulių naudojimas}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Daugiau_apie_tekstines_eilutes&amp;diff=132</id>
		<title>Vadovėlis/Daugiau apie tekstines eilutes</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Daugiau_apie_tekstines_eilutes&amp;diff=132"/>
		<updated>2023-01-27T10:49:20Z</updated>

		<summary type="html">&lt;p&gt;Monika: Naujos dalies proofreadinimas&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Daugiau apie sąrašus |next=Failų tvarkymas}}&lt;br /&gt;
{{BookCat}}&lt;br /&gt;
&lt;br /&gt;
Šiame skyriuje pamatysi, kiek šaunių dalykų galime padaryti su tekstine reikšme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def rėk(tekstinė_reikšmė):&lt;br /&gt;
    for raidė in tekstinė_reikšmė:&lt;br /&gt;
        print(&amp;quot;Duok man &amp;quot; + raidė)&lt;br /&gt;
        print(&amp;quot;&#039;&amp;quot; + raidė + &amp;quot;&#039;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
rėk(&amp;quot;Ačiū&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def vidurys(tekstas):&lt;br /&gt;
    print(&amp;quot;Raidė esanti viduryje yra:&amp;quot;, tekstas[len(tekstas) // 2])&lt;br /&gt;
&lt;br /&gt;
vidurys(&amp;quot;abcdefg&amp;quot;)&lt;br /&gt;
vidurys(&amp;quot;The Python Programming Language&amp;quot;)&lt;br /&gt;
vidurys(&amp;quot;Atlanta&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas:&lt;br /&gt;
&lt;br /&gt;
 Duok man A&lt;br /&gt;
 &#039;A&#039;&lt;br /&gt;
 Duok man č&lt;br /&gt;
 &#039;č&#039;&lt;br /&gt;
 Duok man i&lt;br /&gt;
 &#039;i&#039;&lt;br /&gt;
 Duok man ū&lt;br /&gt;
 &#039;ū&#039;&lt;br /&gt;
 Raidė esanti viduryje yra: d&lt;br /&gt;
 Raidė esanti viduryje yra: r&lt;br /&gt;
 Raidė esanti viduryje yra: a&lt;br /&gt;
&lt;br /&gt;
Šios dvi programos rodo, kad tekstinė reikšmė (string) yra keliais aspektais panaši į sąrašą (list). Funkcija &amp;lt;code&amp;gt;rėk()&amp;lt;/code&amp;gt; rodo, kad ciklas &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; gali būti naudojamas su tekstine reikšme lygiai taip pat kaip ir su sąrašais. Funkcija &amp;lt;code&amp;gt;vidurys()&amp;lt;/code&amp;gt; rodo, kad su tekstine reikšme galima naudoti sąrašo funkciją &amp;lt;code&amp;gt;len()&amp;lt;/code&amp;gt;, taip pat sąrašo indeksavimu ir pjaustymu. Taigi, dauguma sąrašo (list) funkcijų veikia ir su tekstine reikšme.&lt;br /&gt;
&lt;br /&gt;
Kita šio skyriaus funkcija parodo tam tikras tekstinės reikšmės ypatybes:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def pavertimas_didžiosiomis_raidėmis(tekstas):&lt;br /&gt;
    ## Ši funkcija, tekstinę reikšmę užrašo didžiosiomis raidėmis&lt;br /&gt;
    didžiosios_raidės = &amp;quot;&amp;quot;&lt;br /&gt;
    for raidė in tekstas:&lt;br /&gt;
        if &#039;a&#039; &amp;lt;= raidė &amp;lt;= &#039;z&#039;:&lt;br /&gt;
            lokacija = ord(raidė) - ord(&#039;a&#039;)&lt;br /&gt;
            naujas_ascii = lokacija + ord(&#039;A&#039;)&lt;br /&gt;
            raidė= chr(naujas_ascii)&lt;br /&gt;
        didžiosios_raidės = didžiosios_raidės + raidė&lt;br /&gt;
    return didžiosios_raidės&lt;br /&gt;
&lt;br /&gt;
print(pavertimas_didžiosiomis_raidėmis(&amp;quot;Įrašytas tekstas&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas:&lt;br /&gt;
&lt;br /&gt;
 ĮRAŠYTAS TEKSTAS&lt;br /&gt;
&lt;br /&gt;
Tai veikia, nes kompiuteris tekstinės reikšmės simbolius šifruoja skaičiais nuo 0 iki 1 114 111. Visos šios tekstinės reikšmės turi savo unikalias unikodo reikšmes. Pavyzdžiui, simboliui „A“ yra priskirtas skaičius 65, simbolis „B“ kompiuterio suprantamas kaip 66, o simbolis א yra 1488. Visi simboliai yra tarsi surikiuoti ir turi savo eilės numerį. Python&#039;o programavimo kalba turi funkciją, vadinamą &amp;lt;code&amp;gt;ord()&amp;lt;/code&amp;gt; (trumpinys angliško žodžio ordinal, kuris reiškia iš eilės), kuri grąžina simbolio skaičių (eilės numerį_. Taip pat Python&#039;o programavimo kalba turi ir atvirkščią funkciją, vadinamą &amp;lt;code&amp;gt;chr()&amp;lt;/code&amp;gt;, kuri skaičių paverčia simboliu. Supratus, kaip veikia šios funkcijos aukščiau užrašyta programa turėtų atrodyti logiška.&lt;br /&gt;
&lt;br /&gt;
Programos pirmoji eilutė &amp;lt;code&amp;gt;if &#039;a&#039; &amp;lt;= simbolis &amp;lt;= &#039;z&#039;:&amp;lt;/code&amp;gt; patikrina, ar raidė yra mažoji. Jeigu taip, tada naudojamos kitos programos eilutės:&lt;br /&gt;
Pirmiausia eilutė &amp;lt;code&amp;gt;lokacija= ord(simbolis) - ord(&#039;a&#039;)&amp;lt;/code&amp;gt; nurodo simbolio vietą: a = 0, b = 1, c = 2 ir t.t. &lt;br /&gt;
Tada nauja reikšmė randama su kodo eilute &amp;lt;code&amp;gt;naujas_ascii = lokacija + ord (&#039;A&#039;)&amp;lt;/code&amp;gt;. &lt;br /&gt;
Tada ši reikšmė paverčiama atgal į simbolį, kuris dabar yra didžioji raidė. &lt;br /&gt;
&lt;br /&gt;
Žinoma, tai tik programos pavyzdys, tačiau daug paprasčiau tai padaryti naudojantis funkcija &amp;lt;code&amp;gt;tekstoEilutė.upper()&amp;lt;/code&amp;gt;, kuri veikia su visomis kalbomis.&lt;br /&gt;
&lt;br /&gt;
O dabar pabandykime pasižiūrėti į šį pavyzdį:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;# Skaičius į tekstinę reikšmę&#039;&#039;&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 2&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;str(2)&#039;&#039;&#039;&lt;br /&gt;
 &#039;2&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;-123&#039;&#039;&#039;&lt;br /&gt;
 -123&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;str(-123)&#039;&#039;&#039;&lt;br /&gt;
 &#039;-123&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;# Tekstinė reikšmė į skaičių&#039;&#039;&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;&amp;quot;23&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
 &#039;23&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;int(&amp;quot;23&amp;quot;)&#039;&#039;&#039;&lt;br /&gt;
 23&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;&amp;quot;23&amp;quot; * 2&#039;&#039;&#039;&lt;br /&gt;
 &#039;2323&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;int(&amp;quot;23&amp;quot;) * 2&#039;&#039;&#039;&lt;br /&gt;
 46&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;# Skaičius po kablelio į tekstinę reikšmę&#039;&#039;&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;1.23&#039;&#039;&#039;&lt;br /&gt;
 1.23&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;str(1.23)&#039;&#039;&#039;&lt;br /&gt;
 &#039;1.23&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;# Skaičius po kablelio į skaičių&#039;&#039;&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;1.23&#039;&#039;&#039;&lt;br /&gt;
 1.23&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;int(1.23)&#039;&#039;&#039;&lt;br /&gt;
 1&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;int(-1.23)&#039;&#039;&#039;&lt;br /&gt;
 -1&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;# Tekstinė reikšmė į skaičių po kablelio&#039;&#039;&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;float(&amp;quot;1.23&amp;quot;)&#039;&#039;&#039;&lt;br /&gt;
 1.23&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;&amp;quot;1.23&amp;quot;&#039;&#039;&#039; &lt;br /&gt;
 &#039;1.23&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;float(&amp;quot;123&amp;quot;)&#039;&#039;&#039;&lt;br /&gt;
 123.0&lt;br /&gt;
&lt;br /&gt;
Jeigu dar nesupratai, tai funkcija &amp;lt;code&amp;gt;str()&amp;lt;/code&amp;gt; konvertuoja skaičių į tekstinę reikšmę (skaičiai suprantami, kaip simblių seka), o funkcija &amp;lt;code&amp;gt;int()&amp;lt;/code&amp;gt; konvertuoja tekstinę reikšmę į sveikąjį skaičių. Funkcija &amp;lt;code&amp;gt;float()&amp;lt;/code&amp;gt; konvertuoja tekstinę reikšmę arba skaičių į dešimtainį skaičių (skaičių su kableliu). Grįžtant prie funkcijos &amp;lt;code&amp;gt;str()&amp;lt;/code&amp;gt; – ji grąžina tekstinę įrašytos reikšmės versiją. Štai keli pavyzdžiai:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;str(1)&#039;&#039;&#039;&lt;br /&gt;
 &#039;1&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;str(234.14)&#039;&#039;&#039;&lt;br /&gt;
 &#039;234.14&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;str([4, 42, 10])&#039;&#039;&#039;&lt;br /&gt;
 &#039;[4, 42, 10]&#039;&lt;br /&gt;
&lt;br /&gt;
Funkcija &amp;lt;code&amp;gt;int()&amp;lt;/code&amp;gt; konvertuoja tekstinę reikšmę (ar dešimtainė skaičių) į sveikąjį skaičių. Panaši funkcija &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; konvertuoja skaičių ar tekstinę reikšmę į dešimtainį skaičių. Taip pat Python&#039;o programavimo kalba turi funkciją &amp;lt;code&amp;gt;type()&amp;lt;/code&amp;gt;, kuri grąžina kintamojo reikšmės tipą. Pavyzdžiui:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
v = &#039;123&#039;&lt;br /&gt;
print(type(v))&lt;br /&gt;
# &amp;lt;class &#039;str&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
v = 645.123&lt;br /&gt;
print(type(v))&lt;br /&gt;
# &amp;lt;class &#039;float&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
v = [1, 2, 3]&lt;br /&gt;
print(type(v))&lt;br /&gt;
# &amp;lt;class &#039;list&#039;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Naudojant funkciją &amp;lt;code&amp;gt;type()&amp;lt;/code&amp;gt; pasitikrink, ar grąžinamas toks reikšmės tipas, kurio tikėjaisi.&lt;br /&gt;
&lt;br /&gt;
Taip pat naudingas ir dažnai paprastose užduotyse naudojama funkcija &amp;lt;code&amp;gt;split()&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;&amp;quot;Čia yra tik žodžių kratinys&amp;quot;.split()&#039;&#039;&#039;&lt;br /&gt;
 [&#039;Čia&#039;, &#039;yra&#039;, &#039;tik&#039;, &#039;žodžių&#039;, &#039;kratinys&#039;]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;tekstas= &amp;quot;Pirma partija, antra partija, trečia, ketvirta&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;tekstas.split(&amp;quot;,&amp;quot;)&#039;&#039;&#039;&lt;br /&gt;
 [&#039;Pirma partija&#039;, &#039; antra partija&#039;, &#039; trečia&#039;, &#039; ketvirta&#039;]&lt;br /&gt;
&lt;br /&gt;
Ar pastebėjai kaip &amp;lt;code&amp;gt;split()&amp;lt;/code&amp;gt; konvertuoja tekstinę reikšmę į tekstinių reikšmių sąrašą (angl. list)? Kai funkcijai nenurodytas argmentas – skyriklis, pagal ką suskirstyti į skirtingus sąrašo elementus, funkcija skirsto pagal tarpus. Antrame pavyzdyje skyriklis yra kablelis.&lt;br /&gt;
Taip pat galima pridėti ir kitą argumentą, kuris nurodo &amp;lt;code&amp;gt;split()&amp;lt;/code&amp;gt; funkcijai, kurioje sąrašo vietoje reikia atskirti tekstą:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;sąrašas= tekstas.split(&amp;quot;,&amp;quot;)&#039;&#039;&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;len(sąrašas)&#039;&#039;&#039;&lt;br /&gt;
 4&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;sąrašas[-1]&#039;&#039;&#039;&lt;br /&gt;
 &#039; ketvirta&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;sąrašas = tekstas.split(&amp;quot;,&amp;quot;, 2)&#039;&#039;&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;len(sąrašas)&#039;&#039;&#039;&lt;br /&gt;
 3&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;sąrašas[-1]&#039;&#039;&#039;&lt;br /&gt;
 &#039; trečia, ketvirta&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO add more on strings --&amp;gt;&lt;br /&gt;
=== Tekstinės (ir sąrašo) reikšmės pjaustymas ir sujungimas ===&lt;br /&gt;
&lt;br /&gt;
Tekstinę reikšmę galima pjaustyti/skaidyti į skirtingas mažesnes reikšmes. Tą jau matei ankstesniame pavyzdyje su sąrašais, kai laužtiniuose skliaustuose &amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt; buvo nurodyta reikiama teksto vieta. Pjaustymo operatorius veikia taip: &amp;lt;code&amp;gt;tekstas[pradžios_indeksas:pabaigos_indeksas]&amp;lt;/code&amp;gt; (retais atvejais galime pridėti dar ir trečią argumentą, kaip apačioje esančiame pavyzdyje).&lt;br /&gt;
&lt;br /&gt;
Kad nesusipainiotum įrašydamas indekso skaičius, įsivaizduok, kad žirklėmis karpai tekstą, o programai nurodai, kurioje vietoje kirpti. Štai vienas pavyzdys, kaip tai viekia – geltonai pažymėtos kirpimo vietos, o raudonai ir mėlynai indekso numeris&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
{| style=&amp;quot;text-align:center&amp;quot; cellspacing=&amp;quot;0px&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex;color:red&amp;quot; |0&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex;color:red&amp;quot; |1&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex;color:red&amp;quot; |2&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; | ...&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex;color:blue&amp;quot; | -2&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex;color:blue&amp;quot; | -1&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;darr;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;darr;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;darr;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;darr;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;darr;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;darr;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;darr;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| tekstas = &lt;br /&gt;
|&amp;quot;&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
!S &lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
!T&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
!R&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
!I&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
!N&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
!G&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
|&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;uarr;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;uarr;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|[:&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|:]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Įsidėmėk, kad raudonai pažymėti indeksai skaičiuojami nuo pradžios, o mėlyni atvirkščiai nuo kito galo t.y. teksto pabaigos. Taip pat ar pastebėjai, kad skaičiuojant nuo galo nėra -0 reikšmės? Taip yra todėl, kad 0 visada priskiriamas tik reikšmės pradžiai:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|tekstas[1:4] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;TRI&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekstas[:5] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;STRIN&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekstas[:-1] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;STRIN&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekstas[-4:] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;RING&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekstas[2] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;R&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekstas[:] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;STRING&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekstas[::-1] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;GNIRTS&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;tekstas[1:4]&amp;lt;/tt&amp;gt; duoda visas &amp;lt;tt&amp;gt;tekstas&amp;lt;/tt&amp;gt; reikšmes tarp 1 ir 4, &amp;quot;&amp;lt;tt&amp;gt;TRI&amp;lt;/tt&amp;gt;&amp;quot;. Jei praleisi vieną iš argumentų [pradžios_indeksas:pabaigos indeksas], automatiškai gausi tekstinę reikšmę nuo pradžios ar pabaigos: &amp;lt;tt&amp;gt;tekstas[:5]&amp;lt;/tt&amp;gt; atspausdina&amp;quot;&amp;lt;tt&amp;gt;STRIN&amp;lt;/tt&amp;gt;&amp;quot;. Taip pat, tiek su &amp;lt;tt&amp;gt;pradžios_indeksas&amp;lt;/tt&amp;gt;, tiek su &amp;lt;tt&amp;gt;pabaigos_indeksas&amp;lt;/tt&amp;gt; galime naudoti raudonai ir mėlynai pavaizduotą skaičiavimo schemą - t.y. galime skaičuoti nuo pradžios, arba nuo pabaigos: &amp;lt;tt&amp;gt;tekstas[:-1]&amp;lt;/tt&amp;gt; duoda tą patį rezultatą kaip &amp;lt;tt&amp;gt;tekstas[:5]&amp;lt;/tt&amp;gt;, todėl, kad indekas -1 šiame žodyje yra toje pačioje vietoje kaip indeksas 5. Jeigu nenaudojame argumento kartu su dvitaškiu, tai skaičius traktuojamas kitaip, pavyzdžiui: &amp;lt;tt&amp;gt;tekstas[2]&amp;lt;/tt&amp;gt; duoda vieną raidę, kuri yra nurodytoje vietoje, šiuo atveju &amp;quot;&amp;lt;tt&amp;gt;R&amp;lt;/tt&amp;gt;&amp;quot;. Speciali pjaustymo operacija &amp;lt;tt&amp;gt;tekstas[:]&amp;lt;/tt&amp;gt; reiškia nuo pradžios iki pabaigos ir duodą visos tekstinės reikšmės ar sąrašo (list) kopiją. &lt;br /&gt;
&lt;br /&gt;
Na ir galiausiai, pjaustymo operacija gali turėti ir trečią argumentą, kuris suprantamas, kaip „žingsnio dydis“: &amp;lt;tt&amp;gt;tekstas[::-1]&amp;lt;/tt&amp;gt; yra &amp;lt;tt&amp;gt;tekstas&amp;lt;/tt&amp;gt; nuo pradžios iki pabaigos, kai nurodytas žingsnio dydis yra -1. Tai reiškia - kiekviena raidė, tik atvirkštine eilės tvarka. &amp;quot;&amp;lt;tt&amp;gt;STRING&amp;lt;/tt&amp;gt;&amp;quot; atvirkščiai yra &amp;quot;&amp;lt;tt&amp;gt;GNIRTS&amp;lt;/tt&amp;gt;&amp;quot; (jeigu nesupratai, tai pabandyk prasitestuoti įrašydamas kaip žingsnio ilgį skaičių 2).&lt;br /&gt;
&lt;br /&gt;
Visos šios pjaustymo operacijos veikia ir su sąrašais (lists). Šiuo atveju tekstinę reikšmę galime suprasti, kaip sąrašą, kai visi sąrašo elementai yra atskiros raidės. Iš šio skyriaus atsimink pagrindinį principą - į viską žiūrėk taip lyg karpytum, tai padės nesusipainioti įrašant indeksus.&lt;br /&gt;
&lt;br /&gt;
Papasakojau tau apie pjaustymą, dabar laikas sužinoti, kaip sujungti sąrašą į vieną tekstinę eilutę. &amp;lt;code&amp;gt;join()&amp;lt;/code&amp;gt; yra Python kalbos integruota funkcija, kuri naudojama sujungti kelis teksto fragmentus į vieną eilutę. Ji naudojama su teksto eilute kaip metodo argumentu ir jungia kiekvieną elementą iš sąrašo arba kolekcijos, naudojant tą eilutę kaip jungiamąjį simbolį. Pavyzdžiui:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
žodžiai = [&amp;quot;Sujungtas&amp;quot;, &amp;quot;sakinys&amp;quot;]&lt;br /&gt;
sakinys = &amp;quot; &amp;quot;.join(žodžiai)&lt;br /&gt;
print(sakinys) # &amp;quot;Sujungtas sakinys&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
žodžiai = [&amp;quot;Sujungtas&amp;quot;, &amp;quot;sakinys&amp;quot;]&lt;br /&gt;
sakinys = &amp;quot;,&amp;quot;.join(žodžiai)&lt;br /&gt;
print(sakinys) # &amp;quot;Sujungtas,sakinys&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Daugiau naudingų tekstinės eilutės funkcijų  ===&lt;br /&gt;
&lt;br /&gt;
Čia yra keletas kitų dažniausiai naudojamų tekstinės eilutės metodų Python kalboje:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
tekstas = &#039;Čia yra tekstinė eilutė. &#039;&lt;br /&gt;
&lt;br /&gt;
# `upper` keičia visus simbolius eilutėje į didžiąsias raides.&lt;br /&gt;
tekstas.upper() # &#039;ČIA YRA TEKSTINĖ EILUTĖ.&#039;&lt;br /&gt;
&lt;br /&gt;
# `lower` keičia visus simbolius eilutėje į mažąsias raides.&lt;br /&gt;
tekstas.lower() # &#039;čia yra tekstinė eilutė.&#039;&lt;br /&gt;
&lt;br /&gt;
# `strip` pašalina tarpus iš eilutės pradžios ir pabaigos.&lt;br /&gt;
tekstas.strip() # &#039;Čia yra tekstinė eilutė.&#039;&lt;br /&gt;
&lt;br /&gt;
# `replace` keičia visus senos eilutės pasikartojimus nauja eilute.&lt;br /&gt;
senas = &#039;tekstinė&#039;&lt;br /&gt;
naujas = &#039;pakeista&#039;&lt;br /&gt;
tekstas.replace(senas, naujas) # &#039;Čia yra pakeista eilutė.&#039;&lt;br /&gt;
&lt;br /&gt;
# `find` grąžina pirmo pasikartojimo indeksą, arba -1 jei nerasta.&lt;br /&gt;
ieškomas_žodis = &#039;yra&#039;&lt;br /&gt;
tekstas.find(ieškomas_žodis) # 4&lt;br /&gt;
&lt;br /&gt;
# `startswith` grąžina &#039;true&#039; jei eilutė prasideda su nurodytu priešdėliu.&lt;br /&gt;
priešdėlis = &#039;Čia&#039;&lt;br /&gt;
tekstas.startswith(priešdėlis) # True&lt;br /&gt;
&lt;br /&gt;
# `endswith` grąžina &#039;true&#039; jei eilutė baigiasi su nurodyta priesaga.&lt;br /&gt;
priesaga = &#039;eilutė.&#039;&lt;br /&gt;
tekstas.endswith(priesaga) # True&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Svarbu žinoti, kad šie metodai grąžina naują eilutę ir nekeičia originalios eilutės.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime iš arčiau į vieną iš šių metodų: &amp;lt;code&amp;gt;strip()&amp;lt;/code&amp;gt; yra Python kalbos integruota funkcija, kuri naudojama pašalinti tarpus iš teksto eilutės pradžios ir/arba pabaigos. Jei nori pašalinti kitus simbolius, tau reikia nurodyti juos kaip papildomus argumentus funkcijai. Pavyzdžiui:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
tekstas = &amp;quot;   Sveikas, Pasauli!   &amp;quot;&lt;br /&gt;
švarus_tekstas = tekstas.strip()&lt;br /&gt;
print(švarus_tekstas) # &amp;quot;Sveikas, Pasauli!&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
tekstas = &amp;quot;$$$Sveikas, Pasauli!$$$&amp;quot;&lt;br /&gt;
švarus_tekstas = tekstas.strip(&amp;quot;$&amp;quot;)&lt;br /&gt;
print(švarus_tekstas) # &amp;quot;Sveikas, Pasauli!&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Taigi strip() funkcija leidžia pašalinti ne tik tarpus, bet ir kitus simbolius iš teksto eilutės pradžios ir/arba pabaigos.&lt;br /&gt;
&lt;br /&gt;
=== Pavyzdžiai ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Ši programa reikalauja dešimtainių skaičių supratimo.&lt;br /&gt;
def į_tekstą(į_skaičių):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Konvertuoja skaičių į tekstą&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    tekstas = &amp;quot;&amp;quot;&lt;br /&gt;
    prefiksas = &amp;quot;&amp;quot;&lt;br /&gt;
    if į_skaičių &amp;lt; 0:&lt;br /&gt;
        prefiksas = &amp;quot;-&amp;quot;&lt;br /&gt;
        į_skaičių = -į_skaičių&lt;br /&gt;
    while į_skaičių // 10 != 0:&lt;br /&gt;
        tekstas = str(į_skaičių % 10) + tekstas&lt;br /&gt;
        į_skaičių= į_skaičių// 10&lt;br /&gt;
    tekstas = str(į_skaičių % 10) + tekstas&lt;br /&gt;
    return prefiksas + tekstas&lt;br /&gt;
&lt;br /&gt;
def į_skaičių(į_tekstą):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Konvertuoja tekstą į skaičių&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    skaičius = 0&lt;br /&gt;
    if į_tekstą[0] == &amp;quot;-&amp;quot;:&lt;br /&gt;
        daugiklis = -1&lt;br /&gt;
        į_tekstą = į_tekstą[1:]&lt;br /&gt;
    else:&lt;br /&gt;
        daugiklis = 1&lt;br /&gt;
    for c in į_tekstą:&lt;br /&gt;
        skaičius = skaičius* 10 + int(c)&lt;br /&gt;
    return skaičius * daugiklis&lt;br /&gt;
&lt;br /&gt;
print(į_tekstą(2))&lt;br /&gt;
print(į_tekstą(23445))&lt;br /&gt;
print(į_tekstą(-23445))&lt;br /&gt;
print(į_skaičių(&amp;quot;14234&amp;quot;))&lt;br /&gt;
print(į_skaičių(&amp;quot;12345&amp;quot;))&lt;br /&gt;
print(į_skaičių(&amp;quot;-3512&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas:&lt;br /&gt;
&lt;br /&gt;
 2&lt;br /&gt;
 23445&lt;br /&gt;
 -23445&lt;br /&gt;
 14234&lt;br /&gt;
 12345&lt;br /&gt;
 -3512&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
Parašyk programą, kuri prašo vartotojo įvesti žodį arba sakinį. Tada programa turi pasakyti, ar įvestas žodis/sakinys yra palindromas (žodis, eilėraštis arba frazė, skaitomi iš kairės į dešinę ir iš dešinės į kairę, išlaikantys tą pačią prasmę. Pvz., lietuvių k. žodis savas, sakinys &#039;Abu gaišo po šia guba&#039;)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
žodis = input(&amp;quot;Iveskite žodį&amp;quot;)​&lt;br /&gt;
​&lt;br /&gt;
def yra_palindromas(ž):&lt;br /&gt;
    ž_nuo_galo = &amp;quot;&amp;quot;&lt;br /&gt;
    for i in ž:&lt;br /&gt;
        ž_nuo_galo = i + ž_nuo_galo&lt;br /&gt;
    return ž_nuo_galo == ž​&lt;br /&gt;
​&lt;br /&gt;
ats = yra_palindromas(žodis)​&lt;br /&gt;
​&lt;br /&gt;
if ats:&lt;br /&gt;
    print(&amp;quot;Įvestas žodis yra palindromas&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Įvestas žodis nėra palindromas&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Daugiau apie sąrašus |next=Failų tvarkymas}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Loginiai_rei%C5%A1kiniai&amp;diff=124</id>
		<title>Vadovėlis/Loginiai reiškiniai</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Loginiai_rei%C5%A1kiniai&amp;diff=124"/>
		<updated>2023-01-24T16:06:28Z</updated>

		<summary type="html">&lt;p&gt;Monika: Pridėta užduočių&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Ciklai For |next=Žodynai}}&lt;br /&gt;
Šiame skyriuje padėsiu tau išsiaiškinti, kas yra loginiai reiškiniai. Sugalvojau nedidelį programos pavyzdį, kurio tau įvedinėti nebūtina: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 6&lt;br /&gt;
b = 7&lt;br /&gt;
c = 42&lt;br /&gt;
print(1, a == 6)&lt;br /&gt;
print(2, a == 7)&lt;br /&gt;
print(3, a == 6 and b == 7)&lt;br /&gt;
print(4, a == 7 and b == 7)&lt;br /&gt;
print(5, not a == 7 and b == 7)&lt;br /&gt;
print(6, a == 7 or b == 7)&lt;br /&gt;
print(7, a == 7 or b == 6)&lt;br /&gt;
print(8, not (a == 7 and b == 6))&lt;br /&gt;
print(9, not a == 7 and b == 6)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šios programos išvestis yra:&lt;br /&gt;
&lt;br /&gt;
 1 True&lt;br /&gt;
 2 False&lt;br /&gt;
 3 True&lt;br /&gt;
 4 False&lt;br /&gt;
 5 True&lt;br /&gt;
 6 True&lt;br /&gt;
 7 False&lt;br /&gt;
 8 True&lt;br /&gt;
 9 False&lt;br /&gt;
&lt;br /&gt;
Galvoje, turbūt, jau sukasi mintis: kas čia ką tik įvyko? Paaiškinsiu, kaip veikia kiekviena eilutė, kad mintys susidėliotų į savas vietas. Mano programoje gausu &amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt; sakinių, iš kurių kiekvienas išspausdina skaičių ir loginę reikšmę. Skaičius man padeda suprasti, kurio &amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt; sakinio rezultatas tai yra. Atkreipk dėmesį, kad kiekvienoje išvesties eilutėje yra žodis &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; (Klaidinga) arba &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; (Teisinga), o Python&#039;e kiekviena loginė reikšmė &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; gali būti užrašoma skaičiumi 0, o &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; 1.&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;!-- Pavyzdžiui: --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;gt;&amp;gt;&amp;gt; if 1: --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ...     print &amp;quot;True&amp;quot; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ... else: --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ...     print &amp;quot;False&amp;quot; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ...  --&amp;gt;&lt;br /&gt;
&amp;lt;!-- True --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;gt;&amp;gt;&amp;gt; if 0: --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ...     print &amp;quot;True&amp;quot; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ... else: --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ...     print &amp;quot;False&amp;quot; --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ...  --&amp;gt;&lt;br /&gt;
&amp;lt;!-- False --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;/syntaxhighlight&amp;gt; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eilučių:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(1, a == 6)&lt;br /&gt;
print(2, a == 7)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rezultatas atitinkamai yra &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt;, kadangi pirmasis reiškinys yra teisingas, o antrasis yra klaidingas. Trečioji eilutė: &amp;lt;code&amp;gt;print(3, a == 6 and b == 7)&amp;lt;/code&amp;gt; - šiek tiek skiriasi nuo prieš tai buvusių - joje yra naudojamas operatorius &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt;. Loginis operatorius &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt; grąžina rezultatą &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; tik tada, kai reiškiniai iš abiejų &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt; pusių yra teisingi, kitu atveju visas reiškinys bus klaidingas ir grąžins &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt;. Ketvirtoje eilutėje: print(4, a == 7 and b == 7) tik vienas iš reiškinių yra teisingas, dėl to eilutės rezultatas yra &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt;. Operatoriaus &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt; galimi rezultatai gali būti apibrėžti tokia lentele:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Reiškinys&lt;br /&gt;
!Rezultatas&lt;br /&gt;
|-  &lt;br /&gt;
|True &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt; True &lt;br /&gt;
|True &lt;br /&gt;
|-&lt;br /&gt;
|True &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt; False &lt;br /&gt;
|False &lt;br /&gt;
|-&lt;br /&gt;
|False &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt; True &lt;br /&gt;
|False&lt;br /&gt;
|-&lt;br /&gt;
|False &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt; False &lt;br /&gt;
|False&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, jei pirmas reiškinys yra klaidingas, tai Python’as nebetikrins antrojo, kadangi jis žino, jog visas reiškinys yra klaidingas. Parašyk šias eilutes ir paleisk programą: &amp;lt;code&amp;gt;False and print(&amp;quot;Labas&amp;quot;)&amp;lt;/code&amp;gt; ir palygink rezultatą su šios eilutės &amp;lt;code&amp;gt;True and print(&amp;quot;Labas&amp;quot;)&amp;lt;/code&amp;gt; rezultatu. Techniškai tai yra vadinama sutrumpintos grandies įvertinimas (short-circuit evaluation).&lt;br /&gt;
Penktoje eilutėje, &amp;lt;code&amp;gt;print(5, not a == 7 and b == 7)&amp;lt;/code&amp;gt;, yra naudojamas &amp;lt;code&amp;gt;not&amp;lt;/code&amp;gt; operatorius. &amp;lt;code&amp;gt;not&amp;lt;/code&amp;gt; suteikia priešingą reikšmę reiškiniui (reiškinys taip pat galėtų būti užrašomas taip: &amp;lt;code&amp;gt; print(5, a != 7 and b == 7)&amp;lt;/code&amp;gt;). Štai lentelė apibrėžianti operatoriaus &amp;lt;code&amp;gt;not&amp;lt;/code&amp;gt; rezultatus:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Reiškinys&lt;br /&gt;
!Rezultatas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;not&amp;lt;/code&amp;gt; True &lt;br /&gt;
|False &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;not&amp;lt;/code&amp;gt; False &lt;br /&gt;
|True&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Dvi toliau pateiktos eilutės: &amp;lt;code&amp;gt;print(6, a == 7 or b == 7)&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;print(7, a == 7 or b == 6)&amp;lt;/code&amp;gt; naudoja operatorių &amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt;. Pastarasis operatorius grąžina &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; jei pirmasis reiškinys yra teisingas arba, jei antrasis reiškinys yra teisingas, arba, jei abu reiškiniai yra teisingi. Jei nei vienas iš reiškinių nėra teisingas, tuomet yra grąžinamas False. Štai lentelė apibrėžianti operatoriaus &amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt; rezultatus:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Reiškinys&lt;br /&gt;
!Rezultatas&lt;br /&gt;
|-  &lt;br /&gt;
|True &amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt; True &lt;br /&gt;
| True&lt;br /&gt;
|-&lt;br /&gt;
|True &amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt; False &lt;br /&gt;
|True&lt;br /&gt;
|-&lt;br /&gt;
|False &amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt; True &lt;br /&gt;
|True  &lt;br /&gt;
|-&lt;br /&gt;
|False &amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt; False &lt;br /&gt;
| False &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Turėk omeny, jei pirmasis reiškinys yra teisingas Python’as nebetikrins antrojo, kadangi jis žino, jog visas reiškinys bus teisingas. Kaip jau minėjau anksčiau, naudojant operatorių &amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt;, jei bent vienas iš reiškinių yra teisingas, tuomet viso reiškinio galutinis rezultatas bus teisingas. Pirmoji dalis yra teisinga, todėl antroji dalis gali būti klaidinga arba teisinga, tačiau visa išraiška vis dar teisinga.&lt;br /&gt;
&lt;br /&gt;
Aštuntoje: &amp;lt;code&amp;gt;print(8, not (a == 7 and b == 6))&amp;lt;/code&amp;gt; ir devintoje: &amp;lt;code&amp;gt;print(9, not a == 7 and b == 6)&amp;lt;/code&amp;gt; eilutėse yra atvaizduojamas reiškinių grupavimo pavyzdys. Reiškinius Python’e galima sugrupuoti naudojant skliaustelius. Sugrupavę reiškinius, mes priverčiame Python’ą iš pradžių įvertinti reiškinius skliaustuose ir tik tada likusias reiškinio dalis. Atkreipk dėmesį, kad skliausteliai pakeitė reiškinį iš neteisingo į teisingą. Taip nutiko dėl to, kad operatorius &amp;lt;code&amp;gt;not&amp;lt;/code&amp;gt; buvo pritaikytas reiškiniui skliausteliuose, vietoj to, kad būtų pritaikytas tik &amp;lt;code&amp;gt;a == 7&amp;lt;/code&amp;gt; daliai. &lt;br /&gt;
Parodysiu pavyzdį, kaip rašant kodą galima pritaikyti loginius operatorius:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
sąrašas = [&amp;quot;Gyvenimas&amp;quot;, &amp;quot;Visata&amp;quot;, &amp;quot;Viskas&amp;quot;, &amp;quot;Benas&amp;quot;, &amp;quot;Liepa&amp;quot;, &amp;quot;Gyvenimas&amp;quot;, &amp;quot;Liepa&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
# kuriama sąrašo kopija. Peržiūrėk skyrių Daugiau apie sąrašus, kuriame sužinosi ką reiškia [:].&lt;br /&gt;
kopija = sąrašas[:]&lt;br /&gt;
# surūšiuoti sąrašą&lt;br /&gt;
kopija.sort()&lt;br /&gt;
ankstesnis = kopija[0]&lt;br /&gt;
del kopija[0]&lt;br /&gt;
&lt;br /&gt;
kiekis = 0&lt;br /&gt;
&lt;br /&gt;
# sąraše surask vienodus elementus&lt;br /&gt;
while kiekis &amp;lt; len(kopija) and kopija[kiekis] != ankstesnis:&lt;br /&gt;
    ankstesnis = kopija[kiekis]&lt;br /&gt;
    kiekis = kiekis + 1&lt;br /&gt;
&lt;br /&gt;
# Jei nėra atitikmens tuomet kiekis negali būti &amp;lt; len&lt;br /&gt;
# kadangi ciklas kol bus vykdomas tol, kol kiekis &amp;lt; len&lt;br /&gt;
# ir nėra rastas atitikmuo&lt;br /&gt;
&lt;br /&gt;
if kiekis &amp;lt; len(kopija):&lt;br /&gt;
    print(&amp;quot;Pirmasis atitikmuo:&amp;quot;, ankstesnis)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šios programos rezultatas:&lt;br /&gt;
Pirmasis atitikmuo: Gyvenimas&lt;br /&gt;
&lt;br /&gt;
Programa ieško vienodų elementų, tikrindama šią sąlygą: &amp;lt;code&amp;gt; while kiekis &amp;lt; len(kopija) and kopija[kiekis] nėra lygus ankstesnis &amp;lt;/code&amp;gt;. Kai &amp;lt;code&amp;gt;kiekis&amp;lt;/code&amp;gt; yra didesnis už paskutinio &amp;lt;code&amp;gt;kopija&amp;lt;/code&amp;gt; sąrašo elemento indeksą arba, kai atsiranda sutampantis elementas, operatorius &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt; nebėra tiesa, todėl ciklas pasibaigia. &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; sakinys patikrina ar ciklas &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; pasibaigė dėl to, kad buvo rastas sutampantis elementas.&lt;br /&gt;
&lt;br /&gt;
Šioje programoje yra panaudotas dar vienas &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt; operatoriaus „triukas“. Jei dar kartą pažiūrėsi į operatoriaus &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt; lentelę pamatysi, jog trečioje eilutėje yra netiesa ir netiesa. Jei &amp;lt;code&amp;gt;kiekis &amp;gt;= len(kopija)&amp;lt;/code&amp;gt; (kitais žodžiais, jei &amp;lt;code&amp;gt;kiekis &amp;lt; len(kopija)&amp;lt;/code&amp;gt; yra &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt;), tada kodo dalis &amp;lt;code&amp;gt;kopija[kiekis]&amp;lt;/code&amp;gt; nebus tikrinama. Taip yra todėl, kad Python’as žino, jei pirmasis teiginys yra klaidingas, tai abu jie nebegali būti teisingi. Šis „short circuit“  triukas yra naudingas tuomet, kai antrasis &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt; operatoriaus reiškinys gali sukelti klaidą. Aš panaudojau pirmąjį reiškinį (&amp;lt;code&amp;gt;kiekis &amp;lt; len(kopija)&amp;lt;/code&amp;gt;), kad patikrinčiau ar kintamasis &amp;lt;code&amp;gt;kiekis&amp;lt;/code&amp;gt; yra validus sąrašo &amp;lt;code&amp;gt;kopija&amp;lt;/code&amp;gt; indeksas. Jei manimi netiki, tuomet ištrink iš sąrašo elementus „Liepa“ ir „Gyvenimas“, sukeisk vietomis sąlygas &amp;lt;code&amp;gt;kiekis &amp;lt; len(kopija) and kopija[kiekis] != ankstesnis&amp;lt;/code&amp;gt; (rašyk: &amp;lt;code&amp;gt;kopija[kiekis] != ankstesnis and kiekis &amp;lt; len(kopija)&amp;lt;/code&amp;gt;) ir patikrink ar programa vis dar veikia, kaip turėtų. &lt;br /&gt;
&lt;br /&gt;
Loginiai operatoriai gali būti naudojami, kai mes norime patikrinti dvi arba daugiau skirtingų sąlygų vienu metu.&lt;br /&gt;
&lt;br /&gt;
=== Pastaba apie loginius operatorius ===&lt;br /&gt;
Dažna pradedančiųjų programuotojų klaida yra neteisingas supratimas, kaip veikia loginiai operatoriai ir kaip juos „skaito“ Python&#039;o interpretatorius. Pavyzdžiui: vos tik sužinojus apie operatorius &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt;, galima pagalvoti, kad išraiška &amp;lt;code&amp;gt;x == (&#039;a&#039; or &#039;b&#039;)&amp;lt;/code&amp;gt; patikrins, ar kintamasis &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; yra lygus &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;  arba kintamasis &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; lygus &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt;, tačiau taip nėra. Norint suprasti, apie ką kalbu, pradėk interaktyvią sesiją su interpretatoriumi ir įvesk šias išraiškas:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;a&#039; == (&#039;a&#039; or &#039;b&#039;)&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;b&#039; == (&#039;a&#039; or &#039;b&#039;)&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;a&#039; == (&#039;a&#039; and &#039;b&#039;)&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;b&#039; == (&#039;a&#039; and &#039;b&#039;)&lt;br /&gt;
&lt;br /&gt;
Štai yra rezultatai, kurie nėra intuityvūs:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039; &#039;a&#039; == (&#039;a&#039; or &#039;b&#039;)&#039;&#039;&#039;&lt;br /&gt;
 True&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039; &#039;b&#039; == (&#039;a&#039; or &#039;b&#039;)&#039;&#039;&#039;&lt;br /&gt;
 False&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039; &#039;a&#039; == (&#039;a&#039; and &#039;b&#039;)&#039;&#039;&#039;&lt;br /&gt;
 False &lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039; &#039;b&#039; == (&#039;a&#039; and &#039;b&#039;)&#039;&#039;&#039;&lt;br /&gt;
 True&lt;br /&gt;
&lt;br /&gt;
Šiuo momentu gali pasirodyti, jog operatoriai &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt; veikia klaidingai. Neatrodo logiška, jog pirmuose reiškiniuose &amp;lt;code&amp;gt;&#039;a&#039;&amp;lt;/code&amp;gt;  yra lygu &amp;lt;code&amp;gt;&#039;a&#039;&amp;lt;/code&amp;gt;  arba &amp;lt;code&amp;gt;&#039;b&#039;&amp;lt;/code&amp;gt;, tačiau &amp;lt;code&amp;gt;&#039;b&#039;&amp;lt;/code&amp;gt; nėra lygu &amp;lt;code&amp;gt;&#039;a&#039;&amp;lt;/code&amp;gt; arba &amp;lt;code&amp;gt;&#039;b&#039;&amp;lt;/code&amp;gt;. Taip pat yra ir su paskutiniu reiškiniu - jis neatrodo teisingas, nes &amp;lt;code&amp;gt;&#039;b&#039;&amp;lt;/code&amp;gt; yra lygus &amp;lt;code&amp;gt;&#039;a&#039;&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;&#039;b&#039;&amp;lt;/code&amp;gt;. Išsiaiškinus, kaip veikia Python’o interpretatorius pasidaro aišku, kodėl gavome būtent tokius rezultatus.&lt;br /&gt;
&lt;br /&gt;
Kai Python’o interpretatorius „pamato“ reiškinį, kuriame yra naudojamas &amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt;, jis paima pirmąjį teiginį ir patikrina ar jo rezultatas yra &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt;. Jei pirmasis teiginys yra &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt;, tuomet Python’as grąžina to teiginio rezultatą, netikrindamas antrojo. Kaip jau minėjau anksčiau, naudojant operatorių &amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt; užtenka patikrinti ar pirmasis teiginys yra teisingas, nes tada mes jau žinome, kad visas reiškinys yra teisingas ir programai nebereikia papildomai tikrinti antrojo. Iš kitos pusės, jei pirmasis teiginys grąžina &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt;, tada Python’as turi patikrinti ir antrojo teiginio rezultatą bei grąžinti jo reikšmę. Antrasis teiginys nusako visos išraiškos rezultatą, kadangi pirmoji pusė buvo klaidinga. Šis interpretatoriaus „tingus“ įvertinimas vadinamas &amp;quot;short circuiting&amp;quot; ir yra įprastas būdas įvertinti logines išraiškas daugelyje programavimo kalbų.&lt;br /&gt;
&lt;br /&gt;
Panašiai veikia ir operatorius &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt;: Python’as naudoja, &amp;quot;short circuit&amp;quot; techniką, kad pagreitintų išraiškos įvertinimą. Jei pirmasis teiginys yra klaidingas, tada visas reiškinys yra klaidingas. Kitu atveju, jei pirmasis teiginys yra teisingas, tada Python’as patikrina antrąjį ir grąžina galutinę reikšmę.&lt;br /&gt;
&lt;br /&gt;
Reiktų atkreiptį dėmesį į vieną niuansą: ne tik loginių išraiškų rezultatai gali būti apibrėžiami &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; arba &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; reikšmėmis. Norėdami patikrinti bet kurio objekto &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; loginę reikšmę, galite naudoti funkciją &amp;lt;code&amp;gt;bool(x)&amp;lt;/code&amp;gt;.  Žemiau yra pateikiama lentelė, kurioje yra pavyzdžiai, kokiems objektams Python’as priskiria &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; arba &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt;:  &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!True !!False&lt;br /&gt;
|-&lt;br /&gt;
|True ||False&lt;br /&gt;
|-&lt;br /&gt;
|1 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Skaičiai kitokie nei nulis ||Tekstinė eilutė &#039;None&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Ne tuščios tekstinės eilutės ||Tuščios tekstinės eilutės&lt;br /&gt;
|-&lt;br /&gt;
|Sąrašai (lists) turintys elementų ||Sąrašai (lists) neturintys elementų&lt;br /&gt;
|-&lt;br /&gt;
|Žodynai (dictionaries) turintys elementų ||Žodynai (dictionaries) neturintys elementų&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Dabar galime suprasti gluminančius rezultatus, kuriuos gavome, kai anksčiau išbandėme logines išraiškas. Pažiūrėkime, ką Python&#039;o interpretatorius „mato“, eidamas per šį kodą:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pirmasis atvejis:&#039;&#039;&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039; &#039;a&#039; == (&#039;a&#039; or &#039;b&#039;)&#039;&#039;&#039;  # Iš pradžių žiūrėk į reiškinį skliaustuose: &amp;quot;(&#039;a&#039; or &#039;b&#039;)&amp;quot;&lt;br /&gt;
                            # &#039;a&#039; yra netuščia teksto eilutė, todėl reiškinio rezultatas yra True&lt;br /&gt;
                            # Grąžink tą pirmą reikšmę: &#039;a&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039; &#039;a&#039; == &#039;a&#039; &#039;&#039;&#039;          # teksto eilutė &#039;a&#039; yra lygi teksto eilutei &#039;a&#039;, todėl reiškinio rezultatas yra True&lt;br /&gt;
 True&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Antrasis atvejis:&#039;&#039;&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039; &#039;b&#039; == (&#039;a&#039; or &#039;b&#039;)&#039;&#039;&#039;  # Iš pradžių žiūrėk į reiškinį skliaustuose: &amp;quot;(&#039;a&#039; or &#039;b&#039;)&amp;quot;&lt;br /&gt;
                            # &#039;a&#039; yra netuščia teksto eilutė, todėl reiškinio rezultatas yra True&lt;br /&gt;
                            # Grąžink tą pirmą reikšmę: &#039;a&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039; &#039;b&#039; == &#039;a&#039; &#039;&#039;&#039;          # teksto eilutė &#039;b&#039; nėra lygi teksto eilutei &#039;a&#039;, todėl reiškinio rezultatas yra False&lt;br /&gt;
 False &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Trečiasis atvejis:&#039;&#039;&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039; &#039;a&#039; == (&#039;a&#039; and &#039;b&#039;)&#039;&#039;&#039; # Iš pradžių žiūrėk į reiškinį skliaustuose: &amp;quot;(&#039;a&#039; and &#039;b&#039;)&amp;quot;&lt;br /&gt;
                            # &#039;a&#039; yra netuščia teksto eilutė, todėl reiškinio rezultatas yra True, patikrinkime antrąją reikšmę&lt;br /&gt;
                            # &#039;b&#039; yra netuščia teksto eilutė, todėl antrojo reiškinio rezultatas yra True&lt;br /&gt;
                            # Grąžink antrąją reikšmę kaip viso reiškinio rezultatą: &#039;b&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039; &#039;a&#039; == &#039;b&#039; &#039;&#039;&#039;          # teksto eilutė &#039;a&#039; nėra lygi teksto eilutei &#039;b&#039;, todėl reiškinio rezultatas yra False&lt;br /&gt;
 False&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ketvirtasis atvejis:&#039;&#039;&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039; &#039;b&#039; == (&#039;a&#039; and &#039;b&#039;)&#039;&#039;&#039; # Iš pradžių žiūrėk į reiškinį skliaustuose:&lt;br /&gt;
                            # &#039;a&#039; yra netuščia teksto eilutė, todėl reiškinio rezultatas yra True, patikrinkime antrąją reikšmę&lt;br /&gt;
                            # &#039;b&#039; yra netuščia teksto eilutė, todėl antrojo reiškinio rezultatas yra True&lt;br /&gt;
                            # Grąžink antrąją reikšmę kaip viso reiškinio rezultatą: &#039;b&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039; &#039;b&#039; == &#039;b&#039; &#039;&#039;&#039;          # teksto eilutė &#039;b&#039; yra lygi teksto eilutei &#039;b&#039;, todėl reiškinio rezultatas yra True&lt;br /&gt;
 True &lt;br /&gt;
&lt;br /&gt;
Taigi, Python’as tikrai teisingai įvertino duotuosius reiškinius, kurių rezultatai iš pradžių neatrodė akivaizdūs. Kaip minėjau anksčiau, svarbu atpažinti, kokį rezultatą tavo loginė išraiška grąžins ir kodėl.&lt;br /&gt;
&lt;br /&gt;
Grįžtant prie pradinių reiškinių, štai kaip juos turėtum aprašyti, kad jie grąžintų reikšmes, kurių tikiesi:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039; &#039;a&#039; == &#039;a&#039; or &#039;a&#039; == &#039;b&#039; &#039;&#039;&#039;&lt;br /&gt;
 True&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039; &#039;b&#039; == &#039;a&#039; or &#039;b&#039; == &#039;b&#039; &#039;&#039;&#039;&lt;br /&gt;
 True&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039; &#039;a&#039; == &#039;a&#039; and &#039;a&#039; == &#039;b&#039; &#039;&#039;&#039;&lt;br /&gt;
 False&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&#039;&#039;&#039; &#039;b&#039; == &#039;a&#039; and &#039;b&#039; == &#039;b&#039; &#039;&#039;&#039;&lt;br /&gt;
 False&lt;br /&gt;
&lt;br /&gt;
Įvertinus šiuos reiškinius yra gaunamos logines reikšmes &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; arba &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt;, o ne teksto eilutės, kad galėtume gauti teisingus palyginimo rezultatus.&lt;br /&gt;
&lt;br /&gt;
=== Pavyzdžiai ===&lt;br /&gt;
&#039;&#039;&#039;slaptazodis1.py&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
## Ši programa prašo vartotojo prisijungimo vardo ir slaptažodžio.&lt;br /&gt;
# Kai vartotojas juos įveda, programa įvertina ar jis gali prisijungti.&lt;br /&gt;
&lt;br /&gt;
vardas = input(&amp;quot;Koks tavo vardas? &amp;quot;)&lt;br /&gt;
slaptažodis = input(&amp;quot;Koks tavo slaptažodis? &amp;quot;)&lt;br /&gt;
if vardas == &amp;quot;Benas&amp;quot; and slaptažodis == &amp;quot;Penktadienis&amp;quot;:&lt;br /&gt;
    print(&amp;quot;Sveikas, Benai!&amp;quot;)&lt;br /&gt;
elif vardas == &amp;quot;Jonas&amp;quot; and slaptažodis == &amp;quot;Kietas&amp;quot;:&lt;br /&gt;
    print(&amp;quot;Sveikas, Jonai!&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Aš tavęs nepažįstu.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pavyzdiniai rezultatai:&lt;br /&gt;
&lt;br /&gt;
Koks tavo vardas? &#039;&#039;&#039;Benas&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Koks tavo slaptažodis? &#039;&#039;&#039;Penktadienis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sveikas, Benai!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Koks tavo vardas? &#039;&#039;&#039;Andrius&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Koks tavo slaptažodis? &#039;&#039;&#039;Pinigai&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Aš tavęs nepažįstu.&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
1. Parašyk programą, kurioje vartotojas turi atspėti tavo vardą, tačiau jie turės tik 3 spėjimus tai padaryti iki kol programa bus uždaryta.&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Pabandyk atspėti mano vardą!&amp;quot;)&lt;br /&gt;
kiekis = 1&lt;br /&gt;
vardas = &amp;quot;gilbertas&amp;quot;&lt;br /&gt;
spėjimas = input(&amp;quot;Koks mano vardas? &amp;quot;)&lt;br /&gt;
while kiekis &amp;lt; 3 and spėjimas.lower() != vardas:    # .lower visas didžiąsias raides teksto eilutėje pakeičia į mažąsias, todėl net jei vartotojas įves Gilbertas, tai vis tiek bus teisingas atsakymas&lt;br /&gt;
    print(&amp;quot;Tu neteisus!&amp;quot;)&lt;br /&gt;
    spėjimas = input(&amp;quot;Koks mano vardas? &amp;quot;)&lt;br /&gt;
    kiekis = kiekis + 1&lt;br /&gt;
&lt;br /&gt;
if spėjimas.lower() != vardas:&lt;br /&gt;
    print(&amp;quot;Tu neteisus!&amp;quot;) # ši žinutė nėra atspausdinama trečiąjį bandymą, todėl mes tai padarome dabar&lt;br /&gt;
    print(&amp;quot;Tu nebegali spėti.&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Taip! Mano vardas yra&amp;quot;, vardas + &amp;quot;!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Parašyk programą, kuri paprašytų įvesti du skaičius. Programa turėtų išvesti, ar abu skaičiai didesni už 10, ar abu skaičiai mažesni už 10, ar vienas didesnis, kitas mažesnis.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
pirmas_skaičius = int(input(&amp;quot;Įvesk pirmą skaičių: &amp;quot;))&lt;br /&gt;
antras_skaičius = int(input(&amp;quot;Įvesk antrą skaičių: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
if pirmas_skaičius &amp;gt; 10 and antras_skaičius &amp;gt; 10:&lt;br /&gt;
    print (&amp;quot;Abu skaičiai didesni nei 10&amp;quot;)&lt;br /&gt;
elif pirmas_skaičius &amp;lt; 10 and antras_skaičius &amp;lt; 10:&lt;br /&gt;
    print (&amp;quot;Abu skaičiai mažesni nei 10&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print (&amp;quot;Vienas iš skaičių mažesnis nei 10&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Parašyk programą, kuri paprašytų sukurti stiprų slaptažodį. Reikalavimai stipriam slaptažodžiui:&lt;br /&gt;
&lt;br /&gt;
* Jis turėtų būti sudarytas iš daugiau nei 6 simbolių&lt;br /&gt;
* Jis turėtų turėti bent vieną skaitmenį&lt;br /&gt;
* Jis turėtų turėti bent vieną specialų simbolį iš šio sąrašo: !#$?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programa turėtų išvesti, ar slaptažodis pakankamai stiprus, ar ne.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def ar_turi_skaičių(slaptažodis):&lt;br /&gt;
    skaičiai = &amp;quot;0123456789&amp;quot;&lt;br /&gt;
    rezultatas = False&lt;br /&gt;
    for raidė in slaptažodis:&lt;br /&gt;
        if raidė in skaičiai:&lt;br /&gt;
            rezultatas = True&lt;br /&gt;
            break&lt;br /&gt;
    return rezultatas&lt;br /&gt;
    &lt;br /&gt;
def ar_turi_simbolį(slaptažodis):&lt;br /&gt;
    simboliai = &amp;quot;!#$?&amp;quot;&lt;br /&gt;
    rezultatas = False&lt;br /&gt;
    for raidė in slaptažodis:&lt;br /&gt;
        if raidė in simboliai:&lt;br /&gt;
            rezultatas = True&lt;br /&gt;
            break&lt;br /&gt;
    return rezultatas&lt;br /&gt;
&lt;br /&gt;
def ar_slaptažodis_stiprus(slaptažodis):&lt;br /&gt;
    ar_užtenka_simbolių = len(slaptažodis) &amp;gt; 6&lt;br /&gt;
    ar_yra_skaitmuo = ar_turi_skaičių(slaptažodis)&lt;br /&gt;
    ar_yra_simbolis = ar_turi_simbolį(slaptažodis)&lt;br /&gt;
    return ar_užtenka_simbolių and ar_yra_skaitmuo and ar_yra_simbolis&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
įvestas_slaptažodis = input(&amp;quot;Įvesk slaptažodį: &amp;quot;)&lt;br /&gt;
ar_stiprus = ar_slaptažodis_stiprus(įvestas_slaptažodis)&lt;br /&gt;
&lt;br /&gt;
if ar_stiprus:&lt;br /&gt;
    print (&amp;quot;Slaptažodis pakankamai stiprus&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print (&amp;quot;Slaptažodis nepakankamai stiprus&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Ciklai For |next=Žodynai}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Ciklai_For&amp;diff=123</id>
		<title>Vadovėlis/Ciklai For</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Ciklai_For&amp;diff=123"/>
		<updated>2023-01-24T15:43:34Z</updated>

		<summary type="html">&lt;p&gt;Monika: Pridėta užduotis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Sąrašai |next=Loginiai reiškiniai}}&lt;br /&gt;
&lt;br /&gt;
{{BookCat}}&lt;br /&gt;
&lt;br /&gt;
=== Ciklas &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
[[Vaizdas:Ciklai.png|600px|frameless|center|Ciklai]]&lt;br /&gt;
&lt;br /&gt;
Ir štai naujas spausdinimo būdas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
nuo_vieno_iki_dešimt = range(1, 11)&lt;br /&gt;
for skaičius in nuo_vieno_iki_dešimt:&lt;br /&gt;
    print(skaičius)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ir kodo išvestis būtų tokia:&lt;br /&gt;
&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
Išvestis atrodo labai pažįstama, tačiau programos kodas atrodo kitaip. Pirmoje eilutėje naudojama funkcija &amp;lt;code&amp;gt;range&amp;lt;/code&amp;gt;. Funkcija &amp;lt;code&amp;gt;range&amp;lt;/code&amp;gt; naudoja du argumentus, tokius kaip šie &amp;lt;code&amp;gt;range(pradžia, pabaiga)&amp;lt;/code&amp;gt;, kurie nurodo intervalo galus. &amp;lt;code&amp;gt;pradžia&amp;lt;/code&amp;gt; yra pirmasis intervalo skaičius. &amp;lt;code&amp;gt;pabaiga&amp;lt;/code&amp;gt; yra vienu didesnis nei paskutinis intervalo skaičius. Atkreipk dėmesį, kad šį kodą galima parašyti ir trumpiau:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for skaičius in range(1, 11):&lt;br /&gt;
    print(skaičius)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;range&amp;lt;/code&amp;gt; funkcija grąžina iteraciją (proceso kartojimas skirtas rezultatų sekos generavimui). Tai galima paversti sąrašu naudojant funkciją &amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;.&lt;br /&gt;
Štai keli pavyzdžiai, parodantys, kas nutinka su komanda &amp;lt;code&amp;gt;range&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;range(1, 10)&#039;&#039;&#039;&lt;br /&gt;
 range(1, 10)&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;list(range(1, 10))&#039;&#039;&#039;&lt;br /&gt;
 [1, 2, 3, 4, 5, 6, 7, 8, 9]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;list(range(-32, -20))&#039;&#039;&#039;&lt;br /&gt;
 [-32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;list(range(5,21))&#039;&#039;&#039;&lt;br /&gt;
 [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;list(range(5))&#039;&#039;&#039;&lt;br /&gt;
 [0, 1, 2, 3, 4]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &#039;&#039;&#039;list(range(21, 5))&#039;&#039;&#039;&lt;br /&gt;
 []&lt;br /&gt;
&lt;br /&gt;
Eilutė &amp;lt;code&amp;gt;for skaičius in nuo_vieno_iki_dešimt:&amp;lt;/code&amp;gt; naudoja &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; valdymo struktūrą. &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; struktūra atrodo taip: &amp;lt;code&amp;gt;for elementas in sąrašas:&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;sąrašas&amp;lt;/code&amp;gt; pereinamas nuo pirmojo sąrašo elemento iki paskutinio. Kai &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; eina per kiekvieną sąrašo elementą, jis kiekvieną reikšmę priskiria &amp;lt;code&amp;gt;elementas&amp;lt;/code&amp;gt; kintamajam. Tai leidžia naudoti &amp;lt;code&amp;gt;elementas&amp;lt;/code&amp;gt; kiekvieną kartą, kai ciklas &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; pereinamas iš eilės. Štai dar vienas pavyzdys, kad būtų lengviau suprasti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
demoSąrašas = [&amp;quot;gyvybė&amp;quot;, 42, &amp;quot;visata&amp;quot;, 6, &amp;quot;ir&amp;quot;, 9, &amp;quot;oras&amp;quot;]&lt;br /&gt;
for elementas in demoSąrašas:&lt;br /&gt;
    print(&amp;quot;Dabartinis elementas yra:&amp;quot;, elementas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas yra:&lt;br /&gt;
&lt;br /&gt;
 Dabartinis elementas yra: gyvybė&lt;br /&gt;
 Dabartinis elementas yra: 42&lt;br /&gt;
 Dabartinis elementas yra: visata&lt;br /&gt;
 Dabartinis elementas yra: 6&lt;br /&gt;
 Dabartinis elementas yra: ir&lt;br /&gt;
 Dabartinis elementas yra: 9&lt;br /&gt;
 Dabartinis elementas yra: oras&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kaip ciklas &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; praeina ir nustato elemento reikšmę kiekvienam sąrašo elementui. Taigi, kam tinkamas &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;? Pirmasis naudojimas yra peržiūrėti visus sąrašo elementus ir ką nors padaryti su kiekvienu iš jų. Štai greitas būdas sudėti visus elementus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
sąrašas = [2, 4, 6, 8]&lt;br /&gt;
suma = 0&lt;br /&gt;
for skaičius in sąrašas:&lt;br /&gt;
    suma = suma + skaičius&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Suma yra:&amp;quot;, suma)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
o išvestis yra tiesiog:&lt;br /&gt;
&lt;br /&gt;
Suma yra: 20&lt;br /&gt;
&lt;br /&gt;
Arba gali parašyti programą, kad sužinotum, ar sąraše yra dublikatų. Pavyzdžiui kaip ši programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
sąrašas = [4, 5, 7, 8, 9, 1, 0, 7, 10]&lt;br /&gt;
sąrašas.sort()&lt;br /&gt;
praeitas = None&lt;br /&gt;
for elementas in sąrašas:&lt;br /&gt;
    if praeitas == elementas:&lt;br /&gt;
        print(&amp;quot;Dublikatas&amp;quot;, praeitas, &amp;quot;rastas.&amp;quot;)&lt;br /&gt;
    praeitas = elementas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ir turime rezultatą:&lt;br /&gt;
&lt;br /&gt;
 Dublikatas 7 rastas.&lt;br /&gt;
&lt;br /&gt;
Gerai, tai kaip gi tai veikia? Čia yra speciali derinimo versija, kuri turėtų tau padėti suprasti (tau to nereikia įvesti):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
l = [4, 5, 7, 8, 9, 1, 0, 7, 10]&lt;br /&gt;
print(&amp;quot;l = [4, 5, 7, 8, 9, 1, 0, 7, 10]&amp;quot;, &amp;quot;\t\tl:&amp;quot;, l)&lt;br /&gt;
l.sort()&lt;br /&gt;
print(&amp;quot;l.sort()&amp;quot;, &amp;quot;\t\tl:&amp;quot;, l)&lt;br /&gt;
praeitas = l[0]&lt;br /&gt;
print(&amp;quot;praeitas = l[0]&amp;quot;, &amp;quot;\t\tpraeitas:&amp;quot;, praeitas)&lt;br /&gt;
del l[0]&lt;br /&gt;
print(&amp;quot;del l[0]&amp;quot;, &amp;quot;\t\tl:&amp;quot;, l)&lt;br /&gt;
for elementas in l:&lt;br /&gt;
    if praeitas == elementas:&lt;br /&gt;
        print(&amp;quot;Dublikatas&amp;quot;, praeitas, &amp;quot;rastas.&amp;quot;)&lt;br /&gt;
    print(&amp;quot;if praeitas == elementas:&amp;quot;, &amp;quot;\t\tpraeitas:&amp;quot;, praeitas, &amp;quot;\telementas:&amp;quot;, elementas)&lt;br /&gt;
    praeitas = elementas&lt;br /&gt;
    print(&amp;quot;praeitas = elementas&amp;quot;, &amp;quot;\t\tpraeitas:&amp;quot;, praeitas, &amp;quot;\telementas:&amp;quot;, elementas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ir kodo išvestis būtų:&lt;br /&gt;
&lt;br /&gt;
 l = [4, 5, 7, 8, 9, 1, 0, 7, 10]        l: [4, 5, 7, 8, 9, 1, 0, 7, 10]&lt;br /&gt;
 l.sort()                l: [0, 1, 4, 5, 7, 7, 8, 9, 10]&lt;br /&gt;
 praeitas = l[0]             praeitas: 0&lt;br /&gt;
 del l[0]                l: [1, 4, 5, 7, 7, 8, 9, 10]&lt;br /&gt;
 if praeitas == elementas:        praeitas: 0         elementas: 1&lt;br /&gt;
 praeitas = elementas             praeitas: 1         elementas: 1&lt;br /&gt;
 if praeitas == elementas:        praeitas: 1         elementas: 4&lt;br /&gt;
 praeitas = elementas             praeitas: 4         elementas: 4&lt;br /&gt;
 if praeitas == elementas:        praeitas: 4         elementas: 5&lt;br /&gt;
 praeitas = elementas             praeitas: 5         elementas: 5&lt;br /&gt;
 if praeitas == elementas:        praeitas: 5         elementas: 7&lt;br /&gt;
 praeitas = elementas             praeitas: 7         elementas: 7&lt;br /&gt;
 Dublikatas 7 rastas.&lt;br /&gt;
 if praeitas == elementas:        praeitas: 7         elementas: 7&lt;br /&gt;
 praeitas = elementas             praeitas: 7         elementas: 7&lt;br /&gt;
 if praeitas == elementas:        praeitas: 7         elementas: 8&lt;br /&gt;
 praeitas = elementas             praeitas: 8         elementas: 8&lt;br /&gt;
 if praeitas == elementas:        praeitas: 8         elementas: 9&lt;br /&gt;
 praeitas = elementas             praeitas: 9         elementas: 9&lt;br /&gt;
 if praeitas == elementas:        praeitas: 9         elementas: 10&lt;br /&gt;
 praeitas = elementas             praeitas: 10        elementas: 10&lt;br /&gt;
&lt;br /&gt;
Priežastis, kodėl į kodą įdėjau tiek daug &amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt; komandų, buvo ta, kad galėtum matyti, kas vyksta kiekvienoje eilutėje (beje, jei kažkada negalėsi suprasti, kodėl programa neveikia, pabandyk įdėti spausdintų komandų tose vietose, kur nori sužinoti, kas vyksta). Pirmiausia programa prasideda nuobodžiu senu sąrašu. Toliau programa surūšiuoja sąrašą. Tai darome tam, kad visi dublikatai būtų dedami vienas šalia kito. Tada programa apibrėžia kintamąjį &amp;lt;code&amp;gt;praeitas&amp;lt;/code&amp;gt;. Tada pirmasis sąrašo elementas ištrinamas, kad pirmasis elementas nebūtų klaidingai laikomas dublikatu. Toliau aprašomas &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; ciklas. Kiekvienas sąrašo elementas tikrinamas, ar jis sutampa su ankstesniu. Jeigu sutampa – dublikatas rastas. Tada kintamasis &amp;lt;code&amp;gt;praeitas&amp;lt;/code&amp;gt; yra pakeičiamas taip, kad kitame &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; cikle kintamasis &amp;lt;code&amp;gt;praeitas&amp;lt;/code&amp;gt; būtų ankstesnis dabartinis elementas. Be abejo, nustatytome, kad 7 yra dublikatas.  (Atkreipk dėmesį, kaip &amp;lt;code&amp;gt;\t&amp;lt;/code&amp;gt; naudojamas spausdinant tabuliavimo žymę (tab&#039;as).)  &lt;br /&gt;
&lt;br /&gt;
Kitas būdas naudoti &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; ciklą yra norint ką nors padaryti tam tikrą skaičių kartų. Štai trumpas kodas, kaip atspausdinti pirmuosius 9 „Fibonacci“ serijos sakičius:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 1&lt;br /&gt;
b = 1&lt;br /&gt;
for c in range(1, 10):&lt;br /&gt;
    print(a, end=&amp;quot; &amp;quot;)&lt;br /&gt;
    n = a + b&lt;br /&gt;
    a = b&lt;br /&gt;
    b = n&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
su stebėtinu rezultatu:&lt;br /&gt;
&lt;br /&gt;
 1 1 2 3 5 8 13 21 34&lt;br /&gt;
&lt;br /&gt;
Viskas, ką galima padaryti naudojant &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; ciklą, taip pat gali būti padaryta naudojant &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; ciklą, bet &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; ciklas suteikia lengvą būdą pereiti per visus sąrašo elementus arba ką nors padaryti tam tikrą skaičių kartų.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sąrašų rūšiavimas ===&lt;br /&gt;
&lt;br /&gt;
Ciklas &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; taip pat dažnai naudojamas sąrašų rūšiavimo užduotyse. Paprastų sąrašų, kurie yra sudaryti iš skaičių ar eilučių, rūšiavimui gali naudoti funkciją &amp;lt;code&amp;gt;sort&amp;lt;/code&amp;gt;, kuri buvo paminėta prieš tai skaitytame skyriuje. Tačiau gali susidurti su situacijomis, kai ši funkcija yra nepakankama. Egzistuoja daug rūšiavimo algoritmų, tačiau čia išmoksi vieną paprasčiausių iš jų - burbuliuko algoritmą (angl. bubble sort).&lt;br /&gt;
&lt;br /&gt;
Algoritmo idėja yra tokia, kad iš kairės į dešinę lyginame gretimų elementų poras ir sukeičiame elementus vietomis, jei pirmasis yra didesnis už antrąjį. Kiekvienos iteracijos metu, didžiausias nesurūšiuotas elementas juda link sąrašo galo. Toks judėjimas primena burbuliukų vandenyje judėjimą į paviršių, iš ko ir kilo algoritmo pavadinimas. Iteracijos kartojamos tol, kol visi elementai yra savo vietose.&lt;br /&gt;
&lt;br /&gt;
[[Vaizdas:1 iteracija.png|miniatiūra]]&lt;br /&gt;
Pavyzdžiui, surūšiuokime jau prieš tai naudotą sąrašą [42, 7, 0, 123].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pirma iteracija:&#039;&#039;&#039;&lt;br /&gt;
* Lyginami pirmi du elementai. Antrasis yra didesnis už pirmąjį, todėl elementai pakeičiami vietomis.&lt;br /&gt;
* Lyginami antras ir trečias elementai. Trečiasis yra didesnis už antrąjį, todėl elementai pakeičiami vietomis.&lt;br /&gt;
* Lyginami paskutiniai du elementai. Jie yra išdėstyti tinkamai, todėl nėra pakeičiami vietomis.&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Vaizdas:2 iteracija.png|miniatiūra]]&lt;br /&gt;
&#039;&#039;&#039;Antra iteracija:&#039;&#039;&#039;&lt;br /&gt;
* Lyginami pirmi du elementai. Antrasis yra didesnis už pirmąjį, todėl elementai pakeičiami vietomis.&lt;br /&gt;
* Lyginami antras ir trečias elementai. Jie yra išdėstyti tinkamai, todėl nėra pakeičiami vietomis.&lt;br /&gt;
* Lyginami paskutiniai du elementai. Jie yra išdėstyti tinkamai, todėl nėra pakeičiami vietomis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Vaizdas:3 iteracija.png|miniatiūra]]&lt;br /&gt;
&#039;&#039;&#039;Trečia iteracija:&#039;&#039;&#039;&lt;br /&gt;
* Elementai išdėstyti tinkamai.&lt;br /&gt;
* Elementai išdėstyti tinkamai.&lt;br /&gt;
* Elementai išdėstyti tinkamai.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
Trečios iteracijos metu algoritmas neatlieka jokių pakeitimų, tad nustatoma, kad sąrašas yra surūšiuotas, algoritmas baigtas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Algoritmo kodą galima užrašyti taip:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def burbuliukoRūšiavimas(sąrašas):&lt;br /&gt;
    sąrašoIlgis = len(sąrašas)&lt;br /&gt;
    # Maksimalus iteracijų skaičius - sąrašo ilgis - 1 elementas&lt;br /&gt;
    for i in range(sąrašoIlgis  - 1): &lt;br /&gt;
        arBuvoPakeitimų = 0&lt;br /&gt;
        # Kiekvienoje iteracijoje lyginami visi elementai&lt;br /&gt;
        for j in range(sąrašoIlgis - 1): &lt;br /&gt;
            if sąrašas[j] &amp;gt; sąrašas[j + 1]:&lt;br /&gt;
                # Sukuriame laikiną elementą, kuris saugo pirmąjį lyginamą elementą&lt;br /&gt;
                laikinasElementas = sąrašas[j]&lt;br /&gt;
                # Pirmąjam elementui priskiriame antro elemento reikšmę&lt;br /&gt;
                sąrašas[j] = sąrašas[j + 1]&lt;br /&gt;
                # Antrajam elementui priskiriame laikino elemento reikšmę, kuri yra lygi buvusiam pirmąjam elementui&lt;br /&gt;
                sąrašas[j + 1] = laikinasElementas&lt;br /&gt;
                # Pasižymime, kad iteracijos metu buvo padaryti pakeitimai, taigi reikės papildomų iteracijų&lt;br /&gt;
                arBuvoPakeitimų = 1&lt;br /&gt;
        # Jei visos iteracijos metu nebuvo nei vieno pakeitimo, algoritmas baigiamas&lt;br /&gt;
        if arBuvoPakeitimų == 0:&lt;br /&gt;
            break&lt;br /&gt;
    return sąrašas&lt;br /&gt;
&lt;br /&gt;
rezultatas = burbuliukoRūšiavimas([42, 7, 0, 123])&lt;br /&gt;
&lt;br /&gt;
print (rezultatas)&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Programos išvestis: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[0, 7, 42, 123]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
1. Sukurk naują sarašą, kuris turėtų tik skaičiaus 3 daliklius (skaičius turi dalintis iš 3) iš &#039;x&#039; sąrašo ir tik skaičiaus 5 daliklius iš &#039;y&#039; sąrašo.&lt;br /&gt;
&lt;br /&gt;
x = [1,2,3,4,5,6,7,8,9,10]&lt;br /&gt;
&lt;br /&gt;
y = [11,12,13,14,15,16,17,18,19,20]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
x = [1,2,3,4,5,6,7,8,9,10]&lt;br /&gt;
y = [11,12,13,14,15,16,17,18,19,20]&lt;br /&gt;
c = []&lt;br /&gt;
for i in x:&lt;br /&gt;
	if i % 3 == 0:&lt;br /&gt;
		c.append(i)&lt;br /&gt;
for i in y:&lt;br /&gt;
	if i % 5 == 0:&lt;br /&gt;
		c.append(i)&lt;br /&gt;
print(c)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Parašyk programą, kuri atspausdintų eglutę, pagal vartotojo įvesta eglutės aukštį.&lt;br /&gt;
&lt;br /&gt;
Pvz. Įvestis = 3&lt;br /&gt;
&lt;br /&gt;
Išvestis:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
*&lt;br /&gt;
**&lt;br /&gt;
***&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def spausdintiEglutę(aukstis):&lt;br /&gt;
    for i in range(1, aukstis + 1):&lt;br /&gt;
        print(&#039;*&#039;*i)&lt;br /&gt;
&lt;br /&gt;
spausdintiEglutę(3)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Parašyk programą, kuri prašytų vartotojo įvesti skaičių ir išspausdintų to skaičiaus daugybos lentelę iki 10.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def daugybos_lentelė(skaičius):&lt;br /&gt;
    for indeksas in range(1, 11):&lt;br /&gt;
        print (skaičius, &amp;quot; * &amp;quot;, indeksas, &amp;quot; = &amp;quot;, skaičius * indeksas)&lt;br /&gt;
    &lt;br /&gt;
įvestas_skaičius = int(input(&amp;quot;Įvesk skaičių: &amp;quot;))&lt;br /&gt;
daugybos_lentelė(įvestas_skaičius)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Sąrašai |next=Loginiai reiškiniai}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/S%C4%85ra%C5%A1ai&amp;diff=122</id>
		<title>Vadovėlis/Sąrašai</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/S%C4%85ra%C5%A1ai&amp;diff=122"/>
		<updated>2023-01-23T16:55:16Z</updated>

		<summary type="html">&lt;p&gt;Monika: Pridėta užduočių&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Rekursinės funkcijos |next=Ciklai For}}&lt;br /&gt;
{{BookCat}}&lt;br /&gt;
&lt;br /&gt;
=== Kintamieji, turintys daugiau nei vieną reikšmę ===&lt;br /&gt;
Tu jau žinai įprastus kintamuosius, kuriuose saugoma viena reikšmė. Tačiau kiti kintamųjų tipai gali turėti daugiau nei vieną reikšmę. Jie vadinami konteineriais (containers), nes juose gali būti daugiau nei vienas objektas. Paprasčiausias tipas vadinamas sąrašu (list). Sąrašo pavyzdys:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
kuris = int(input(&amp;quot;Kuris mėnuo (1-12)? &amp;quot;))&lt;br /&gt;
mėnesiai = [&amp;quot;Sausis&amp;quot;, &amp;quot;Vasaris&amp;quot;, &amp;quot;Kovas&amp;quot;, &amp;quot;Balandis&amp;quot;, &amp;quot;Gegužė&amp;quot;, &amp;quot;Birželis&amp;quot;, &amp;quot;Liepa&amp;quot;,&lt;br /&gt;
          &amp;quot;Rugpjūtis&amp;quot;, &amp;quot;Rugsėjis&amp;quot;, &amp;quot;Spalis&amp;quot;, &amp;quot;Lapkritis&amp;quot;, &amp;quot;Gruodis&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
if 1 &amp;lt;= kuris &amp;lt;= 12:&lt;br /&gt;
    print(&amp;quot;Mėnuo yra &amp;quot;, mėnesiai[kuris - 1])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pavyzdžio išvestis būtų:&lt;br /&gt;
&lt;br /&gt;
 Kuris mėnuo (1-12)? &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
 Mėnuo yra Kovas&lt;br /&gt;
&lt;br /&gt;
Šiame pavyzdyje &amp;lt;code&amp;gt;mėnesiai&amp;lt;/code&amp;gt; yra sąrašas. Kintamasis &amp;lt;code&amp;gt;mėnesiai&amp;lt;/code&amp;gt; yra apibrėžtas šia eilute &amp;lt;code&amp;gt;mėnesiai = [&amp;quot;Sausis&amp;quot;, &amp;quot;Vasaris&amp;quot;, &amp;quot;Kovas&amp;quot;, &amp;quot;Balandis&amp;quot;, &amp;quot;Gegužė&amp;quot;, &amp;quot;Birželis&amp;quot;, &amp;quot;Liepa&amp;quot;,&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;&amp;quot;Rugpjūtis&amp;quot;, &amp;quot;Rugsėjis&amp;quot;, &amp;quot;Spalis&amp;quot;, &amp;quot;Lapkritis&amp;quot;, &amp;quot;Gruodis&amp;quot;]&amp;lt;/code&amp;gt; (atkreipk dėmesį, kad viena komanda parašyta per dvi eilutes; paprastai keliant eilutę yra naudojamas simbolis / tačiau šiuo atveju jis nėra būtinas, nes Python&#039;as supranta, kad viskas, kas yra laužtiniuose skliaustuose yra kartu). &amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt; pradeda ir užbaigia sąrašą, o kableliai (&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;) atskiria sąrašo elementus. Sąrašas naudojamas šioje dalyje: &amp;lt;code&amp;gt;mėnesiai[kuris - 1]&amp;lt;/code&amp;gt;. Sąrašas susideda iš elementų, kurie sunumeruoti pradedant nuo 0. Kitaip tariant, norint sąraše pasiekti elementą &amp;quot;Sausis&amp;quot;, turėtum rašyti &amp;lt;code&amp;gt;mėnesiai[0]&amp;lt;/code&amp;gt;. Nurodant sąrašui skaičių, tu gauni reikšmę išsaugotą toje sąrašo pozicijoje.&lt;br /&gt;
&lt;br /&gt;
Sąlyginis sakinys &amp;lt;code&amp;gt; if 1 &amp;lt;= kuris &amp;lt;= 12:&amp;lt;/code&amp;gt; tikrina, ar skaičius kintamajame &amp;lt;code&amp;gt;kuris&amp;lt;/code&amp;gt; yra tarp vieno ir dvylikos imtinai (tiek yra mėnesių ir taip jie numeruojami).&lt;br /&gt;
&lt;br /&gt;
Viename sąraše gali būti saugomi ir skirtingų tipų duomenys. Kiekvienas elementas saugo vis kitą reikšmę. Pavyzdžiui, sąrašas sukurtas šiuo kodu: &amp;lt;code&amp;gt;demoSąrašas = [&amp;quot;gyvybė&amp;quot;, 42, &amp;quot;visata&amp;quot;, 6, &amp;quot;ir&amp;quot;, 9]&amp;lt;/code&amp;gt; atrodytų taip:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
!elemento numeris&lt;br /&gt;
!0 &lt;br /&gt;
!1  &lt;br /&gt;
!2 &lt;br /&gt;
!3 &lt;br /&gt;
!4 &lt;br /&gt;
!5 &lt;br /&gt;
|-&lt;br /&gt;
|demoSąrašas &lt;br /&gt;
|&amp;quot;gyvybė&amp;quot; &lt;br /&gt;
|42 &lt;br /&gt;
|&amp;quot;visata&amp;quot; &lt;br /&gt;
|6 &lt;br /&gt;
|&amp;quot;ir&amp;quot;&lt;br /&gt;
|9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Kiekvienas elementas pasiekiamas per jo eilės numerį – indeksą, todėl komanda &amp;lt;code&amp;gt;demoSąrašas[0]&amp;lt;/code&amp;gt; pateiktų reikšmę: &amp;lt;code&amp;gt;&amp;quot;gyvybė&amp;quot;&amp;lt;/code&amp;gt;, o komanda &amp;lt;code&amp;gt;demoSąrašas[1]&amp;lt;/code&amp;gt; – reikšmę &amp;lt;code&amp;gt;42&amp;lt;/code&amp;gt; ir taip toliau iki kol &amp;lt;code&amp;gt;demoSąrašas[5]&amp;lt;/code&amp;gt; pateikia reikšmę &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Daugiau sąrašų funkcijų ===&lt;br /&gt;
Kitas pavyzdys yra skirtas parodyti daugybę kitų dalykų, kuriuos gali padaryti sąrašai (šį kartą nesitikiu, kad viską pats sugebėsi parašyti, bet tikriausiai turėtum šiek tiek pažaisti su sąrašais interaktyviame režime, kol apsiprasi su jais). Pavyzdys:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
demoSąrašas = [&amp;quot;gyvybė&amp;quot;, 42, &amp;quot;visata&amp;quot;, 6, &amp;quot;ir&amp;quot;, 9]&lt;br /&gt;
print(&amp;quot;demoSąrašas = &amp;quot;, demoSąrašas)&lt;br /&gt;
demoSąrašas.append(&amp;quot;oras&amp;quot;)&lt;br /&gt;
print(&amp;quot;po &#039;oras&#039; pridėjimo, demoSąrašas atrodo taip:&amp;quot;)&lt;br /&gt;
print(demoSąrašas)&lt;br /&gt;
print(&amp;quot;len(demoSąrašas) =&amp;quot;, len(demoSąrašas))&lt;br /&gt;
print(&amp;quot;demoSąrašas.index(42) =&amp;quot;, demoSąrašas.index(42))&lt;br /&gt;
print(&amp;quot;demoSąrašas[1] =&amp;quot;, demoSąrašas[1])&lt;br /&gt;
&lt;br /&gt;
# o dabar mes pereisime per visą sąrašą &amp;quot;for&amp;quot; ciklu&lt;br /&gt;
for c in range(len(demoSąrašas)):&lt;br /&gt;
    print(&amp;quot;demoSąrašas[&amp;quot;, c, &amp;quot;] =&amp;quot;, demoSąrašas[c])&lt;br /&gt;
&lt;br /&gt;
del demoSąrašas[2]&lt;br /&gt;
print(&amp;quot;Po &#039;visata&#039; pašalinimo, demoSąrašas atrodo taip:&amp;quot;)&lt;br /&gt;
print(demoSąrašas)&lt;br /&gt;
if &amp;quot;gyvybė&amp;quot; in demoSąrašas:&lt;br /&gt;
    print(&amp;quot;&#039;gyvybė&#039; buvo rasta kintamajame demoSąrašas&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;&#039;gyvybė&#039; nebuvo rasta kintamajame demoSąrašas&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if &amp;quot;ameba&amp;quot; in demoSąrašas:&lt;br /&gt;
    print(&amp;quot;&#039;ameba&#039; buvo rasta kintamajame demoSąrašas&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if &amp;quot;ameba&amp;quot; not in demoSąrašas:&lt;br /&gt;
    print(&amp;quot;&#039;ameba&#039; nebuvo rasta kintamajame demoSąrašas&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
kitasSąrašas = [42, 7, 0, 123]&lt;br /&gt;
kitasSąrašas.sort()&lt;br /&gt;
print(&amp;quot;Išrikiuotas kitasSąrašas atrodo taip&amp;quot;, kitasSąrašas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kodo išvestis būtų tokia:&lt;br /&gt;
&lt;br /&gt;
 demoSąrašas = [&amp;quot;gyvybė&amp;quot;, 42, &amp;quot;visata&amp;quot;, 6, &amp;quot;ir&amp;quot;, 9]&lt;br /&gt;
 po &amp;quot;oras&amp;quot; pridėjimo, demoSąrašas atrodo taip:&lt;br /&gt;
 [&amp;quot;gyvybė&amp;quot;, 42, &amp;quot;visata&amp;quot;, 6, &amp;quot;ir&amp;quot;, 9, &amp;quot;oras&amp;quot;]&lt;br /&gt;
 len(demoSąrašas) = 7&lt;br /&gt;
 demoSąrašas.index(42) = 1&lt;br /&gt;
 demoSąrašas[1] = 42&lt;br /&gt;
 demoSąrašas[ 0 ] = gyvybė&lt;br /&gt;
 demoSąrašas[ 1 ] = 42&lt;br /&gt;
 demoSąrašas[ 2 ] = visata&lt;br /&gt;
 demoSąrašas[ 3 ] = 6&lt;br /&gt;
 demoSąrašas[ 4 ] = ir&lt;br /&gt;
 demoSąrašas[ 5 ] = 9&lt;br /&gt;
 demoSąrašas[ 6 ] = oras&lt;br /&gt;
 Po &#039;visata&#039; pašalinimo, demoSąrašas atrodo taip:&lt;br /&gt;
 [&amp;quot;gyvybė&amp;quot;, 42, 6, &amp;quot;ir&amp;quot;, 9, &amp;quot;oras&amp;quot;]&lt;br /&gt;
 &amp;quot;gyvybė&amp;quot; buvo rasta kintamajame demoSąrašas&lt;br /&gt;
 &amp;quot;ameba&amp;quot; nebuvo rasta kintamajame demoSąrašas&lt;br /&gt;
 Išrikiuotas kitasSąrašas atrodo taip [0, 7, 42, 123]&lt;br /&gt;
&lt;br /&gt;
Šiame pavyzdyje rasi daug naujų funkcijų. Atkreipk dėmesį, kad gali tiesiog atspausdinti (&amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt;) visą sąrašą. Toliau funkcija &amp;lt;code&amp;gt;append&amp;lt;/code&amp;gt; naudojama tam, kad pridėtum naują elementą į sąrašo pabaigą. &amp;lt;code&amp;gt;len&amp;lt;/code&amp;gt; grąžina kiek elementų yra sąraše. Tinkami sąrašo indeksai (skaičiai kuriuos naudojame viduje laužtinių skliaustų &amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt;) yra nuo 0 iki &amp;lt;code&amp;gt;len - 1&amp;lt;/code&amp;gt;. Funkcija &amp;lt;code&amp;gt;index&amp;lt;/code&amp;gt; nurodo, kur sąraše yra pirmoji elemento vieta. Atkreipk dėmesį, kaip &amp;lt;code&amp;gt;demoSąrašas.index(42)&amp;lt;/code&amp;gt; pateikia 1, o paleidus &amp;lt;code&amp;gt;demoSąrašas[1]&amp;lt;/code&amp;gt; grąžina 42. Norint gauti pagalbos dėl visų sąrašo funkcijų, įvykdyk komandą &amp;lt;code&amp;gt; help(list)&amp;lt;/code&amp;gt; interaktyviajame Python&#039;o interpretatoriuje.&lt;br /&gt;
&lt;br /&gt;
Eilutė &amp;lt;code&amp;gt;# o dabar mes pereisime per visą sąrašą &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; ciklu&amp;lt;/code&amp;gt; yra tik priminimas programuotojui (dar vadinamas kaip „komentaras“). Python&#039;as ignoruoja viską, kas parašyta esamoje eilutėje po simbolio &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;. Toliau eilutės:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for c in range(len(demoSąrašas)):&lt;br /&gt;
    print(&amp;quot;demoSąrašas[&amp;quot;, c, &amp;quot;] =&amp;quot;, demoSąrašas[c])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
sukuria kintamajį &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;, kuris prasideda nuo 0 ir didinamas vienetu, kol pasiekia paskutinį sąrašo indeksą. Tuo tarpu &amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt; komanda išspausdina kiekvieną sąrašo elementą.&lt;br /&gt;
&lt;br /&gt;
Daug geresnis būdas tai padaryti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for c, x in enumerate(demoSąrašas):&lt;br /&gt;
    print(&amp;quot;demoSąrašas[&amp;quot;, c, &amp;quot;] =&amp;quot;, x)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Komanda &amp;lt;code&amp;gt;del&amp;lt;/code&amp;gt; gali būti naudojama tam tikram sąrašo elementui pašalinti. Kitos kelios eilutės naudoja &amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt; operatorių, kad patikrintų, ar elementas yra sąraše, ar ne. Funkcija &amp;lt;code&amp;gt;sort&amp;lt;/code&amp;gt; rūšiuoja sąrašą. Tai naudinga, jei tau reikia sąrašo nuo mažiausio iki didžiausio arba abėcėlės tvarka. Atmink, kad tai pakeičia sąrašą. Apibendrinant, su sąrašu yra atliekami šie veiksmai:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!pavyzdys &lt;br /&gt;
!paaiškinimas&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;demoSąrašas[2]&amp;lt;/code&amp;gt; &lt;br /&gt;
|grąžina 2 sąrašo demoSąrašas elementą&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;demoSąrašas[2] = 3&amp;lt;/code&amp;gt; &lt;br /&gt;
|į sąrašo demoSąrašas 2 poziciją (numeruojama nuo 0) įrašo reikšmę 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;del demoSąrašas[2]&amp;lt;/code&amp;gt; &lt;br /&gt;
|pašalina sąrašo demoSąrašas elementą, esantį 2 pozicijoje&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;len(demoSąrašas)&amp;lt;/code&amp;gt; &lt;br /&gt;
|grąžina &amp;lt;code&amp;gt;demoSąrašas&amp;lt;/code&amp;gt; sąrašo ilgį, t.y. elementų skaičių&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;reikšmė&amp;quot; in demoSąrašas&amp;lt;/code&amp;gt; &lt;br /&gt;
|yra &#039;&#039;True&#039;&#039; jeigu &amp;lt;tt&amp;gt;&amp;quot;reikšmė&amp;quot;&amp;lt;/tt&amp;gt; yra elementas, priklausantis &amp;lt;code&amp;gt;demoSąrašas&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;reikšmė&amp;quot; not in demoSąrašas&amp;lt;/code&amp;gt; &lt;br /&gt;
|yra &#039;&#039;True&#039;&#039; jeigu &amp;lt;code&amp;gt;&amp;quot;reikšmė&amp;quot;&amp;lt;/code&amp;gt; nėra elementas, priklausantis &amp;lt;code&amp;gt;demoSąrašas&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;kitasSąrašas.sort()&amp;lt;/code&amp;gt; &lt;br /&gt;
|surūšiuoja &amp;lt;code&amp;gt;kitasSąrašas&amp;lt;/code&amp;gt;. Atmink, kad rūšiavimas pavyktų, visi sąrašo elementai turi būti arba skaičiai, arba eilutės (string).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;demoSąrašas.index(&amp;quot;reikšmė&amp;quot;)&amp;lt;/code&amp;gt; &lt;br /&gt;
|grąžina pirmosios vietos, kurioje atsiranda &amp;lt;code&amp;gt;&amp;quot;reikšmė&amp;quot;&amp;lt;/code&amp;gt;, indeksą&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;demoSąrašas.append(&amp;quot;reikšmė&amp;quot;)&amp;lt;/code&amp;gt; &lt;br /&gt;
|sąrašo pabaigoje prideda elementą &amp;lt;code&amp;gt;&amp;quot;reikšmė&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;demoSąrašas.remove(&amp;quot;reikšmė&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|pašalina pirmą rastą elementą su nurodyta reikšme iš &amp;lt;code&amp;gt;demoSąrašas&amp;lt;/code&amp;gt; (taip pat, kaip &amp;lt;code&amp;gt;del demoSąrašas[demoSąrašas.index(&amp;quot;reikšmė&amp;quot;)]&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pavyzdžiai, kur praktiškai naudojamos šios funkcijos:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
meniuElementas = 0&lt;br /&gt;
vardųSarašas = []&lt;br /&gt;
while meniuElementas != 9:&lt;br /&gt;
    print(&amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    print(&amp;quot;1. Spausdinti sąrašą&amp;quot;)&lt;br /&gt;
    print(&amp;quot;2. Pridėti vardą prie sąrašo&amp;quot;)&lt;br /&gt;
    print(&amp;quot;3. Pašalinti vardą iš sąrašo&amp;quot;)&lt;br /&gt;
    print(&amp;quot;4. Pakeisti elementą sąraše&amp;quot;)&lt;br /&gt;
    print(&amp;quot;9. Išeiti&amp;quot;)&lt;br /&gt;
    meniuElementas = int(input(&amp;quot;Pasirinkite elementą iš meniu: &amp;quot;))&lt;br /&gt;
    if meniuElementas == 1:&lt;br /&gt;
        dabartinis = 0&lt;br /&gt;
        if len(vardųSarašas) &amp;gt; 0:&lt;br /&gt;
            while dabartinis &amp;lt; len(vardųSarašas):&lt;br /&gt;
                print(dabartinis, &amp;quot;.&amp;quot;, vardųSarašas[dabartinis])&lt;br /&gt;
                dabartinis = dabartinis + 1&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Sąrašas tuščias&amp;quot;)&lt;br /&gt;
    elif meniuElementas == 2:&lt;br /&gt;
        vardas = input(&amp;quot;Įveskite vardą, kurį norite pridėti: &amp;quot;)&lt;br /&gt;
        vardųSarašas.append(vardas)&lt;br /&gt;
    elif meniuElementas == 3:&lt;br /&gt;
        šalinamasVardas = input(&amp;quot;Kokį vardą norėtumėte pašalinti:&amp;quot;)&lt;br /&gt;
        if šalinamasVardas in vardųSarašas:&lt;br /&gt;
            # vardųSarašas.remove(šalinamasVardas) veiktų taip pat gerai&lt;br /&gt;
            elementoIndeksas = vardųSarašas.index(šalinamasVardas)&lt;br /&gt;
            del vardųSarašas[elementoIndeksas]&lt;br /&gt;
            # Aukščiau pateiktas kodas pašalina tik pirmąjį surasta vardą.&lt;br /&gt;
            # Žemiau esantis kodas pašalina visus.&lt;br /&gt;
            # while šalinamasVardas in vardųSarašas:&lt;br /&gt;
            #       elementoIndeksas = vardųSarašas.index(šalinamasVardas)&lt;br /&gt;
            #       del vardųSarašas[elementoIndeksas]&lt;br /&gt;
        else:&lt;br /&gt;
            print(šalinamasVardas, &amp;quot;nerastas&amp;quot;)&lt;br /&gt;
    elif meniuElementas == 4:&lt;br /&gt;
        senasVardas = input(&amp;quot;Kokį vardą norėtumėte pakeisti:&amp;quot;)&lt;br /&gt;
        if senasVardas in vardųSarašas:&lt;br /&gt;
            elementoIndeksas = vardųSarašas.index(senasVardas)&lt;br /&gt;
            naujasVardas = input(&amp;quot;Koks yra naujas vardas: &amp;quot;)&lt;br /&gt;
            vardųSarašas[elementoIndeksas] = naujasVardas&lt;br /&gt;
        else:&lt;br /&gt;
            print(senasVardas, &amp;quot;nerastas&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Iki pasimatymo&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ir čia yra išvesties dalis:&lt;br /&gt;
&lt;br /&gt;
 --------------------&lt;br /&gt;
 1. Spausdinti sąrašą&lt;br /&gt;
 2. Pridėti vardą prie sąrašo&lt;br /&gt;
 3. Pašalinti vardą iš sąrašo&lt;br /&gt;
 4. Pakeisti elementą sąraše&lt;br /&gt;
 9. Išeiti&lt;br /&gt;
 &lt;br /&gt;
 Pasirinkite elementą iš meniu: &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Įveskite vardą, kurį norite pridėti: &#039;&#039;&#039;Benas&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Pasirinkite elementą iš meniu: &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Įveskite vardą, kurį norite pridėti: &#039;&#039;&#039;Liepa&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Pasirinkite elementą iš meniu: &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 0. Benas&lt;br /&gt;
 1. Liepa&lt;br /&gt;
 &lt;br /&gt;
 Pasirinkite elementą iš meniu: &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
 Kokį vardą norėtumėte pašalinti: &#039;&#039;&#039;Benas&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Pasirinkite elementą iš meniu: &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
 Kokį vardą norėtumėte pakeisti: &#039;&#039;&#039;Liepa&#039;&#039;&#039;&lt;br /&gt;
 Koks yra naujas vardas: &#039;&#039;&#039;Liepa Petraitė&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 Pasirinkite elementą iš meniu: &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 0. Liepa Petraitė&lt;br /&gt;
 &lt;br /&gt;
 Pasirinkite elementą iš meniu: &#039;&#039;&#039;9&#039;&#039;&#039;&lt;br /&gt;
 Iki pasimatymo&lt;br /&gt;
&lt;br /&gt;
Tai buvo ilga programa. Panagrinėkime pirminį programos tekstą. Eilutė &amp;lt;code&amp;gt;vardųSarašas = []&amp;lt;/code&amp;gt; sukuria kintamajį &amp;lt;code&amp;gt;vardųSarašas&amp;lt;/code&amp;gt;, tuščia sąrašą, be elementų. Kita svarbi eilutė yra &amp;lt;code&amp;gt;while meniuElementas != 9:&amp;lt;/code&amp;gt;. Ši eilutė pradeda ciklą, leidžiantį šios programos meniu sistemai veikti. Kitos eilutės parodo meniu ir nusprendžia, kurią programos dalį paleisti.&lt;br /&gt;
&lt;br /&gt;
Ši dalis:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
dabartinis = 0&lt;br /&gt;
    if len(vardųSarašas) &amp;gt; 0:&lt;br /&gt;
        while dabartinis &amp;lt; len(vardųSarašas):&lt;br /&gt;
            print(dabartinis, &amp;quot;.&amp;quot;, vardųSarašas[dabartinis])&lt;br /&gt;
            dabartinis = dabartinis + 1&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Sąrašas tuščias&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
eina per sąrašą ir spausdina kiekvieną vardą. &amp;lt;code&amp;gt;len(vardųSarašas)&amp;lt;/code&amp;gt; nurodo, kiek elementų yra sąraše. Jei &amp;lt;code&amp;gt;len&amp;lt;/code&amp;gt; grąžina &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, tai reiškia sąrašas tuščias.&lt;br /&gt;
&lt;br /&gt;
Toliau po kelių eilučių matysi sakinį &amp;lt;code&amp;gt;vardųSarašas.append(vardas)&amp;lt;/code&amp;gt;. Jis naudoja funkciją &amp;lt;code&amp;gt;append&amp;lt;/code&amp;gt;, kad pridėtų elementą į sąrašo pabaigą. Peršokus dar dvi eilutes, pastebėsi šią kodo dalį:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
elementoIndeksas = vardųSarašas.index(šalinamasVardas)&lt;br /&gt;
del vardųSarašas[elementoIndeksas]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Čia funkcija &amp;lt;code&amp;gt;index&amp;lt;/code&amp;gt; yra naudojama norint rasti indekso reikšmę, kuri vėliau bus naudojama elementui pašalinti. &amp;lt;code&amp;gt;del vardųSarašas[elementoIndeksas]&amp;lt;/code&amp;gt; naudojamas sąrašo elementui pašalinti.   &lt;br /&gt;
&lt;br /&gt;
Kitoje kodo dalyje&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
senasVardas = input(&amp;quot;Kokį vardą norėtumėte pakeisti:&amp;quot;)&lt;br /&gt;
if senasVardas in vardųSarašas:&lt;br /&gt;
    elementoIndeksas = vardųSarašas.index(senasVardas)&lt;br /&gt;
    naujasVardas = input(&amp;quot;Koks yra naujas vardas: &amp;quot;)&lt;br /&gt;
    vardųSarašas[elementoIndeksas] = naujasVardas&lt;br /&gt;
else:&lt;br /&gt;
    print(senasVardas, &amp;quot;nerastas&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
naudojamas &amp;lt;code&amp;gt;index&amp;lt;/code&amp;gt;, kad surastų &amp;lt;code&amp;gt;elementoIndeksas&amp;lt;/code&amp;gt; ir tada įdėtų &amp;lt;code&amp;gt;naujasVardas&amp;lt;/code&amp;gt; ten, kur buvo &amp;lt;code&amp;gt;senasVardas&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Sveikinu, perpratus sąrašus, dabar tu pakankamai žinai kalbą, kad galėtum atlikti bet kokius skaičiavimus, kuriuos gali atlikti kompiuteris (tai techniškai žinoma kaip [[Wikipedia:Turing_completeness|Turing-Completeness]]). Žinoma, vis dar yra daug funkcijų, kurias naudojant tu pasilengvinsi sau gyvenimą.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pavyzdžiai ===&lt;br /&gt;
&#039;&#039;&#039;testas.py&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
## Ši programa atlieka žinių patikrinimą&lt;br /&gt;
&lt;br /&gt;
# Pirmiausia surenkame testo klausimus.&lt;br /&gt;
# Vėliau šią dalį pakeisime, kad būtų naudojama failinė sistema.&lt;br /&gt;
def gauti_klausimus():&lt;br /&gt;
    # atkreipk dėmesį, kad duomenys saugomi kaip sąrašų sąrašas&lt;br /&gt;
    return [[&amp;quot;Kokios spalvos yra dangus giedrą dieną? &amp;quot;, &amp;quot;mėlynas&amp;quot;],&lt;br /&gt;
            [&amp;quot;Koks atsakymas į gyvenimą, visatą ir viską? &amp;quot;, &amp;quot;42&amp;quot;],&lt;br /&gt;
            [&amp;quot;Kas yra keturių raidžių žodis pelės gaudyklei? &amp;quot;, &amp;quot;katė&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
# Ši dalis patikrins vieną klausimą&lt;br /&gt;
# pateikiamas vienas klausimas&lt;br /&gt;
# grąžinama teisinga (True), jei vartotojas įvedė teisingą atsakymą, kitu atveju - klaidinga (False)&lt;br /&gt;
&lt;br /&gt;
def pateik_klausimą(klausimas_ir_atsakymas):&lt;br /&gt;
    # ištraukiame klausimą ir atsakymą iš sąrašo&lt;br /&gt;
    # Ši funkcija priima dviejų elementų sąrašą, klausimą ir atsakymą.  &lt;br /&gt;
    klausimas = klausimas_ir_atsakymas[0]   &lt;br /&gt;
    atsakymas = klausimas_ir_atsakymas[1]&lt;br /&gt;
    # užduodame klausimą vartotojui&lt;br /&gt;
    duotas_atsakymas = input(klausimas)&lt;br /&gt;
    # palyginame vartotojo atsakymą su teisingu atsakymu&lt;br /&gt;
    if atsakymas == duotas_atsakymas:&lt;br /&gt;
        print(&amp;quot;Teisingai&amp;quot;)&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Neteisingai. Teisingas atsakymas: &amp;quot;, atsakymas)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
# Šis kodas apims visus klausimus&lt;br /&gt;
def atlikti_testus(klausimai):&lt;br /&gt;
    if len(klausimai) == 0:&lt;br /&gt;
        print(&amp;quot;Nepateiktas nei vienas klausimas.&amp;quot;)&lt;br /&gt;
        # `return` išeis iš funkcijos&lt;br /&gt;
        return&lt;br /&gt;
    indeksas = 0&lt;br /&gt;
    teisingai = 0&lt;br /&gt;
    while indeksas &amp;lt; len(klausimai):&lt;br /&gt;
        # patikriname klausimą&lt;br /&gt;
        # Atkreipk dėmesį, kad tai yra klausimų ir atsakymų sąrašo ištraukimas iš sąrašų sąrašo.&lt;br /&gt;
        if pateik_klausimą(klausimai[indeksas]): &lt;br /&gt;
            teisingai = teisingai + 1&lt;br /&gt;
        # pareiname prie kito klausimo&lt;br /&gt;
        indeksas = indeksas + 1&lt;br /&gt;
    # atkreipk dėmesį į skaičiavimo tvarką: pirmiausia padaugini, tada padalini&lt;br /&gt;
    print(&amp;quot;Atsakei teisingai į &amp;quot;, teisingai * 100 / len(klausimai),\&lt;br /&gt;
           &amp;quot;% klausimų iš &amp;quot;, len(klausimai))&lt;br /&gt;
&lt;br /&gt;
# dabar paimkime klausimus iš funkcijos gauti_klausimus ir&lt;br /&gt;
# paduokime grąžintą sąrašų sąrašą kaip argumentą funkcijai atlikti_testus.&lt;br /&gt;
&lt;br /&gt;
atlikti_testus(gauti_klausimus())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reikšmės &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; turi reikšmes atitinkamai 1 ir 0. Jie dažnai naudojami loginės sekos patikrinimui, ciklo sąlygoms ir pan. Daugiau apie tai sužinosi šiek tiek vėliau (skyrius [[Vadovėlis/Loginiai reiškiniai|Loginiai reiškiniai]]).&lt;br /&gt;
Atkreipk dėmesį, kad gauti_klausimus() iš esmės yra sąrašas, nors tai techniškai yra funkcija - sąrašų grąžinimas yra vienintelis dalykas, kurį jis daro. &lt;br /&gt;
&lt;br /&gt;
Pavyzdžio išvestis:&lt;br /&gt;
&lt;br /&gt;
 Kokios spalvos yra dangus giedrą dieną? &#039;&#039;&#039;žalias&#039;&#039;&#039;&lt;br /&gt;
 Neteisingai. Teisingas atsakymas: mėlynas&lt;br /&gt;
 Koks atsakymas į gyvenimą, visatą ir viską? &#039;&#039;&#039;42&#039;&#039;&#039;&lt;br /&gt;
 Teisingai&lt;br /&gt;
 Kas yra keturių raidžių žodis pelės gaudyklei? &#039;&#039;&#039;katė&#039;&#039;&#039;&lt;br /&gt;
 Teisingai&lt;br /&gt;
 Atsakei teisingai į 66% klausimų iš 3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
&lt;br /&gt;
Išplėsk testas.py programą, kad ji turėtų meniu, kuriame būtų galima atlikti testą,&lt;br /&gt;
peržiūrėti klausimų ir atsakymų sąrašą ir pasirinkti išeiti iš programos. Taip pat, pridėk naują klausimą:&lt;br /&gt;
„Kokį triukšmą kelia tikrai pažangi mašina?“ su teisingu atsakymu „ping“.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
## Ši programa atlieka žinių patikrinimą&lt;br /&gt;
&lt;br /&gt;
klausimai = [[&amp;quot;Kokios spalvos yra dangus giedrą dieną? &amp;quot;, &amp;quot;mėlynas&amp;quot;],&lt;br /&gt;
             [&amp;quot;Koks atsakymas į gyvenimą, visatą ir viską? &amp;quot;, &amp;quot;42&amp;quot;],&lt;br /&gt;
             [&amp;quot;Kas yra keturių raidžių žodis pelės gaudyklei? &amp;quot;, &amp;quot;katė&amp;quot;],&lt;br /&gt;
             [&amp;quot;Kokį triukšmą kelia tikrai pažangi mašina?&amp;quot;, &amp;quot;ping&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
# Ši dalis patikrins vieną klausimą&lt;br /&gt;
# pateikiamas vienas klausimas&lt;br /&gt;
# grąžinama teisinga (True), jei vartotojas įvedė teisingą atsakymą, kitu atveju - klaidinga (False)&lt;br /&gt;
&lt;br /&gt;
def pateik_klausimą(klausimas_ir_atsakymas):&lt;br /&gt;
    # ištraukiame klausimą ir atsakymą iš sąrašo&lt;br /&gt;
    # Ši funkcija priima dviejų elementų sąrašą, klausimą ir atsakymą.  &lt;br /&gt;
    klausimas = klausimas_ir_atsakymas[0]   &lt;br /&gt;
    atsakymas = klausimas_ir_atsakymas[1]&lt;br /&gt;
    # užduodame klausimą vartotojui&lt;br /&gt;
    duotas_atsakymas = input(klausimas)&lt;br /&gt;
    # palyginame vartotojo atsakymą su teisingu atsakymu&lt;br /&gt;
    if atsakymas == duotas_atsakymas:&lt;br /&gt;
        print(&amp;quot;Teisingai&amp;quot;)&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Neteisingai. Teisingas atsakymas: &amp;quot;, atsakymas)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
# Šis kodas apims visus klausimus&lt;br /&gt;
def atlikti_testus(klausimai):&lt;br /&gt;
    if len(klausimai) == 0:&lt;br /&gt;
        print(&amp;quot;Nepateiktas nei vienas klausimas.&amp;quot;)&lt;br /&gt;
        # `return` išeis iš funkcijos&lt;br /&gt;
        return&lt;br /&gt;
    indeksas = 0&lt;br /&gt;
    teisingai = 0&lt;br /&gt;
    while indeksas &amp;lt; len(klausimai):&lt;br /&gt;
        # patikriname klausimą&lt;br /&gt;
        # Atkreipk dėmesį, kad tai yra klausimų ir atsakymų sąrašo ištraukimas iš sąrašų sąrašo.&lt;br /&gt;
        if pateik_klausimą(klausimai[indeksas]): &lt;br /&gt;
            teisingai = teisingai + 1&lt;br /&gt;
        # pareiname prie kito klausimo&lt;br /&gt;
        indeksas = indeksas + 1&lt;br /&gt;
    # atkreipk dėmesį į skaičiavimo tvarką: pirmiausia padaugini, tada padalini&lt;br /&gt;
    print(&amp;quot;Atsakei teisingai į &amp;quot;, teisingai * 100 / len(klausimai),\&lt;br /&gt;
           &amp;quot;% klausimų iš &amp;quot;, len(klausimai))&lt;br /&gt;
&lt;br /&gt;
#rodomas klausimų ir atsakymų sąrašas&lt;br /&gt;
def rodyk_klausimus():&lt;br /&gt;
    k = 0&lt;br /&gt;
    while k &amp;lt; len(klausimai):&lt;br /&gt;
        a = 0&lt;br /&gt;
        print(&amp;quot;K:&amp;quot; , klausimai[k][a])&lt;br /&gt;
        a = 1&lt;br /&gt;
        print(&amp;quot;A:&amp;quot; , klausimai[k][a])&lt;br /&gt;
        k = k + 1&lt;br /&gt;
&lt;br /&gt;
# dabar apibrėžiu meniu funkciją&lt;br /&gt;
def meniu():&lt;br /&gt;
    print(&amp;quot;-----------------&amp;quot;)&lt;br /&gt;
    print(&amp;quot;Meniu:&amp;quot;)&lt;br /&gt;
    print(&amp;quot;1 - Atlikti testą&amp;quot;)&lt;br /&gt;
    print(&amp;quot;2 - Peržiūrėti klausimų ir atsakymų sąrašą&amp;quot;)&lt;br /&gt;
    print(&amp;quot;3 - Peržiūrėti meniu&amp;quot;)&lt;br /&gt;
    print(&amp;quot;5 - Išeiti&amp;quot;)&lt;br /&gt;
    print(&amp;quot;-----------------&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
pasirinkimas = &amp;quot;3&amp;quot;&lt;br /&gt;
while pasirinkimas != &amp;quot;5&amp;quot;:&lt;br /&gt;
    if pasirinkimas == &amp;quot;1&amp;quot;:&lt;br /&gt;
        atlikti_testus(klausimai)&lt;br /&gt;
    elif pasirinkimas == &amp;quot;2&amp;quot;:&lt;br /&gt;
        rodyk_klausimus()&lt;br /&gt;
    elif pasirinkimas == &amp;quot;3&amp;quot;:&lt;br /&gt;
        meniu()&lt;br /&gt;
    print()&lt;br /&gt;
    pasirinkimas = input(&amp;quot;Pasirinkite savo parinktį iš aukščiau pateikto meniu: &amp;quot;) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Parašyk programą, kuri ištrintų pasikartojančius elementus iš sąrašo.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
pradinis_sąrašas = [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;a&amp;quot;]&lt;br /&gt;
naujas_sąrašas = []&lt;br /&gt;
indeksas = 0&lt;br /&gt;
&lt;br /&gt;
while indeksas &amp;lt; len(pradinis_sąrašas):&lt;br /&gt;
    if pradinis_sąrašas[indeksas] not in naujas_sąrašas:&lt;br /&gt;
        naujas_sąrašas.append(pradinis_sąrašas[indeksas])&lt;br /&gt;
    indeksas = indeksas + 1&lt;br /&gt;
        &lt;br /&gt;
print(naujas_sąrašas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Parašyk programą, kuri rastų didžiausią ir mažiausią sąrašo skaičius.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
pradinis_sąrašas = [5, 25, 0, 100, 6, -6, 500]&lt;br /&gt;
didžiausias = pradinis_sąrašas[0]&lt;br /&gt;
mažiausias = pradinis_sąrašas[0]&lt;br /&gt;
indeksas = 0&lt;br /&gt;
&lt;br /&gt;
while indeksas &amp;lt; len(pradinis_sąrašas):&lt;br /&gt;
    if pradinis_sąrašas[indeksas] &amp;gt; didžiausias:&lt;br /&gt;
        didžiausias = pradinis_sąrašas[indeksas]&lt;br /&gt;
    if pradinis_sąrašas[indeksas] &amp;lt; mažiausias:&lt;br /&gt;
        mažiausias = pradinis_sąrašas[indeksas]&lt;br /&gt;
    indeksas = indeksas + 1&lt;br /&gt;
        &lt;br /&gt;
print (&amp;quot;Didžiausias skaičius: &amp;quot;, didžiausias)&lt;br /&gt;
print (&amp;quot;Mažiausias skaičius: &amp;quot;, mažiausias)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Rekursinės funkcijos |next=Ciklai For}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Rekursin%C4%97s_funkcijos&amp;diff=121</id>
		<title>Vadovėlis/Rekursinės funkcijos</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Rekursin%C4%97s_funkcijos&amp;diff=121"/>
		<updated>2023-01-23T16:35:06Z</updated>

		<summary type="html">&lt;p&gt;Monika: Pridėta užduotis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Funkcijų apibrėžimas |next=Sąrašai}}&lt;br /&gt;
&lt;br /&gt;
Vieniems šis skyrius gali pasirodyti naudingas, o kitiems - painus. Jeigu tau informacija pasirodys paini, tai nesuk galvos ir praleisk,  prie šio skyriaus galėsi grįžti šiek tiek vėliau. O dabar pabandom pasižiūrėti į mūsų parašytą programą:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def daug(a, b): # daug reiškia daugybą&lt;br /&gt;
    if b == 0:&lt;br /&gt;
        return 0&lt;br /&gt;
    lik = daug(a, b - 1) #lik reiškia likutį&lt;br /&gt;
    reikšmė = a + lik&lt;br /&gt;
    return reikšmė&lt;br /&gt;
rezultatas = daug(3, 2)&lt;br /&gt;
print(&amp;quot;3 * 2 = &amp;quot;, rezultatas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Iš esmės ši programa, tai teigiama sveikųjų skaičių daugybos funkcija (reikia atkreipti dėmesį į tai, kad Python&#039;o programavimo kalboje jau yra integruota funkcija dauginimui, čia mes patys parašėme lengvai suprantamą pavyzdį (jeigu kurtume tokią funkciją patys), kuris parodo kaip atrodo daugybos veiksmas. Šioje programoje gali pamatyti rekursijos naudojimą, tai yra iteracijos (kartojimo) forma, kai funkcija yra pakartotinai iškviečiama, kol bus įvykdyta sukurta išvesties sąlyga. Programa naudoja pakartotinius papildymus, kad gautų tą patį rezultatą kaip ir daugyba: pavyzdžiui 3 + 3 (sudėtis) duoda tą patį rezultatą kaip ir 3 * 2 (daugyba).&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;Klausimas:&#039;&#039; Ką pirmiausia daro programa?&lt;br /&gt;
: &#039;&#039;Atsakymas:&#039;&#039; Pirmiausia yra aprašyta daugybos funkcija:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def daug(a, b):&lt;br /&gt;
    if b == 0:&lt;br /&gt;
        return 0&lt;br /&gt;
    lik = daug(a, b - 1)&lt;br /&gt;
    reikšmė = a + lik &lt;br /&gt;
    return reikšmė&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
: Ši funkcija paima du parametrus ir grąžina reikšmę. Vėliau šią funkciją galima bus iškviesti.&lt;br /&gt;
; Kas nutinka toliau?  &lt;br /&gt;
: Vykdoma kita eilutė einanti po funkcijos &amp;lt;code&amp;gt;rezultatas = daug(3, 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką daro ši eilutė?&lt;br /&gt;
: Ši eilutė priskiria funkcijos &amp;lt;code&amp;gt;daug(3, 2)&amp;lt;/code&amp;gt; grąžinamą reikšmę kintamajam &amp;lt;code&amp;gt;rezultatas&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Ką grąžina &amp;lt;code&amp;gt;daug(3, 2)&amp;lt;/code&amp;gt;?&lt;br /&gt;
: Norėdami tai išsiaiškinti, turime peržiūrėti funkciją &amp;lt;code&amp;gt;daug()&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Kas vyksta su kodu?&lt;br /&gt;
: Kintamasis &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; gauna jam priskirtą reikšmę 3, o kintamasis &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; - jam priskirtą reikšmę 2.&lt;br /&gt;
; Kas nutinka tada?&lt;br /&gt;
: Vykdoma eilutė &amp;lt;code&amp;gt;if b == 0:&amp;lt;/code&amp;gt;. Kadangi &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; reikšmė yra 2, todėl eilutė &amp;lt;code&amp;gt;return 0&amp;lt;/code&amp;gt; praleidžiama.&lt;br /&gt;
; Kas vyksta toliau?&lt;br /&gt;
: Vykdoma eilutė &amp;lt;code&amp;gt;lik = daug(a, b - 1)&amp;lt;/code&amp;gt;. Ši eilutė nustato lokalaus kintamojo &amp;lt;code&amp;gt;lik&amp;lt;/code&amp;gt; reikšmę į &amp;lt;code&amp;gt;daug(a, b - 1)&amp;lt;/code&amp;gt; reikšmę. &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; reikšmė yra 3, o &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; - 2, todėl funkcija kviečia funkciją &amp;lt;code&amp;gt;daug(3, 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
; Taigi kokia yra &amp;lt;code&amp;gt;daug(3, 1)&amp;lt;/code&amp;gt; reikšmė?&lt;br /&gt;
: Turime paleisti funkciją &amp;lt;code&amp;gt;daug()&amp;lt;/code&amp;gt; su parametrais, kurie yra 3 ir 1.&lt;br /&gt;
; Kas nutinka toliau?&lt;br /&gt;
: Lokalūs kintamieji vėl pasileidus kodui jau yra nustatyti, todėl &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; reikšmė būtų 3, o &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; reikšmė – 1. Kadangi jie yra lokalūs kintamieji, todėl jie neturi įtakos ankstesnėms &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; reikšmėms.&lt;br /&gt;
; Kas įvyksta toliau?&lt;br /&gt;
: Kadangi &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; turi reikšmę 1, if sąlygos rezultatas yra neigiamas, todėl vykdoma kita eilutė &amp;lt;code&amp;gt;lik = daug(a, b - 1)&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Ką daro ši eilutė?&lt;br /&gt;
: Dabar kintamajam &amp;lt;code&amp;gt;lik&amp;lt;/code&amp;gt; priskiriam funkcijos &amp;lt;code&amp;gt;daug(3, 0)&amp;lt;/code&amp;gt; reikšmė.&lt;br /&gt;
; Kokia ši reikšmė?&lt;br /&gt;
: Norėdami tai išsiaiškinti, turime dar kartą paleisti funkciją. Šį kartą &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; reikšmė yra 3, o &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; – 0.&lt;br /&gt;
; Kas vyksta toliau?&lt;br /&gt;
: Pirmoji vykdytinos funkcijos eilutė yra &amp;lt;code&amp;gt;if b == 0:&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; reikšmė 0, todėl kita vykdoma eilutė yra &amp;lt;code&amp;gt;return 0&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką daro &amp;lt;code&amp;gt;return 0&amp;lt;/code&amp;gt; eilutė?&lt;br /&gt;
: Ši eilutė grąžina funkcijos reikšmę lygią 0 į tą vietą, kur ji buvo iškviesta.&lt;br /&gt;
; Kas iš to?&lt;br /&gt;
: Dabar mes žinome, kad &amp;lt;code&amp;gt;daug(3, 0)&amp;lt;/code&amp;gt; grąžina reikšmę 0. Dar žinome, ką daro eilutė &amp;lt;code&amp;gt;lik = daug(a, b - 1)&amp;lt;/code&amp;gt;, nes paleidžiame funkciją &amp;lt;code&amp;gt;daug()&amp;lt;/code&amp;gt; su parametrais 3 ir 0. Baigiame vykdyti &amp;lt;code&amp;gt;daug(3, 0)&amp;lt;/code&amp;gt; ir dabar vėl pradedame vykdyti &amp;lt;code&amp;gt;daug(3, 1)&amp;lt;/code&amp;gt;. Kintamajam &amp;lt;code&amp;gt;lik&amp;lt;/code&amp;gt; priskiriama reikšmė yra 0.&lt;br /&gt;
; Kurią eilutę kompiuteris skaito po to?&lt;br /&gt;
: Toliau vykdoma eilutė &amp;lt;code&amp;gt;reikšmė = a + lik&amp;lt;/code&amp;gt;. Žinome, kad &amp;lt;code&amp;gt;a = 3&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;lik = 0&amp;lt;/code&amp;gt; todėl dabar &amp;lt;code&amp;gt;reikšmė = 3&amp;lt;/code&amp;gt;. &lt;br /&gt;
; Kas nutinka toliau?&lt;br /&gt;
: Vykdoma eilutė &amp;lt;code&amp;gt;return reikšmė&amp;lt;/code&amp;gt;, kuri grąžina reikšmę 3. Šis skaičius atsiranda iš funkcijos &amp;lt;code&amp;gt;daug (3, 1)&amp;lt;/code&amp;gt; vykdymo. Iškvietus &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt;, grįžtame prie &amp;lt;code&amp;gt;daug(3, 2)&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Kur yra &amp;lt;code&amp;gt;daug(3, 2)&amp;lt;/code&amp;gt;?&lt;br /&gt;
: Mes turėjome kintamuosius &amp;lt;code&amp;gt;a = 3&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;b = 2&amp;lt;/code&amp;gt; ir nagrinėjome eilutę &amp;lt;code&amp;gt;lik = daug(a, b - 1)&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Kas įvyksta?&lt;br /&gt;
: Kintamajam &amp;lt;code&amp;gt;lik&amp;lt;/code&amp;gt; priskiriama reikšmė 3. Kita eilutė &amp;lt;code&amp;gt;reikšmė = a + lik&amp;lt;/code&amp;gt; priskiria kintamajam &amp;lt;code&amp;gt;reikšmė&amp;lt;/code&amp;gt; reikšmę &amp;lt;code&amp;gt;3 + 3&amp;lt;/code&amp;gt; arba 6.  &lt;br /&gt;
; Kas įvyksta toliau?&lt;br /&gt;
: Pradedama vykdyti kita eilutė, kuri grąžina 6 iš funkcijos. Tuomet grįžtame prie eilutės &amp;lt;code&amp;gt;rezultatas = daug(3, 2)&amp;lt;/code&amp;gt;, kur kintamajam &amp;lt;code&amp;gt;rezultatas&amp;lt;/code&amp;gt; dabar priskiriama reikšmė 6 &lt;br /&gt;
; Kas nutinka toliau?  &lt;br /&gt;
: Paleidžiama kita eilutė po funkcijos &amp;lt;code&amp;gt;print (&amp;quot;3 * 2 =&amp;quot;, rezultatas)&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Ji spausdina &amp;lt;code&amp;gt;3 * 2 =&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;rezultatas&amp;lt;/code&amp;gt; reikšmę, kuri yra 6. Visa išspausdinta eilutė yra &amp;lt;code&amp;gt;3 * 2 = 6&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Taigi, kas čia įvyko apskritai?  &lt;br /&gt;
: Iš esmės panaudojome du skirtingus faktus, kad apskaičiuotume dviejų skaičių kartotinį. Pirmas, kad bet koks skaičius padauginus iš nulio yra nulis &amp;lt;code&amp;gt;(x * 0 = 0)&amp;lt;/code&amp;gt;. Antras, kad skaičius padaugintas iš kito skaičiaus yra lygus pirmo skaičiaus ir pirmo bei vienetu mažesnio už antrąjį sandaugos sumai &amp;lt;code&amp;gt;(x * y = x + x * (y - 1))&amp;lt;/code&amp;gt;. Taigi ir čia &amp;lt;code&amp;gt;3 * 2&amp;lt;/code&amp;gt; pirmiausiai paverčiamas į &amp;lt;code&amp;gt;3 + 3 * 1&amp;lt;/code&amp;gt;. Tada &amp;lt;code&amp;gt;3 * 1&amp;lt;/code&amp;gt; paverčiamas į &amp;lt;code&amp;gt;3 + 3 * 0&amp;lt;/code&amp;gt;. Tuomet mes žinome, kad bet kuris skaičius padaugintas iš nulio yra nulis, todėl &amp;lt;code&amp;gt;3 * 0&amp;lt;/code&amp;gt; yra 0. Kai viskas surašoma vienoje eilutėje, gauname &amp;lt;code&amp;gt;3 + 3 + 0 &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Štai kaip viskas veikia:&lt;br /&gt;
&lt;br /&gt;
 daug(3, 2)&lt;br /&gt;
 3 + daug(3, 1)&lt;br /&gt;
 3 + 3 + daug(3, 0)&lt;br /&gt;
 3 + 3 + 0&lt;br /&gt;
 3 + 3&lt;br /&gt;
 6&lt;br /&gt;
&lt;br /&gt;
==== Rekursija ====&lt;br /&gt;
Funkcijos, kurios kreipiasi pačios į save yra vadinamos rekursinėmis funkcijomis. Šio skyriaus pavyzdžiuose panagrinėsime tokias funkcijas. Tai palengvina programavimo užduočių spendimų įgyvendinimą, nes kartais pakanka apsvarstyti tik vieną problemos žingsnį, o ne visą problemą iš karto. Be to tai leidžia išreikšti kai kurias matematines sąvokas paprastu, lengvai skaitomu kodu.&lt;br /&gt;
&lt;br /&gt;
Bet kokią problemą, kurią galime išspręsti naudojant rekursiją, gali būti išspręsta naudojant ciklus. Jie veikia greičiau, bet kartais ciklus sunku atlikti teisingai.&lt;br /&gt;
&lt;br /&gt;
Turbūt intuityviausias „rekursijos“ apibrėžimas yra toks:&lt;br /&gt;
  REKURSIJA&lt;br /&gt;
     Jei vis dar nesupranti, tai skaityk: REKURSIJA.&lt;br /&gt;
Pabandyk perskaityti dar kelis pavyzdžius.&lt;br /&gt;
&lt;br /&gt;
=== Pavyzdžiai ===&lt;br /&gt;
&#039;&#039;&#039;faktorialas.py&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#apibrėžia funkciją, kuri apskaičiuoja koeficientą&lt;br /&gt;
&lt;br /&gt;
def faktorialas(n):&lt;br /&gt;
    if n == 0:&lt;br /&gt;
        return 1&lt;br /&gt;
    if n &amp;lt; 0:&lt;br /&gt;
        return &amp;quot;Klaida, neigiami skaičiai neturi faktorialo reikšmių!!&amp;quot;&lt;br /&gt;
    return n * faktorialas(n - 1)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;2! =&amp;quot;, faktorialas(2))&lt;br /&gt;
print(&amp;quot;3! =&amp;quot;, faktorialas(3))&lt;br /&gt;
print(&amp;quot;4! =&amp;quot;, faktorialas(4))&lt;br /&gt;
print(&amp;quot;5! =&amp;quot;, faktorialas(5))&lt;br /&gt;
print(&amp;quot;-3! =&amp;quot;, faktorialas(-3))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas:&lt;br /&gt;
 &lt;br /&gt;
 2! = 2&lt;br /&gt;
 3! = 6&lt;br /&gt;
 4! = 24&lt;br /&gt;
 5! = 120&lt;br /&gt;
 -3! = Klaida, neigiami skaičiai neturi faktorialo reikšmių!!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;atgalinis_skaičiavimas.py&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def atgalinis_skaičiavimas(n):&lt;br /&gt;
    print(n)&lt;br /&gt;
    if n &amp;gt; 0:&lt;br /&gt;
        return atgalinis_skaičiavimas(n-1)&lt;br /&gt;
&lt;br /&gt;
atgalinis_skaičiavimas(5)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas:&lt;br /&gt;
 5&lt;br /&gt;
 4&lt;br /&gt;
 3&lt;br /&gt;
 2&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Dabar pabandyk žodį &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;(lietuviškai jei) pakeisti žodžiu &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; (lietuviškai kol). Pamatysi, kad kompiuteris pavirto skaičiuotuvu, kuris negali suskaičiuoti iki keturių. Iš esmės &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;(kol) veikia kaip &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; (jei) ir &amp;lt;code&amp;gt;repeat&amp;lt;/code&amp;gt;(angl. pakartok) kartu sudėjus.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
1. Parašyk programą, kuri paprašytų vartotojo įvesti skaičių ir laipsnį. Naudodamas rekursija, atspausdink skaičių pakelta duotuoju laipsniu. (Pvz: 2&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;=8)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
rezultatas = int()&lt;br /&gt;
&lt;br /&gt;
def keltiLaipsniu(skaičius, laipsnis):&lt;br /&gt;
    if laipsnis == 0:&lt;br /&gt;
        return 1&lt;br /&gt;
    return skaičius * keltiLaipsniu(skaičius, laipsnis - 1)&lt;br /&gt;
&lt;br /&gt;
rezultatas = keltiLaipsniu(2, 3)&lt;br /&gt;
&lt;br /&gt;
print(rezultatas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Parašyk programą, kuri prašo vartotojo įvesti skaičių ir grąžina sumą nuo 1 iki to skaičiaus. Pavyzdžiui, jei įvedamas skaičius 5, programa grąžina 5 + 4 + 3 + 2 + 1 = &#039;&#039;&#039;15&#039;&#039;&#039;. Nepamiršk naudoti rekursijos.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def suma_iki_vieno(skaičius, suma):&lt;br /&gt;
    if skaičius == 0:&lt;br /&gt;
        return suma&lt;br /&gt;
    else:&lt;br /&gt;
        return skaičius + suma_iki_vieno(skaičius - 1, suma)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
įvestas_skaičius = int(input(&amp;quot;Įvesk skaičių: &amp;quot;))&lt;br /&gt;
rezultatas = suma_iki_vieno(įvestas_skaičius, 0)&lt;br /&gt;
print (&amp;quot;Suma nuo 1 iki&amp;quot;, įvestas_skaičius, &#039;:&#039;, rezultatas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Parašyk programą, kuri prašo vartotojo įvesti žodį ir grąžina tą žodį parašytą iš kitos pusės. Pvz “Labas” = “sabaL”. Šios užduoties sprendimui tau prireiks [[Vadovėlis/Daugiau apie sąrašus|daugiau žinių apie sąrašus]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def apversk(žodis):&lt;br /&gt;
    if len(žodis) == 0:&lt;br /&gt;
        return žodis&lt;br /&gt;
    else:&lt;br /&gt;
        return apversk(žodis[1:]) + žodis[0]&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
įvestas_žodis = input(&amp;quot;Įvesk žodį: &amp;quot;)&lt;br /&gt;
print(apversk(įvestas_žodis))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Funkcijų apibrėžimas |next=Sąrašai}}&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Rekursin%C4%97s_funkcijos&amp;diff=113</id>
		<title>Vadovėlis/Rekursinės funkcijos</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Rekursin%C4%97s_funkcijos&amp;diff=113"/>
		<updated>2023-01-18T15:12:39Z</updated>

		<summary type="html">&lt;p&gt;Monika: Pridėta antra užduotis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Funkcijų apibrėžimas |next=Sąrašai}}&lt;br /&gt;
&lt;br /&gt;
Vieniems šis skyrius gali pasirodyti naudingas, o kitiems - painus. Jeigu tau informacija pasirodys paini, tai nesuk galvos ir praleisk,  prie šio skyriaus galėsi grįžti šiek tiek vėliau. O dabar pabandom pasižiūrėti į mūsų parašytą programą:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def daug(a, b): # daug reiškia daugybą&lt;br /&gt;
    if b == 0:&lt;br /&gt;
        return 0&lt;br /&gt;
    lik = daug(a, b - 1) #lik reiškia likutį&lt;br /&gt;
    reikšmė = a + lik&lt;br /&gt;
    return reikšmė&lt;br /&gt;
rezultatas = daug(3, 2)&lt;br /&gt;
print(&amp;quot;3 * 2 = &amp;quot;, rezultatas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Iš esmės ši programa, tai teigiama sveikųjų skaičių daugybos funkcija (reikia atkreipti dėmesį į tai, kad Python&#039;o programavimo kalboje jau yra integruota funkcija dauginimui, čia mes patys parašėme lengvai suprantamą pavyzdį (jeigu kurtume tokią funkciją patys), kuris parodo kaip atrodo daugybos veiksmas. Šioje programoje gali pamatyti rekursijos naudojimą, tai yra iteracijos (kartojimo) forma, kai funkcija yra pakartotinai iškviečiama, kol bus įvykdyta sukurta išvesties sąlyga. Programa naudoja pakartotinius papildymus, kad gautų tą patį rezultatą kaip ir daugyba: pavyzdžiui 3 + 3 (sudėtis) duoda tą patį rezultatą kaip ir 3 * 2 (daugyba).&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;Klausimas:&#039;&#039; Ką pirmiausia daro programa?&lt;br /&gt;
: &#039;&#039;Atsakymas:&#039;&#039; Pirmiausia yra aprašyta daugybos funkcija:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def daug(a, b):&lt;br /&gt;
    if b == 0:&lt;br /&gt;
        return 0&lt;br /&gt;
    lik = daug(a, b - 1)&lt;br /&gt;
    reikšmė = a + lik &lt;br /&gt;
    return reikšmė&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
: Ši funkcija paima du parametrus ir grąžina reikšmę. Vėliau šią funkciją galima bus iškviesti.&lt;br /&gt;
; Kas nutinka toliau?  &lt;br /&gt;
: Vykdoma kita eilutė einanti po funkcijos &amp;lt;code&amp;gt;rezultatas = daug(3, 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką daro ši eilutė?&lt;br /&gt;
: Ši eilutė priskiria funkcijos &amp;lt;code&amp;gt;daug(3, 2)&amp;lt;/code&amp;gt; grąžinamą reikšmę kintamajam &amp;lt;code&amp;gt;rezultatas&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Ką grąžina &amp;lt;code&amp;gt;daug(3, 2)&amp;lt;/code&amp;gt;?&lt;br /&gt;
: Norėdami tai išsiaiškinti, turime peržiūrėti funkciją &amp;lt;code&amp;gt;daug()&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Kas vyksta su kodu?&lt;br /&gt;
: Kintamasis &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; gauna jam priskirtą reikšmę 3, o kintamasis &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; - jam priskirtą reikšmę 2.&lt;br /&gt;
; Kas nutinka tada?&lt;br /&gt;
: Vykdoma eilutė &amp;lt;code&amp;gt;if b == 0:&amp;lt;/code&amp;gt;. Kadangi &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; reikšmė yra 2, todėl eilutė &amp;lt;code&amp;gt;return 0&amp;lt;/code&amp;gt; praleidžiama.&lt;br /&gt;
; Kas vyksta toliau?&lt;br /&gt;
: Vykdoma eilutė &amp;lt;code&amp;gt;lik = daug(a, b - 1)&amp;lt;/code&amp;gt;. Ši eilutė nustato lokalaus kintamojo &amp;lt;code&amp;gt;lik&amp;lt;/code&amp;gt; reikšmę į &amp;lt;code&amp;gt;daug(a, b - 1)&amp;lt;/code&amp;gt; reikšmę. &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; reikšmė yra 3, o &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; - 2, todėl funkcija kviečia funkciją &amp;lt;code&amp;gt;daug(3, 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
; Taigi kokia yra &amp;lt;code&amp;gt;daug(3, 1)&amp;lt;/code&amp;gt; reikšmė?&lt;br /&gt;
: Turime paleisti funkciją &amp;lt;code&amp;gt;daug()&amp;lt;/code&amp;gt; su parametrais, kurie yra 3 ir 1.&lt;br /&gt;
; Kas nutinka toliau?&lt;br /&gt;
: Lokalūs kintamieji vėl pasileidus kodui jau yra nustatyti, todėl &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; reikšmė būtų 3, o &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; reikšmė – 1. Kadangi jie yra lokalūs kintamieji, todėl jie neturi įtakos ankstesnėms &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; reikšmėms.&lt;br /&gt;
; Kas įvyksta toliau?&lt;br /&gt;
: Kadangi &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; turi reikšmę 1, if sąlygos rezultatas yra neigiamas, todėl vykdoma kita eilutė &amp;lt;code&amp;gt;lik = daug(a, b - 1)&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Ką daro ši eilutė?&lt;br /&gt;
: Dabar kintamajam &amp;lt;code&amp;gt;lik&amp;lt;/code&amp;gt; priskiriam funkcijos &amp;lt;code&amp;gt;daug(3, 0)&amp;lt;/code&amp;gt; reikšmė.&lt;br /&gt;
; Kokia ši reikšmė?&lt;br /&gt;
: Norėdami tai išsiaiškinti, turime dar kartą paleisti funkciją. Šį kartą &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; reikšmė yra 3, o &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; – 0.&lt;br /&gt;
; Kas vyksta toliau?&lt;br /&gt;
: Pirmoji vykdytinos funkcijos eilutė yra &amp;lt;code&amp;gt;if b == 0:&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; reikšmė 0, todėl kita vykdoma eilutė yra &amp;lt;code&amp;gt;return 0&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką daro &amp;lt;code&amp;gt;return 0&amp;lt;/code&amp;gt; eilutė?&lt;br /&gt;
: Ši eilutė grąžina funkcijos reikšmę lygią 0 į tą vietą, kur ji buvo iškviesta.&lt;br /&gt;
; Kas iš to?&lt;br /&gt;
: Dabar mes žinome, kad &amp;lt;code&amp;gt;daug(3, 0)&amp;lt;/code&amp;gt; grąžina reikšmę 0. Dar žinome, ką daro eilutė &amp;lt;code&amp;gt;lik = daug(a, b - 1)&amp;lt;/code&amp;gt;, nes paleidžiame funkciją &amp;lt;code&amp;gt;daug()&amp;lt;/code&amp;gt; su parametrais 3 ir 0. Baigiame vykdyti &amp;lt;code&amp;gt;daug(3, 0)&amp;lt;/code&amp;gt; ir dabar vėl pradedame vykdyti &amp;lt;code&amp;gt;daug(3, 1)&amp;lt;/code&amp;gt;. Kintamajam &amp;lt;code&amp;gt;lik&amp;lt;/code&amp;gt; priskiriama reikšmė yra 0.&lt;br /&gt;
; Kurią eilutę kompiuteris skaito po to?&lt;br /&gt;
: Toliau vykdoma eilutė &amp;lt;code&amp;gt;reikšmė = a + lik&amp;lt;/code&amp;gt;. Žinome, kad &amp;lt;code&amp;gt;a = 3&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;lik = 0&amp;lt;/code&amp;gt; todėl dabar &amp;lt;code&amp;gt;reikšmė = 3&amp;lt;/code&amp;gt;. &lt;br /&gt;
; Kas nutinka toliau?&lt;br /&gt;
: Vykdoma eilutė &amp;lt;code&amp;gt;return reikšmė&amp;lt;/code&amp;gt;, kuri grąžina reikšmę 3. Šis skaičius atsiranda iš funkcijos &amp;lt;code&amp;gt;daug (3, 1)&amp;lt;/code&amp;gt; vykdymo. Iškvietus &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt;, grįžtame prie &amp;lt;code&amp;gt;daug(3, 2)&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Kur yra &amp;lt;code&amp;gt;daug(3, 2)&amp;lt;/code&amp;gt;?&lt;br /&gt;
: Mes turėjome kintamuosius &amp;lt;code&amp;gt;a = 3&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;b = 2&amp;lt;/code&amp;gt; ir nagrinėjome eilutę &amp;lt;code&amp;gt;lik = daug(a, b - 1)&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Kas įvyksta?&lt;br /&gt;
: Kintamajam &amp;lt;code&amp;gt;lik&amp;lt;/code&amp;gt; priskiriama reikšmė 3. Kita eilutė &amp;lt;code&amp;gt;reikšmė = a + lik&amp;lt;/code&amp;gt; priskiria kintamajam &amp;lt;code&amp;gt;reikšmė&amp;lt;/code&amp;gt; reikšmę &amp;lt;code&amp;gt;3 + 3&amp;lt;/code&amp;gt; arba 6.  &lt;br /&gt;
; Kas įvyksta toliau?&lt;br /&gt;
: Pradedama vykdyti kita eilutė, kuri grąžina 6 iš funkcijos. Tuomet grįžtame prie eilutės &amp;lt;code&amp;gt;rezultatas = daug(3, 2)&amp;lt;/code&amp;gt;, kur kintamajam &amp;lt;code&amp;gt;rezultatas&amp;lt;/code&amp;gt; dabar priskiriama reikšmė 6 &lt;br /&gt;
; Kas nutinka toliau?  &lt;br /&gt;
: Paleidžiama kita eilutė po funkcijos &amp;lt;code&amp;gt;print (&amp;quot;3 * 2 =&amp;quot;, rezultatas)&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Ji spausdina &amp;lt;code&amp;gt;3 * 2 =&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;rezultatas&amp;lt;/code&amp;gt; reikšmę, kuri yra 6. Visa išspausdinta eilutė yra &amp;lt;code&amp;gt;3 * 2 = 6&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Taigi, kas čia įvyko apskritai?  &lt;br /&gt;
: Iš esmės panaudojome du skirtingus faktus, kad apskaičiuotume dviejų skaičių kartotinį. Pirmas, kad bet koks skaičius padauginus iš nulio yra nulis &amp;lt;code&amp;gt;(x * 0 = 0)&amp;lt;/code&amp;gt;. Antras, kad skaičius padaugintas iš kito skaičiaus yra lygus pirmo skaičiaus ir pirmo bei vienetu mažesnio už antrąjį sandaugos sumai &amp;lt;code&amp;gt;(x * y = x + x * (y - 1))&amp;lt;/code&amp;gt;. Taigi ir čia &amp;lt;code&amp;gt;3 * 2&amp;lt;/code&amp;gt; pirmiausiai paverčiamas į &amp;lt;code&amp;gt;3 + 3 * 1&amp;lt;/code&amp;gt;. Tada &amp;lt;code&amp;gt;3 * 1&amp;lt;/code&amp;gt; paverčiamas į &amp;lt;code&amp;gt;3 + 3 * 0&amp;lt;/code&amp;gt;. Tuomet mes žinome, kad bet kuris skaičius padaugintas iš nulio yra nulis, todėl &amp;lt;code&amp;gt;3 * 0&amp;lt;/code&amp;gt; yra 0. Kai viskas surašoma vienoje eilutėje, gauname &amp;lt;code&amp;gt;3 + 3 + 0 &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Štai kaip viskas veikia:&lt;br /&gt;
&lt;br /&gt;
 daug(3, 2)&lt;br /&gt;
 3 + daug(3, 1)&lt;br /&gt;
 3 + 3 + daug(3, 0)&lt;br /&gt;
 3 + 3 + 0&lt;br /&gt;
 3 + 3&lt;br /&gt;
 6&lt;br /&gt;
&lt;br /&gt;
==== Rekursija ====&lt;br /&gt;
Funkcijos, kurios kreipiasi pačios į save yra vadinamos rekursinėmis funkcijomis. Šio skyriaus pavyzdžiuose panagrinėsime tokias funkcijas. Tai palengvina programavimo užduočių spendimų įgyvendinimą, nes kartais pakanka apsvarstyti tik vieną problemos žingsnį, o ne visą problemą iš karto. Be to tai leidžia išreikšti kai kurias matematines sąvokas paprastu, lengvai skaitomu kodu.&lt;br /&gt;
&lt;br /&gt;
Bet kokią problemą, kurią galime išspręsti naudojant rekursiją, gali būti išspręsta naudojant ciklus. Jie veikia greičiau, bet kartais ciklus sunku atlikti teisingai.&lt;br /&gt;
&lt;br /&gt;
Turbūt intuityviausias „rekursijos“ apibrėžimas yra toks:&lt;br /&gt;
  REKURSIJA&lt;br /&gt;
     Jei vis dar nesupranti, tai skaityk: REKURSIJA.&lt;br /&gt;
Pabandyk perskaityti dar kelis pavyzdžius.&lt;br /&gt;
&lt;br /&gt;
=== Pavyzdžiai ===&lt;br /&gt;
&#039;&#039;&#039;faktorialas.py&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#apibrėžia funkciją, kuri apskaičiuoja koeficientą&lt;br /&gt;
&lt;br /&gt;
def faktorialas(n):&lt;br /&gt;
    if n == 0:&lt;br /&gt;
        return 1&lt;br /&gt;
    if n &amp;lt; 0:&lt;br /&gt;
        return &amp;quot;Klaida, neigiami skaičiai neturi faktorialo reikšmių!!&amp;quot;&lt;br /&gt;
    return n * faktorialas(n - 1)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;2! =&amp;quot;, faktorialas(2))&lt;br /&gt;
print(&amp;quot;3! =&amp;quot;, faktorialas(3))&lt;br /&gt;
print(&amp;quot;4! =&amp;quot;, faktorialas(4))&lt;br /&gt;
print(&amp;quot;5! =&amp;quot;, faktorialas(5))&lt;br /&gt;
print(&amp;quot;-3! =&amp;quot;, faktorialas(-3))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas:&lt;br /&gt;
 &lt;br /&gt;
 2! = 2&lt;br /&gt;
 3! = 6&lt;br /&gt;
 4! = 24&lt;br /&gt;
 5! = 120&lt;br /&gt;
 -3! = Klaida, neigiami skaičiai neturi faktorialo reikšmių!!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;atgalinis_skaičiavimas.py&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def atgalinis_skaičiavimas(n):&lt;br /&gt;
    print(n)&lt;br /&gt;
    if n &amp;gt; 0:&lt;br /&gt;
        return atgalinis_skaičiavimas(n-1)&lt;br /&gt;
&lt;br /&gt;
atgalinis_skaičiavimas(5)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas:&lt;br /&gt;
 5&lt;br /&gt;
 4&lt;br /&gt;
 3&lt;br /&gt;
 2&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Dabar pabandyk žodį &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;(lietuviškai jei) pakeisti žodžiu &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; (lietuviškai kol). Pamatysi, kad kompiuteris pavirto skaičiuotuvu, kuris negali suskaičiuoti iki keturių. Iš esmės &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;(kol) veikia kaip &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; (jei) ir &amp;lt;code&amp;gt;repeat&amp;lt;/code&amp;gt;(angl. pakartok) kartu sudėjus.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
1. Parašyk programą, kuri paprašytų vartotojo įvesti skaičių ir laipsnį. Naudodamas rekursija, atspausdink skaičių pakelta duotuoju laipsniu. (Pvz: 2&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;=8)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
rezultatas = int()&lt;br /&gt;
&lt;br /&gt;
def keltiLaipsniu(skaičius, laipsnis):&lt;br /&gt;
    if laipsnis == 0:&lt;br /&gt;
        return 1&lt;br /&gt;
    return skaičius * keltiLaipsniu(skaičius, laipsnis - 1)&lt;br /&gt;
&lt;br /&gt;
rezultatas = keltiLaipsniu(2, 3)&lt;br /&gt;
&lt;br /&gt;
print(rezultatas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Parašyk programą, kuri prašo vartotojo įvesti skaičių ir grąžina sumą nuo 1 iki to skaičiaus. Pavyzdžiui, jei įvedamas skaičius 5, programa grąžina 5 + 4 + 3 + 2 + 1 = &#039;&#039;&#039;15&#039;&#039;&#039;. Nepamiršk naudoti rekursijos.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def suma_iki_vieno(skaičius, suma):&lt;br /&gt;
    if skaičius == 0:&lt;br /&gt;
        return suma&lt;br /&gt;
    else:&lt;br /&gt;
        return skaičius + suma_iki_vieno(skaičius - 1, suma)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
įvestas_skaičius = int(input(&amp;quot;Įvesk skaičių: &amp;quot;))&lt;br /&gt;
rezultatas = suma_iki_vieno(įvestas_skaičius, 0)&lt;br /&gt;
print (&amp;quot;Suma nuo 1 iki&amp;quot;, įvestas_skaičius, &#039;:&#039;, rezultatas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Funkcijų apibrėžimas |next=Sąrašai}}&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Funkcij%C5%B3_apibr%C4%97%C5%BEimas&amp;diff=112</id>
		<title>Vadovėlis/Funkcijų apibrėžimas</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Funkcij%C5%B3_apibr%C4%97%C5%BEimas&amp;diff=112"/>
		<updated>2023-01-18T14:46:17Z</updated>

		<summary type="html">&lt;p&gt;Monika: Pridėta užduotis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Derinimas |next=Rekursinės funkcijos}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funkcijų kūrimas ===&lt;br /&gt;
Prieš pradėdami šį skyrių pateiksime tau pavyzdį, kurio gali nepersirašinėti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
a = 23&lt;br /&gt;
b = -23&lt;br /&gt;
&lt;br /&gt;
if a &amp;lt; 0:&lt;br /&gt;
    a = -a&lt;br /&gt;
if b &amp;lt; 0:&lt;br /&gt;
    b = -b&lt;br /&gt;
if a == b:&lt;br /&gt;
    print(&amp;quot;Absoliučios&amp;quot;, a, &amp;quot;ir&amp;quot;, b, &amp;quot;reikšmės yra lygios.&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Absoliučios&amp;quot;, a, &amp;quot;ir&amp;quot;, b, &amp;quot;reikšmės yra skirtingos.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Programos rezultatas:&lt;br /&gt;
 &lt;br /&gt;
 Absoliučios 23 ir 23 reikšmės yra lygios.&lt;br /&gt;
&lt;br /&gt;
Ar neatrodo, kad programa yra šiek tiek pasikartojanti?.. Ir tikriausiai jau numanai, programuotojai nemėgsta pasikartojančių dalykų, nes juk pasikartojantiems dalykams atlikti ir yra sukurti kompiuteriai!! Be to atkreipk dėmesį, kad radus absoliučią reikšmę pasikeitė kintamojo vertė, todėl programa spausdina 23, o ne -23. Mūsų laimei Python&#039;as leidžia sukurti funkcijas, kurios šalina dubliavimą:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
a = 23&lt;br /&gt;
b = -23&lt;br /&gt;
&lt;br /&gt;
def absoliuti_reikšmė(n):&lt;br /&gt;
    if n &amp;lt; 0:&lt;br /&gt;
        n = -n&lt;br /&gt;
    return n&lt;br /&gt;
&lt;br /&gt;
if absoliuti_reikšmė(a) == absoliuti_reikšmė(b):&lt;br /&gt;
    print(&amp;quot;Absoliučios&amp;quot;, a, &amp;quot;ir&amp;quot;, b, &amp;quot;reikšmės yra lygios.&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Absoliučios&amp;quot;, a, &amp;quot;ir&amp;quot;, b, &amp;quot;reikšmės yra skirtingos.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Programos rezultatas:&lt;br /&gt;
&lt;br /&gt;
 Absoliučios 23 ir -23 reikšmės yra lygios.&lt;br /&gt;
&lt;br /&gt;
Pagrindinis naujai parašomos funkcijos elementas yra žodis &amp;lt;code&amp;gt;def&amp;lt;/code&amp;gt;.  &lt;br /&gt;
&amp;lt;code&amp;gt;def&amp;lt;/code&amp;gt; yra angliško žodžio &amp;lt;code&amp;gt;define&amp;lt;/code&amp;gt;, kuris reiškia apibrėžti, trumpinys, o juo pradedame apibrėžti savo kuriamą funkciją. Po &amp;lt;code&amp;gt;def&amp;lt;/code&amp;gt; eina funkcijos pavadinimas: &amp;lt;code&amp;gt;absoliuti_reikšmė&amp;lt;/code&amp;gt;. Vėliau skliausteliuose eina parametras n - &amp;lt;code&amp;gt;(n)&amp;lt;/code&amp;gt;, kurio reikšmė yra nurodoma, kai funkcija yra iškviečiama. Vėliau eina dvitaškis &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;, po kurio esančios komandos yra vykdomos, kai iškviečiama vykdyti ši funkcija. Funkcijos komandos atitrauktos nuo krašto. Jos tęsiasi tol, kol pasibaigia funkcijoje nurodyti veiksmai arba grąžinamas norimas rezultatas nurodytas po &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; komanda grąžina reikšmę į tą pačią vietą, kur buvo iškviesta funkcija. Mūsų pavyzdinėje programoje funkcija &amp;lt;code&amp;gt;absoliuti_reikšmė&amp;lt;/code&amp;gt; buvo iškviesta du kartus &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; sąlygos reiškinyje. pabandykime patyrinėti dar kelias naujas funkcijas.&lt;br /&gt;
&lt;br /&gt;
Ar pastebėjai, kad &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; reikšmės nepasikeitė?&lt;br /&gt;
&lt;br /&gt;
Funkcijos taip pat gali būti naudojamos vykdant užduotis, kurios negrąžina reikšmių. Štai keli pavyzdžiai, kuriuose skirtingai aprašomos funkcijos:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def labas():&lt;br /&gt;
    print(&amp;quot;Labas&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def plotas(plotis, aukštis):&lt;br /&gt;
    return plotis * aukštis&lt;br /&gt;
&lt;br /&gt;
def rašyk_mano_vardas(vardas):&lt;br /&gt;
    print(&amp;quot;Mano vardas&amp;quot;, vardas)&lt;br /&gt;
&lt;br /&gt;
labas()&lt;br /&gt;
labas()&lt;br /&gt;
&lt;br /&gt;
rašyk_mano_vardas(&amp;quot;Benas&amp;quot;)&lt;br /&gt;
w = 4&lt;br /&gt;
h = 5&lt;br /&gt;
print(&amp;quot;plotis =&amp;quot;, w, &amp;quot; aukštis=&amp;quot;, h, &amp;quot; plotas=&amp;quot;, plotas(w, h))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
programos rezultatas&lt;br /&gt;
&lt;br /&gt;
 Labas&lt;br /&gt;
 Labas&lt;br /&gt;
 Mano vardas Benas&lt;br /&gt;
 plotis = 4  aukštis = 5  plotas = 20&lt;br /&gt;
&lt;br /&gt;
Šis pavyzdys parodo ir daugiau dalykų, kuriuos galima padaryti su funkcijomis. Atkreipk dėmesį, kad galima nenaudoti argumentų arba galima naudoti du argumentus, ar daugiau. Matome ir dar kelis svarbius dalykus, kuriuos gali padaryti naudojant funkcijas. Taip pat atkreipk dėmesį, kad ne kiekviena funkcija grąžina reikšmę – grąžinimas yra neprivalomas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Funkcijos gali būti naudojamos pakartotiniam kodui pašalinti. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kintamieji funkcijose ===&lt;br /&gt;
Dažnai pasitaiko, kad pasikartojančiam kode yra kintamųjų, todėl į juos reikia atkreipti dėmesį, kai šaliname pakartotiną kodą. Iki šiol visi kintamieji, kuriuos matėme buvo globalūs. Tokie kintamieji gali būti pasiekiami ir naudojami bet kurioje programos vietoje. Funkcijose esantys kintamieji yra vadinami specialiu pavadinimu - lokalūs kintamieji. Šie kintamieji egzistuoja tik veikiant funkcijai. Kai lokalus kintamasis turi globalaus kintamojo pavadinimą, tai funkcijoje pirmenybė teikiama ir naudojamas lokalus kintamasis. Skamba painiai? Štai keli pavyzdžiai:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 4&lt;br /&gt;
 &lt;br /&gt;
def manoFunkcija():&lt;br /&gt;
    a = 17&lt;br /&gt;
    print(&amp;quot;Mano funkcijoje a =&amp;quot;, a)&lt;br /&gt;
&lt;br /&gt;
manoFunkcija()&lt;br /&gt;
print(&amp;quot;a = &amp;quot;, a)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gaunamas rezultatas&lt;br /&gt;
 Mano funkcijoje a = 17&lt;br /&gt;
 a = 4&lt;br /&gt;
&lt;br /&gt;
Kaip matai pavyzdyje, funkcijos viduje esantis kintamasis nepaiso globalaus kintamojo, nes jis egzistuoja tik funkcijos viduje. Taip pat, turėjai pastebėti, kad funkcijos viduje kintamajam &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; buvo priskirta nauja reikšmė, bet ji buvo aktuali tik funkcijoje, o ne už jos ribų - globalus kintamasis &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; liko nepakitęs.&lt;br /&gt;
&lt;br /&gt;
Kitas kiek sudėtingesnis kodo pavyzdys:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
kintamasis_a = 10&lt;br /&gt;
kintamasis_b = 15&lt;br /&gt;
kintamasis_e = 25&lt;br /&gt;
&lt;br /&gt;
def funkcija(kintamasis_a):&lt;br /&gt;
    print(&amp;quot;funkcijoje kintamasis_a =&amp;quot;, kintamasis_a)&lt;br /&gt;
    kintamasis_b = 100 + kintamasis_a&lt;br /&gt;
    kintamasis_d = 2 * kintamasis_a&lt;br /&gt;
    print(&amp;quot;funkcijoje  kintamasis_b =&amp;quot;, kintamasis_b)&lt;br /&gt;
    print(&amp;quot;funkcijoje  kintamasis_d =&amp;quot;, kintamasis_d)&lt;br /&gt;
    print(&amp;quot;funkcijoje  kintamasis_e =&amp;quot;, kintamasis_e)&lt;br /&gt;
    return kintamasis_b + 10&lt;br /&gt;
&lt;br /&gt;
kintamasis_c = funkcija(kintamasis_b)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;kintamasis_a =&amp;quot;, kintamasis_a)&lt;br /&gt;
print(&amp;quot;kintamasis_b =&amp;quot;, kintamasis_b)&lt;br /&gt;
print(&amp;quot;kintamasis_c =&amp;quot;, kintamasis_c)&lt;br /&gt;
print(&amp;quot;kintamasis_d =&amp;quot;, kintamasis_d)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rezultatas:&lt;br /&gt;
&lt;br /&gt;
 funkcijoje  kintamasis_a =  15&lt;br /&gt;
 funkcijoje  kintamasis_b =  115&lt;br /&gt;
 funkcijoje  kintamasis_d =  30&lt;br /&gt;
 funkcijoje  kintamasis_e =  25&lt;br /&gt;
 kintamasis_a =  10&lt;br /&gt;
 kintamasis_b =  15&lt;br /&gt;
 kintamasis_c =  125&lt;br /&gt;
 kintamasis_d = &lt;br /&gt;
 &lt;br /&gt;
 Klaida (paskutinė aptikta klaida):&lt;br /&gt;
  File &amp;quot;C:\def2.py&amp;quot;, eilutė 19, in &amp;lt;module&amp;gt; (modulyje)&lt;br /&gt;
    print(&amp;quot;kintamasis_d = &amp;quot;, kintamasis_d)&lt;br /&gt;
 NameError: pavadinimas &#039;kintamasis_d&#039; yra neapibrėžtas&lt;br /&gt;
&lt;br /&gt;
Šiame pavyzdyje kintamieji &amp;lt;code&amp;gt;kintamasis_a&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kintamasis_b&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;kintamasis_d&amp;lt;/code&amp;gt;, esantys funkcijos viduje, yra lokalūs kintamieji. Po paskutinės funkcijos eilutės &amp;lt;code&amp;gt;return kintamasis_b + 10&amp;lt;/code&amp;gt; įvykdymo, visi jie nustoja egzistuoti. Kintamasis &amp;lt;code&amp;gt;kintamasis_a&amp;lt;/code&amp;gt; yra parametro pavadinimas, todėl tai jį automatiškai padaro lokaliu kintamuoju. Kintamieji &amp;lt;code&amp;gt;kintamasis_b&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;kintamasis_d&amp;lt;/code&amp;gt; yra lokalūs kintamieji, nes jie rodomi funkcijos lygybės ženklo kairėje pusėje esančiuose teiginiuose &amp;lt;code&amp;gt;kintamasis_b = 100 + kintamasis_a&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;kintamasis_d = 2 * kintamasis_a&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Kai funkcija iškviečiama naudojant &amp;lt;code&amp;gt;kintamasis_c = funkcija(kintamasis_b)&amp;lt;/code&amp;gt;, 15 priskiriama kintamajam &amp;lt;code&amp;gt;kintamasis_a&amp;lt;/code&amp;gt;, nes tuo metu, kai kviečiama funkcija &amp;lt;code&amp;gt;funkcija(kintamasis_b)&amp;lt;/code&amp;gt;, globalaus &amp;lt;code&amp;gt;kintamasis_b&amp;lt;/code&amp;gt; reikšmė yra 15. Taigi &amp;lt;code&amp;gt;kintamasis_a&amp;lt;/code&amp;gt; reikšmė nustatoma į 15, kai jis yra funkcijos &amp;lt;code&amp;gt;funkcija()&amp;lt;/code&amp;gt; viduje.&lt;br /&gt;
&lt;br /&gt;
Kaip matai, pasibaigus funkcijai, lokalūs kintamieji &amp;lt;code&amp;gt;kintamasis_a&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;kintamasis_b&amp;lt;/code&amp;gt;, kurie buvo naudojami funkcijos viduje, dingo. Tad komanda &amp;lt;code&amp;gt;print (&amp;quot;kintamasis_a =&amp;quot;, kintamasis_a)&amp;lt;/code&amp;gt; atspausdina reikšmę &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;, t. y. globaliojo kintamojo &amp;lt;code&amp;gt;kintamasis_a&amp;lt;/code&amp;gt; reikšmę.&lt;br /&gt;
&lt;br /&gt;
Taip pat, atkreipk dėmesį į klaidą &amp;lt;code&amp;gt; NameError &amp;lt;/code&amp;gt;, kuri atsiranda mūsų programos pabaigoje. Tai nutinka, nes kintamasis &amp;lt;code&amp;gt;kintamasis_d&amp;lt;/code&amp;gt; nebeegzistuoja nuo tada, kai baigėsi &amp;lt;code&amp;gt;funkcija()&amp;lt;/code&amp;gt;. Pasibaigus funkcijai, visi lokalūs kintamieji ištrinami. Jeigu nori, ką nors gauti iš funkcijos, turėsi naudoti komandą &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Paskutinis dalykas, į kurį reikia atkreipti dėmesį, yra tai, kad funkcijos viduje &amp;lt;code&amp;gt;kintamasis_e&amp;lt;/code&amp;gt; reikšmė išlieka nepakitusi, nes tai nėra nei parametras, nei lokalus kintamasis – jis niekada nerodomas kairėje lygybės pusėje. Kai funkcijos viduje kreipiamasi į globalų kintamąjį, tai jis naudoja reikšmę, įgytą už funkcijos ribų.&lt;br /&gt;
&lt;br /&gt;
Funkcijos naudoja lokalius kintamuosius, kurie egzistuoja tik funkcijos viduje, ir gali ignoruoti kitus kintamuosius, kurie yra už funkcijos ribų.&lt;br /&gt;
&lt;br /&gt;
=== Pavyzdžiai ===&lt;br /&gt;
&#039;&#039;&#039;temperatūra2.py&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#! /usr/bin/python&lt;br /&gt;
#-*-coding: utf-8 -*-&lt;br /&gt;
# konvertuoja temperatūrą į Farenheitus ar Celsijų&lt;br /&gt;
 &lt;br /&gt;
def spausdinti_pasirinkimus():&lt;br /&gt;
    print(&amp;quot;Pasirinkimai:&amp;quot;)&lt;br /&gt;
    print(&amp;quot; &#039;s&#039; spausdinti pasirinkimus&amp;quot;)&lt;br /&gt;
    print(&amp;quot; &#039;c&#039; konvertuoti iš Celsijaus&amp;quot;)&lt;br /&gt;
    print(&amp;quot; &#039;f&#039; konvertuoti iš Farenheitų&amp;quot;)&lt;br /&gt;
    print(&amp;quot; &#039;i&#039; išjungti programą&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
def celsijus_į_farenheitus(c_temp):&lt;br /&gt;
    return 9.0 / 5.0 * c_temp + 32&lt;br /&gt;
 &lt;br /&gt;
def farenheitai_į_celsijų(f_temp):&lt;br /&gt;
    return (f_temp - 32.0) * 5.0 / 9.0&lt;br /&gt;
 &lt;br /&gt;
pasirinkimas = &amp;quot;s&amp;quot;&lt;br /&gt;
while pasirinkimas != &amp;quot;i&amp;quot;:&lt;br /&gt;
    if pasirinkimas == &amp;quot;c&amp;quot;:&lt;br /&gt;
        c_temp = float(input(&amp;quot;Celsijaus temperatūra: &amp;quot;))&lt;br /&gt;
        print(&amp;quot;Farenheitai:&amp;quot;, celsijus_į_farenheitus(c_temp))&lt;br /&gt;
        pasirinkimas = input(&amp;quot;pasirinkimas: &amp;quot;)&lt;br /&gt;
    elif pasirinkimas == &amp;quot;f&amp;quot;:&lt;br /&gt;
        f_temp = float(input(&amp;quot;farenheitai_į_celsijų: &amp;quot;))&lt;br /&gt;
        print(&amp;quot;Celsijus:&amp;quot;, farenheitai_į_celsijų(f_temp))&lt;br /&gt;
        pasirinkimas= input(&amp;quot;pasirinkimas: &amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        pasirinkimas= &amp;quot;s&amp;quot;    #Arba pasirinkimas! = &amp;quot;i&amp;quot;: kad spausdintų&lt;br /&gt;
                        #kai įrašoma, kas nors netikėto&lt;br /&gt;
        spausdinti_pasirinkimus()&lt;br /&gt;
        pasirinkimas = input(&amp;quot;pasirinkimas: &amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kaip tai veikia?:&lt;br /&gt;
&lt;br /&gt;
 Pasirinkimai:&lt;br /&gt;
  &#039;s&#039; spausdinti pasirinkimus&lt;br /&gt;
  &#039;c&#039; konvertuoti iš Celsijaus&lt;br /&gt;
  &#039;f&#039; konvertuoti iš Farenheitų&lt;br /&gt;
  &#039;i&#039; išjungti programą&lt;br /&gt;
 pasirinkimas: &#039;&#039;&#039;c&#039;&#039;&#039;&lt;br /&gt;
 Celsijaus temperatūra: &#039;&#039;&#039;30&#039;&#039;&#039; &lt;br /&gt;
 Farenheitai: 86.0&lt;br /&gt;
 pasirinkimas: &#039;&#039;&#039;f&#039;&#039;&#039;&lt;br /&gt;
 Farenheitų temperatūra: &#039;&#039;&#039;60&#039;&#039;&#039;&lt;br /&gt;
 Celsijus: 15.5555555556&lt;br /&gt;
 pasirinkimas: &#039;&#039;&#039;i&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;plotas2.py&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#! /usr/bin/python&lt;br /&gt;
#-*-coding: utf-8 -*-&lt;br /&gt;
# apskaičiuoja duotą stačiakampio plotą&lt;br /&gt;
&lt;br /&gt;
def pasisveikinimas():&lt;br /&gt;
    print(&#039;Labas!&#039;)&lt;br /&gt;
 &lt;br /&gt;
def plotas(plotis, aukštis):&lt;br /&gt;
    return plotis * aukštis&lt;br /&gt;
 &lt;br /&gt;
def mano_vardas(vardas):&lt;br /&gt;
    print(&#039;Mano vardas yra,&#039;, vardas)&lt;br /&gt;
 &lt;br /&gt;
def teigiama_įvestis(sugalvotas_skaičius):&lt;br /&gt;
    skaičius = float(input(sugalvotas_skaičius))&lt;br /&gt;
    while skaičius&amp;lt;= 0:&lt;br /&gt;
        print(&#039;Privalo būti teigiamas skaičius&#039;)&lt;br /&gt;
        skaičius = float(input(sugalvotas_skaičius))&lt;br /&gt;
    return skaičius&lt;br /&gt;
 &lt;br /&gt;
vardas = input(&#039;Tavo vardas: &#039;)&lt;br /&gt;
pasisveikinimas()&lt;br /&gt;
mano_vardas(name)&lt;br /&gt;
print()&lt;br /&gt;
print(&#039;Kad rastum stačiakampio plotą,&#039;)&lt;br /&gt;
print(&#039;įrašyk plotį ir aukštį&#039;)&lt;br /&gt;
print()&lt;br /&gt;
w = teigiama_įvestis(&#039;Plotis: &#039;)&lt;br /&gt;
h = teigiama_įvestis(&#039;Aukštis: &#039;)&lt;br /&gt;
 &lt;br /&gt;
print(&#039;Plotis =&#039;, w, &#039; Aukštis =&#039;, h, &#039; Plotas =&#039;, area(w, h))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kaip veikia ši programa?&lt;br /&gt;
&lt;br /&gt;
 Tavo vardas: &#039;&#039;&#039;Benas&#039;&#039;&#039;&lt;br /&gt;
 Labas!&lt;br /&gt;
 Mano vardas yra Benas&lt;br /&gt;
 &lt;br /&gt;
 Kad rastum stačiakampio plotą,&lt;br /&gt;
 įrašyk plotį ir aukštį.&lt;br /&gt;
 &lt;br /&gt;
 Plotis: &#039;&#039;&#039;-4&#039;&#039;&#039;&lt;br /&gt;
 Privalo būti teigiamas skaičius&lt;br /&gt;
 Plotis: &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
 Aukštis: &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
 Plotis = 4  Aukštis = 3  Plotas = 12&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
&lt;br /&gt;
1. Parašyk programą, kurioje būtų funkcija, kuriai padavus skaičių, ji grąžina to skaičiaus, pakelto kubu, reikšmę. Patikrink funkcijos veikimą išvesdamas kelių skirtingų skaičių, pakeltų kubu, reikšmes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def pakelk_kubu(skaičius):&lt;br /&gt;
    kubas = skaičius * skaičius * skaičius&lt;br /&gt;
    print(skaičius, &amp;quot; pakelta kubu yra &amp;quot;, kubas)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
pakelk_kubu(1)&lt;br /&gt;
pakelk_kubu(2)&lt;br /&gt;
pakelk_kubu(3)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Parašyk programą, kuri prašytų vartotojo įvesti du skaičius. Programoje turėtų būti funkcija, kuriai padavus du skaičius, ji grąžintų rezultatą, kuris skaičius yra didesnis arba, kad skaičiai yra lygūs.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def kuris_didesnis(pirmas, antras):&lt;br /&gt;
    if pirmas &amp;gt; antras:&lt;br /&gt;
        return &#039;Pirmas skaičius didesnis&#039;&lt;br /&gt;
    elif antras &amp;gt; pirmas:&lt;br /&gt;
        return &#039;Antras skaičius didesnis&#039;&lt;br /&gt;
    else:&lt;br /&gt;
        return &#039;Skaičiai lygūs&#039;&lt;br /&gt;
&lt;br /&gt;
pirmas_skaičius = int(input(&amp;quot;Įvesk pirmą skaičių: &amp;quot;))&lt;br /&gt;
antras_skaičius = int(input(&amp;quot;Įvesk antrą skaičių: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
rezultatas = kuris_didesnis(pirmas_skaičius, antras_skaičius)&lt;br /&gt;
print (rezultatas)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Perrašyk programą plotas2.py, kuri yra aukščiau pateiktame pavyzdyje, taip, kad būtų parašytos atskiros kvadrato, stačiakampio ir apskritimo ploto funkcijos ((&amp;lt;code&amp;gt;3.14 * spindulys**2&amp;lt;/code&amp;gt;). Taip pat šioje programoje turėtų būti sukurtas toks pasirinkimų meniu:&lt;br /&gt;
&lt;br /&gt;
  Pasirinkimai:&lt;br /&gt;
   s = skaičiuoti kvadrato plotą.&lt;br /&gt;
   c = skaičiuoti apskritimo plotą.&lt;br /&gt;
   r = skaičiuoti stačiakampio plotą.&lt;br /&gt;
   q = išeiti.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def kvadratas(L):&lt;br /&gt;
    return L * L&lt;br /&gt;
&lt;br /&gt;
def stačiakampis(aukštis, plotis):&lt;br /&gt;
    return aukštis * plotis&lt;br /&gt;
&lt;br /&gt;
def apskritimas(spindulys):&lt;br /&gt;
    return 3.14159 * spindulys** 2&lt;br /&gt;
&lt;br /&gt;
def parinktys():&lt;br /&gt;
    print()&lt;br /&gt;
    print(&amp;quot;Pasirinkimai:&amp;quot;)&lt;br /&gt;
    print(&amp;quot;s = skaičiuoti kvadrato plotą.&amp;quot;)&lt;br /&gt;
    print(&amp;quot;c = skaičiuoti apskritimo plotą.&amp;quot;)&lt;br /&gt;
    print(&amp;quot;r = skaičiuoti stačiakampio plotą.&amp;quot;)&lt;br /&gt;
    print(&amp;quot;q = išeiti&amp;quot;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Ši programa apskaičiuos kvadrato, apskritimo ar stačiakampio plotą.&amp;quot;)&lt;br /&gt;
pasirinkimas = &amp;quot;x&amp;quot;&lt;br /&gt;
parinktys()&lt;br /&gt;
while pasirinkimas != &amp;quot;q&amp;quot;:&lt;br /&gt;
    choice = input(&amp;quot;Įrašyk savo pasirinkimą: &amp;quot;)&lt;br /&gt;
    if pasirinkimas== &amp;quot;s&amp;quot;:&lt;br /&gt;
        L = float(input(&amp;quot;Kvadrato kraštinės ilgis: &amp;quot;))&lt;br /&gt;
        print(&amp;quot;Šio kvadrato plotas&amp;quot;, kvadratas(L))&lt;br /&gt;
        parinktys()&lt;br /&gt;
    elif pasirinkimas == &amp;quot;c&amp;quot;:&lt;br /&gt;
        spindulys = float(input(&amp;quot;Apskritimo spindulys yra: &amp;quot;))&lt;br /&gt;
        print(&amp;quot;Apskritimo plotas yra&amp;quot;, apskritimas(spindulys))&lt;br /&gt;
        parinktys()&lt;br /&gt;
    elif pasirinkimas == &amp;quot;r&amp;quot;:&lt;br /&gt;
        plotis = float(input(&amp;quot;Stačiakampio plotis: &amp;quot;))&lt;br /&gt;
        aukštis = float(input(&amp;quot;Stačiakampio aukštis: &amp;quot;))&lt;br /&gt;
        print(&amp;quot;Stačiakampio plotas yra&amp;quot;, kvadratas(plotis, aukštis))&lt;br /&gt;
        parinktys()&lt;br /&gt;
    elif pasirinkimas == &amp;quot;q&amp;quot;:&lt;br /&gt;
        print(&amp;quot; &amp;quot;,end=&amp;quot;&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Neatpažintas pasirinkimas.&amp;quot;)&lt;br /&gt;
        parinktys()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Derinimas |next=Rekursinės funkcijos}}&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Funkcij%C5%B3_apibr%C4%97%C5%BEimas&amp;diff=74</id>
		<title>Vadovėlis/Funkcijų apibrėžimas</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Funkcij%C5%B3_apibr%C4%97%C5%BEimas&amp;diff=74"/>
		<updated>2023-01-06T14:29:12Z</updated>

		<summary type="html">&lt;p&gt;Monika: Pridėta užduotis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Derinimas |next=Rekursinės funkcijos}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funkcijų kūrimas ===&lt;br /&gt;
Prieš pradėdami šį skyrių pateiksime tau pavyzdį, kurio gali nepersirašinėti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
a = 23&lt;br /&gt;
b = -23&lt;br /&gt;
&lt;br /&gt;
if a &amp;lt; 0:&lt;br /&gt;
    a = -a&lt;br /&gt;
if b &amp;lt; 0:&lt;br /&gt;
    b = -b&lt;br /&gt;
if a == b:&lt;br /&gt;
    print(&amp;quot;Absoliučios&amp;quot;, a, &amp;quot;ir&amp;quot;, b, &amp;quot;reikšmės yra lygios.&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Absoliučios&amp;quot;, a, &amp;quot;ir&amp;quot;, b, &amp;quot;reikšmės yra skirtingos.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Programos rezultatas:&lt;br /&gt;
 &lt;br /&gt;
 Absoliučios 23 ir 23 reikšmės yra lygios.&lt;br /&gt;
&lt;br /&gt;
Ar neatrodo, kad programa yra šiek tiek pasikartojanti?.. Ir tikriausiai jau numanai, programuotojai nemėgsta pasikartojančių dalykų, nes juk pasikartojantiems dalykams atlikti ir yra sukurti kompiuteriai!! Be to atkreipk dėmesį, kad radus absoliučią reikšmę pasikeitė kintamojo vertė, todėl programa spausdina 23, o ne -23. Mūsų laimei Python&#039;as leidžia sukurti funkcijas, kurios šalina dubliavimą:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
a = 23&lt;br /&gt;
b = -23&lt;br /&gt;
&lt;br /&gt;
def absoliuti_reikšmė(n):&lt;br /&gt;
    if n &amp;lt; 0:&lt;br /&gt;
        n = -n&lt;br /&gt;
    return n&lt;br /&gt;
&lt;br /&gt;
if absoliuti_reikšmė(a) == absoliuti_reikšmė(b):&lt;br /&gt;
    print(&amp;quot;Absoliučios&amp;quot;, a, &amp;quot;ir&amp;quot;, b, &amp;quot;reikšmės yra lygios.&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Absoliučios&amp;quot;, a, &amp;quot;ir&amp;quot;, b, &amp;quot;reikšmės yra skirtingos.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Programos rezultatas:&lt;br /&gt;
&lt;br /&gt;
 Absoliučios 23 ir -23 reikšmės yra lygios.&lt;br /&gt;
&lt;br /&gt;
Pagrindinis naujai parašomos funkcijos elementas yra žodis &amp;lt;code&amp;gt;def&amp;lt;/code&amp;gt;.  &lt;br /&gt;
&amp;lt;code&amp;gt;def&amp;lt;/code&amp;gt; yra angliško žodžio &amp;lt;code&amp;gt;define&amp;lt;/code&amp;gt;, kuris reiškia apibrėžti, trumpinys, o juo pradedame apibrėžti savo kuriamą funkciją. Po &amp;lt;code&amp;gt;def&amp;lt;/code&amp;gt; eina funkcijos pavadinimas: &amp;lt;code&amp;gt;absoliuti_reikšmė&amp;lt;/code&amp;gt;. Vėliau skliausteliuose eina parametras n - &amp;lt;code&amp;gt;(n)&amp;lt;/code&amp;gt;, kurio reikšmė yra nurodoma, kai funkcija yra iškviečiama. Vėliau eina dvitaškis &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;, po kurio esančios komandos yra vykdomos, kai iškviečiama vykdyti ši funkcija. Funkcijos komandos atitrauktos nuo krašto. Jos tęsiasi tol, kol pasibaigia funkcijoje nurodyti veiksmai arba grąžinamas norimas rezultatas nurodytas po &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; komanda grąžina reikšmę į tą pačią vietą, kur buvo iškviesta funkcija. Mūsų pavyzdinėje programoje funkcija &amp;lt;code&amp;gt;absoliuti_reikšmė&amp;lt;/code&amp;gt; buvo iškviesta du kartus &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; sąlygos reiškinyje. pabandykime patyrinėti dar kelias naujas funkcijas.&lt;br /&gt;
&lt;br /&gt;
Ar pastebėjai, kad &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; reikšmės nepasikeitė?&lt;br /&gt;
&lt;br /&gt;
Funkcijos taip pat gali būti naudojamos vykdant užduotis, kurios negrąžina reikšmių. Štai keli pavyzdžiai, kuriuose skirtingai aprašomos funkcijos:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def labas():&lt;br /&gt;
    print(&amp;quot;Labas&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def plotas(plotis, aukštis):&lt;br /&gt;
    return plotis * aukštis&lt;br /&gt;
&lt;br /&gt;
def rašyk_mano_vardas(vardas):&lt;br /&gt;
    print(&amp;quot;Mano vardas&amp;quot;, vardas)&lt;br /&gt;
&lt;br /&gt;
labas()&lt;br /&gt;
labas()&lt;br /&gt;
&lt;br /&gt;
rašyk_mano_vardas(&amp;quot;Benas&amp;quot;)&lt;br /&gt;
w = 4&lt;br /&gt;
h = 5&lt;br /&gt;
print(&amp;quot;plotis =&amp;quot;, w, &amp;quot; aukštis=&amp;quot;, h, &amp;quot; plotas=&amp;quot;, plotas(w, h))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
programos rezultatas&lt;br /&gt;
&lt;br /&gt;
 Labas&lt;br /&gt;
 Labas&lt;br /&gt;
 Mano vardas Benas&lt;br /&gt;
 plotis = 4  aukštis = 5  plotas = 20&lt;br /&gt;
&lt;br /&gt;
Šis pavyzdys parodo ir daugiau dalykų, kuriuos galima padaryti su funkcijomis. Atkreipk dėmesį, kad galima nenaudoti argumentų arba galima naudoti du argumentus, ar daugiau. Matome ir dar kelis svarbius dalykus, kuriuos gali padaryti naudojant funkcijas. Taip pat atkreipk dėmesį, kad ne kiekviena funkcija grąžina reikšmę – grąžinimas yra neprivalomas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Funkcijos gali būti naudojamos pakartotiniam kodui pašalinti. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kintamieji funkcijose ===&lt;br /&gt;
Dažnai pasitaiko, kad pasikartojančiam kode yra kintamųjų, todėl į juos reikia atkreipti dėmesį, kai šaliname pakartotiną kodą. Iki šiol visi kintamieji, kuriuos matėme buvo globalūs. Tokie kintamieji gali būti pasiekiami ir naudojami bet kurioje programos vietoje. Funkcijose esantys kintamieji yra vadinami specialiu pavadinimu - lokalūs kintamieji. Šie kintamieji egzistuoja tik veikiant funkcijai. Kai lokalus kintamasis turi globalaus kintamojo pavadinimą, tai funkcijoje pirmenybė teikiama ir naudojamas lokalus kintamasis. Skamba painiai? Štai keli pavyzdžiai:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 4&lt;br /&gt;
 &lt;br /&gt;
def manoFunkcija():&lt;br /&gt;
    a = 17&lt;br /&gt;
    print(&amp;quot;Mano funkcijoje a =&amp;quot;, a)&lt;br /&gt;
&lt;br /&gt;
manoFunkcija()&lt;br /&gt;
print(&amp;quot;a = &amp;quot;, a)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gaunamas rezultatas&lt;br /&gt;
 Mano funkcijoje a = 17&lt;br /&gt;
 a = 4&lt;br /&gt;
&lt;br /&gt;
Kaip matai pavyzdyje, funkcijos viduje esantis kintamasis nepaiso globalaus kintamojo, nes jis egzistuoja tik funkcijos viduje. Taip pat, turėjai pastebėti, kad funkcijos viduje kintamajam &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; buvo priskirta nauja reikšmė, bet ji buvo aktuali tik funkcijoje, o ne už jos ribų - globalus kintamasis &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; liko nepakitęs.&lt;br /&gt;
&lt;br /&gt;
Kitas kiek sudėtingesnis kodo pavyzdys:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
kintamasis_a = 10&lt;br /&gt;
kintamasis_b = 15&lt;br /&gt;
kintamasis_e = 25&lt;br /&gt;
&lt;br /&gt;
def funkcija(kintamasis_a):&lt;br /&gt;
    print(&amp;quot;funkcijoje kintamasis_a =&amp;quot;, kintamasis_a)&lt;br /&gt;
    kintamasis_b = 100 + kintamasis_a&lt;br /&gt;
    kintamasis_d = 2 * kintamasis_a&lt;br /&gt;
    print(&amp;quot;funkcijoje  kintamasis_b =&amp;quot;, kintamasis_b)&lt;br /&gt;
    print(&amp;quot;funkcijoje  kintamasis_d =&amp;quot;, kintamasis_d)&lt;br /&gt;
    print(&amp;quot;funkcijoje  kintamasis_e =&amp;quot;, kintamasis_e)&lt;br /&gt;
    return kintamasis_b + 10&lt;br /&gt;
&lt;br /&gt;
kintamasis_c = funkcija(kintamasis_b)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;kintamasis_a =&amp;quot;, kintamasis_a)&lt;br /&gt;
print(&amp;quot;kintamasis_b =&amp;quot;, kintamasis_b)&lt;br /&gt;
print(&amp;quot;kintamasis_c =&amp;quot;, kintamasis_c)&lt;br /&gt;
print(&amp;quot;kintamasis_d =&amp;quot;, kintamasis_d)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rezultatas:&lt;br /&gt;
&lt;br /&gt;
 funkcijoje  kintamasis_a =  15&lt;br /&gt;
 funkcijoje  kintamasis_b =  115&lt;br /&gt;
 funkcijoje  kintamasis_d =  30&lt;br /&gt;
 funkcijoje  kintamasis_e =  25&lt;br /&gt;
 kintamasis_a =  10&lt;br /&gt;
 kintamasis_b =  15&lt;br /&gt;
 kintamasis_c =  125&lt;br /&gt;
 kintamasis_d = &lt;br /&gt;
 &lt;br /&gt;
 Klaida (paskutinė aptikta klaida):&lt;br /&gt;
  File &amp;quot;C:\def2.py&amp;quot;, eilutė 19, in &amp;lt;module&amp;gt; (modulyje)&lt;br /&gt;
    print(&amp;quot;kintamasis_d = &amp;quot;, kintamasis_d)&lt;br /&gt;
 NameError: pavadinimas &#039;kintamasis_d&#039; yra neapibrėžtas&lt;br /&gt;
&lt;br /&gt;
Šiame pavyzdyje kintamieji &amp;lt;code&amp;gt;kintamasis_a&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kintamasis_b&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;kintamasis_d&amp;lt;/code&amp;gt;, esantys funkcijos viduje, yra lokalūs kintamieji. Po paskutinės funkcijos eilutės &amp;lt;code&amp;gt;return kintamasis_b + 10&amp;lt;/code&amp;gt; įvykdymo, visi jie nustoja egzistuoti. Kintamasis &amp;lt;code&amp;gt;kintamasis_a&amp;lt;/code&amp;gt; yra parametro pavadinimas, todėl tai jį automatiškai padaro lokaliu kintamuoju. Kintamieji &amp;lt;code&amp;gt;kintamasis_b&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;kintamasis_d&amp;lt;/code&amp;gt; yra lokalūs kintamieji, nes jie rodomi funkcijos lygybės ženklo kairėje pusėje esančiuose teiginiuose &amp;lt;code&amp;gt;kintamasis_b = 100 + kintamasis_a&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;kintamasis_d = 2 * kintamasis_a&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Kai funkcija iškviečiama naudojant &amp;lt;code&amp;gt;kintamasis_c = funkcija(kintamasis_b)&amp;lt;/code&amp;gt;, 15 priskiriama kintamajam &amp;lt;code&amp;gt;kintamasis_a&amp;lt;/code&amp;gt;, nes tuo metu, kai kviečiama funkcija &amp;lt;code&amp;gt;funkcija(kintamasis_b)&amp;lt;/code&amp;gt;, globalaus &amp;lt;code&amp;gt;kintamasis_b&amp;lt;/code&amp;gt; reikšmė yra 15. Taigi &amp;lt;code&amp;gt;kintamasis_a&amp;lt;/code&amp;gt; reikšmė nustatoma į 15, kai jis yra funkcijos &amp;lt;code&amp;gt;funkcija()&amp;lt;/code&amp;gt; viduje.&lt;br /&gt;
&lt;br /&gt;
Kaip matai, pasibaigus funkcijai, lokalūs kintamieji &amp;lt;code&amp;gt;kintamasis_a&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;kintamasis_b&amp;lt;/code&amp;gt;, kurie buvo naudojami funkcijos viduje, dingo. Tad komanda &amp;lt;code&amp;gt;print (&amp;quot;kintamasis_a =&amp;quot;, kintamasis_a)&amp;lt;/code&amp;gt; atspausdina reikšmę &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;, t. y. globaliojo kintamojo &amp;lt;code&amp;gt;kintamasis_a&amp;lt;/code&amp;gt; reikšmę.&lt;br /&gt;
&lt;br /&gt;
Taip pat, atkreipk dėmesį į klaidą &amp;lt;code&amp;gt; NameError &amp;lt;/code&amp;gt;, kuri atsiranda mūsų programos pabaigoje. Tai nutinka, nes kintamasis &amp;lt;code&amp;gt;kintamasis_d&amp;lt;/code&amp;gt; nebeegzistuoja nuo tada, kai baigėsi &amp;lt;code&amp;gt;funkcija()&amp;lt;/code&amp;gt;. Pasibaigus funkcijai, visi lokalūs kintamieji ištrinami. Jeigu nori, ką nors gauti iš funkcijos, turėsi naudoti komandą &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Paskutinis dalykas, į kurį reikia atkreipti dėmesį, yra tai, kad funkcijos viduje &amp;lt;code&amp;gt;kintamasis_e&amp;lt;/code&amp;gt; reikšmė išlieka nepakitusi, nes tai nėra nei parametras, nei lokalus kintamasis – jis niekada nerodomas kairėje lygybės pusėje. Kai funkcijos viduje kreipiamasi į globalų kintamąjį, tai jis naudoja reikšmę, įgytą už funkcijos ribų.&lt;br /&gt;
&lt;br /&gt;
Funkcijos naudoja lokalius kintamuosius, kurie egzistuoja tik funkcijos viduje, ir gali ignoruoti kitus kintamuosius, kurie yra už funkcijos ribų.&lt;br /&gt;
&lt;br /&gt;
=== Pavyzdžiai ===&lt;br /&gt;
&#039;&#039;&#039;temperatūra2.py&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#! /usr/bin/python&lt;br /&gt;
#-*-coding: utf-8 -*-&lt;br /&gt;
# konvertuoja temperatūrą į Farenheitus ar Celsijų&lt;br /&gt;
 &lt;br /&gt;
def spausdinti_pasirinkimus():&lt;br /&gt;
    print(&amp;quot;Pasirinkimai:&amp;quot;)&lt;br /&gt;
    print(&amp;quot; &#039;s&#039; spausdinti pasirinkimus&amp;quot;)&lt;br /&gt;
    print(&amp;quot; &#039;c&#039; konvertuoti iš Celsijaus&amp;quot;)&lt;br /&gt;
    print(&amp;quot; &#039;f&#039; konvertuoti iš Farenheitų&amp;quot;)&lt;br /&gt;
    print(&amp;quot; &#039;i&#039; išjungti programą&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
def celsijus_į_farenheitus(c_temp):&lt;br /&gt;
    return 9.0 / 5.0 * c_temp + 32&lt;br /&gt;
 &lt;br /&gt;
def farenheitai_į_celsijų(f_temp):&lt;br /&gt;
    return (f_temp - 32.0) * 5.0 / 9.0&lt;br /&gt;
 &lt;br /&gt;
pasirinkimas = &amp;quot;s&amp;quot;&lt;br /&gt;
while pasirinkimas != &amp;quot;i&amp;quot;:&lt;br /&gt;
    if pasirinkimas == &amp;quot;c&amp;quot;:&lt;br /&gt;
        c_temp = float(input(&amp;quot;Celsijaus temperatūra: &amp;quot;))&lt;br /&gt;
        print(&amp;quot;Farenheitai:&amp;quot;, celsijus_į_farenheitus(c_temp))&lt;br /&gt;
        pasirinkimas = input(&amp;quot;pasirinkimas: &amp;quot;)&lt;br /&gt;
    elif pasirinkimas == &amp;quot;f&amp;quot;:&lt;br /&gt;
        f_temp = float(input(&amp;quot;farenheitai_į_celsijų: &amp;quot;))&lt;br /&gt;
        print(&amp;quot;Celsijus:&amp;quot;, farenheitai_į_celsijų(f_temp))&lt;br /&gt;
        pasirinkimas= input(&amp;quot;pasirinkimas: &amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        pasirinkimas= &amp;quot;s&amp;quot;    #Arba pasirinkimas! = &amp;quot;i&amp;quot;: kad spausdintų&lt;br /&gt;
                        #kai įrašoma, kas nors netikėto&lt;br /&gt;
        spausdinti_pasirinkimus()&lt;br /&gt;
        pasirinkimas = input(&amp;quot;pasirinkimas: &amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kaip tai veikia?:&lt;br /&gt;
&lt;br /&gt;
 Pasirinkimai:&lt;br /&gt;
  &#039;s&#039; spausdinti pasirinkimus&lt;br /&gt;
  &#039;c&#039; konvertuoti iš Celsijaus&lt;br /&gt;
  &#039;f&#039; konvertuoti iš Farenheitų&lt;br /&gt;
  &#039;i&#039; išjungti programą&lt;br /&gt;
 pasirinkimas: &#039;&#039;&#039;c&#039;&#039;&#039;&lt;br /&gt;
 Celsijaus temperatūra: &#039;&#039;&#039;30&#039;&#039;&#039; &lt;br /&gt;
 Farenheitai: 86.0&lt;br /&gt;
 pasirinkimas: &#039;&#039;&#039;f&#039;&#039;&#039;&lt;br /&gt;
 Farenheitų temperatūra: &#039;&#039;&#039;60&#039;&#039;&#039;&lt;br /&gt;
 Celsijus: 15.5555555556&lt;br /&gt;
 pasirinkimas: &#039;&#039;&#039;i&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;plotas2.py&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#! /usr/bin/python&lt;br /&gt;
#-*-coding: utf-8 -*-&lt;br /&gt;
# apskaičiuoja duotą stačiakampio plotą&lt;br /&gt;
&lt;br /&gt;
def pasisveikinimas():&lt;br /&gt;
    print(&#039;Labas!&#039;)&lt;br /&gt;
 &lt;br /&gt;
def plotas(plotis, aukštis):&lt;br /&gt;
    return plotis * aukštis&lt;br /&gt;
 &lt;br /&gt;
def mano_vardas(vardas):&lt;br /&gt;
    print(&#039;Mano vardas yra,&#039;, vardas)&lt;br /&gt;
 &lt;br /&gt;
def teigiama_įvestis(sugalvotas_skaičius):&lt;br /&gt;
    skaičius = float(input(sugalvotas_skaičius))&lt;br /&gt;
    while skaičius&amp;lt;= 0:&lt;br /&gt;
        print(&#039;Privalo būti teigiamas skaičius&#039;)&lt;br /&gt;
        skaičius = float(input(sugalvotas_skaičius))&lt;br /&gt;
    return skaičius&lt;br /&gt;
 &lt;br /&gt;
vardas = input(&#039;Tavo vardas: &#039;)&lt;br /&gt;
pasisveikinimas()&lt;br /&gt;
mano_vardas(name)&lt;br /&gt;
print()&lt;br /&gt;
print(&#039;Kad rastum stačiakampio plotą,&#039;)&lt;br /&gt;
print(&#039;įrašyk plotį ir aukštį&#039;)&lt;br /&gt;
print()&lt;br /&gt;
w = teigiama_įvestis(&#039;Plotis: &#039;)&lt;br /&gt;
h = teigiama_įvestis(&#039;Aukštis: &#039;)&lt;br /&gt;
 &lt;br /&gt;
print(&#039;Plotis =&#039;, w, &#039; Aukštis =&#039;, h, &#039; Plotas =&#039;, area(w, h))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kaip veikia ši programa?&lt;br /&gt;
&lt;br /&gt;
 Tavo vardas: &#039;&#039;&#039;Benas&#039;&#039;&#039;&lt;br /&gt;
 Labas!&lt;br /&gt;
 Mano vardas yra Benas&lt;br /&gt;
 &lt;br /&gt;
 Kad rastum stačiakampio plotą,&lt;br /&gt;
 įrašyk plotį ir aukštį.&lt;br /&gt;
 &lt;br /&gt;
 Plotis: &#039;&#039;&#039;-4&#039;&#039;&#039;&lt;br /&gt;
 Privalo būti teigiamas skaičius&lt;br /&gt;
 Plotis: &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
 Aukštis: &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
 Plotis = 4  Aukštis = 3  Plotas = 12&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
&lt;br /&gt;
1. Parašyk programą, kurioje būtų funkcija, kuriai padavus skaičių, ji grąžina to skaičiaus, pakelto kubu, reikšmę. Patikrink funkcijos veikimą išvesdamas kelių skirtingų skaičių, pakeltų kubu, reikšmes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def pakelk_kubu(skaičius):&lt;br /&gt;
    kubas = skaičius * skaičius * skaičius&lt;br /&gt;
    print(skaičius, &amp;quot; pakelta kubu yra &amp;quot;, kubas)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
pakelk_kubu(1)&lt;br /&gt;
pakelk_kubu(2)&lt;br /&gt;
pakelk_kubu(3)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Perrašyk programą plotas2.py, kuri yra aukščiau pateiktame pavyzdyje, taip, kad būtų parašytos atskiros kvadrato, stačiakampio ir apskritimo ploto funkcijos ((&amp;lt;code&amp;gt;3.14 * spindulys**2&amp;lt;/code&amp;gt;). Taip pat šioje programoje turėtų būti sukurtas toks pasirinkimų meniu:&lt;br /&gt;
&lt;br /&gt;
  Pasirinkimai:&lt;br /&gt;
   s = skaičiuoti kvadrato plotą.&lt;br /&gt;
   c = skaičiuoti apskritimo plotą.&lt;br /&gt;
   r = skaičiuoti stačiakampio plotą.&lt;br /&gt;
   q = išeiti.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def kvadratas(L):&lt;br /&gt;
    return L * L&lt;br /&gt;
&lt;br /&gt;
def stačiakampis(aukštis, plotis):&lt;br /&gt;
    return aukštis * plotis&lt;br /&gt;
&lt;br /&gt;
def apskritimas(spindulys):&lt;br /&gt;
    return 3.14159 * spindulys** 2&lt;br /&gt;
&lt;br /&gt;
def parinktys():&lt;br /&gt;
    print()&lt;br /&gt;
    print(&amp;quot;Pasirinkimai:&amp;quot;)&lt;br /&gt;
    print(&amp;quot;s = skaičiuoti kvadrato plotą.&amp;quot;)&lt;br /&gt;
    print(&amp;quot;c = skaičiuoti apskritimo plotą.&amp;quot;)&lt;br /&gt;
    print(&amp;quot;r = skaičiuoti stačiakampio plotą.&amp;quot;)&lt;br /&gt;
    print(&amp;quot;q = išeiti&amp;quot;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Ši programa apskaičiuos kvadrato, apskritimo ar stačiakampio plotą.&amp;quot;)&lt;br /&gt;
pasirinkimas = &amp;quot;x&amp;quot;&lt;br /&gt;
parinktys()&lt;br /&gt;
while pasirinkimas != &amp;quot;q&amp;quot;:&lt;br /&gt;
    choice = input(&amp;quot;Įrašyk savo pasirinkimą: &amp;quot;)&lt;br /&gt;
    if pasirinkimas== &amp;quot;s&amp;quot;:&lt;br /&gt;
        L = float(input(&amp;quot;Kvadrato kraštinės ilgis: &amp;quot;))&lt;br /&gt;
        print(&amp;quot;Šio kvadrato plotas&amp;quot;, kvadratas(L))&lt;br /&gt;
        parinktys()&lt;br /&gt;
    elif pasirinkimas == &amp;quot;c&amp;quot;:&lt;br /&gt;
        spindulys = float(input(&amp;quot;Apskritimo spindulys yra: &amp;quot;))&lt;br /&gt;
        print(&amp;quot;Apskritimo plotas yra&amp;quot;, apskritimas(spindulys))&lt;br /&gt;
        parinktys()&lt;br /&gt;
    elif pasirinkimas == &amp;quot;r&amp;quot;:&lt;br /&gt;
        plotis = float(input(&amp;quot;Stačiakampio plotis: &amp;quot;))&lt;br /&gt;
        aukštis = float(input(&amp;quot;Stačiakampio aukštis: &amp;quot;))&lt;br /&gt;
        print(&amp;quot;Stačiakampio plotas yra&amp;quot;, kvadratas(plotis, aukštis))&lt;br /&gt;
        parinktys()&lt;br /&gt;
    elif pasirinkimas == &amp;quot;q&amp;quot;:&lt;br /&gt;
        print(&amp;quot; &amp;quot;,end=&amp;quot;&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Neatpažintas pasirinkimas.&amp;quot;)&lt;br /&gt;
        parinktys()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Derinimas |next=Rekursinės funkcijos}}&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Derinimas&amp;diff=73</id>
		<title>Vadovėlis/Derinimas</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Derinimas&amp;diff=73"/>
		<updated>2023-01-05T09:18:20Z</updated>

		<summary type="html">&lt;p&gt;Monika: Pridėta papildoma užduotis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Pasirinkimai |next=Funkcijų apibrėžimas}}&lt;br /&gt;
{{BookCat}}&lt;br /&gt;
&lt;br /&gt;
=== Kas yra derinimas? ===&lt;br /&gt;
:„Pradėjus programuoti supratau, kad nėra taip lengva kurti teisingai veikiančias programas. Atsimenu akimirką, kai supratau, kad didedė dalis mano gyvenimo, bus skirta klaidų ieškojimui mano paties kurtose programose. Taip atsidaro derinimas.“ &amp;amp;mdash; &#039;&#039;Maurice Wilkes atranda derinimą&#039;&#039;, 1949&lt;br /&gt;
&lt;br /&gt;
Jei jau bandei parašyti kelias programas, turbūt pastebėjai, kad kartais programa daro ką nors, ko neturėtų daryti. Tai yra tikrai dažna situacija. Derinimas tai yra procesas, kuomet bandoma suprasti, ką kompiuteris daro ir kaip jį priversti daryti tai, ką norėtum, kad jis darytų. Tai gali būti sudėtinga. Vieną kartą aš praleidau beveik savaitę ieškodamas ir taisydamas klaidą, kurią sukėlė kitas žmogus, kode parašęs &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; vietoje &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ši dalis bus abstraktesnė, nei prieš tai buvusios dalys.&lt;br /&gt;
&lt;br /&gt;
=== Ką turėtų daryti programa? ===&lt;br /&gt;
&lt;br /&gt;
Pirmas dalykas, ką reikia padaryti (kad ir kaip akivaizdžiai tai skamba), tai suprasti, ką turėtų daryti teisingai veikianti programa. Sugalvok kelis tikrinimo scenarijus ir pažiūrėk, kas nutiks. Tarkime, kad aš noriu sukurti programą, kuri suskaičiuoja stačiakampio perimetrą (visų kraštinių sumą). Turiu tokius tikrinimo scenarijus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!aukštis !! plotis !!perimetras&lt;br /&gt;
|-&lt;br /&gt;
|3 ||4 ||14&lt;br /&gt;
|--&lt;br /&gt;
|2 ||3 ||10&lt;br /&gt;
|-&lt;br /&gt;
|4 ||4 ||16&lt;br /&gt;
|-&lt;br /&gt;
|2 ||2 ||8&lt;br /&gt;
|-&lt;br /&gt;
|5 ||1 ||12&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Dabar galiu vykdyti savo programą su visais tikrinimo scenarijais ir pamatyti, ar programa daro tai, ko tikiuosi. Jei ne, turiu suprasti, ką iš tiesų daro kompiuteris.&lt;br /&gt;
&lt;br /&gt;
Dažniausiai, dalis tikrinimo scenarijų veikia, dalis - ne. Jei toks yra ir tavo atvejis, turėtum bandyti suprasti, ką veikiantys scenarijai turi bendro. &lt;br /&gt;
Pavyzdžiui, apačioje yra perimetro programos išvestis (kodas bus pateiktas kiek vėliau):&lt;br /&gt;
&lt;br /&gt;
 Aukštis: &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
 Plotis: &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
 Perimetras = 15&lt;br /&gt;
&lt;br /&gt;
 Aukštis: &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Plotis: &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
 Perimetras = 11&lt;br /&gt;
&lt;br /&gt;
 Aukštis: &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
 Plotis: &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
 Perimetras = 16&lt;br /&gt;
&lt;br /&gt;
 Aukštis: &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Plotis: &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Perimetras = 8&lt;br /&gt;
&lt;br /&gt;
 Aukštis: &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
 Plotis: &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Perimetras = 8&lt;br /&gt;
&lt;br /&gt;
Gali pastebėti, kad programa neveikė su pirmomis dvejomis įvestimis, veikė su sekančiomis dvejomis ir vėl neveikė su paskutine. Pabandyk sugalvoti, kas yra bendro tarp veikiančių scenarijų. Kai supranti, kokia yra programos problema, atrasti jos priežastį yra daug lengviau. Jei reikia, savo programoms gali sugalvoti ir daugiau tikrinimo scenarijų.&lt;br /&gt;
&lt;br /&gt;
=== Ką daro programa? ===&lt;br /&gt;
&lt;br /&gt;
Kitas dalykas, ką reikia padaryti, tai peržiūrėti pirminį programos tekstą. Tai vienas iš svarbiausių dalykų programavime. Pagrindinis būdas, kaip tai daroma - tai kodo peržiūros.&lt;br /&gt;
&lt;br /&gt;
Kodo peržiūra prasideda pirma eilute ir tęsiasi iki programos galo. &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; ciklai ir &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; sakiniai reiškia, kad kai kurios eilutės gali būti nekviečiamos niekada, o kai kurios - vykdomos keletą kartų. Kiekvienoje eilutėje turi suprasti, ką daro Python&#039;as.&lt;br /&gt;
&lt;br /&gt;
Pradėkime su paprasta parametro programa. Šios programos nerašyk. Tau reikės ją tik skaityti, ne vykdyti. Programos pirminis tekstas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
aukstis = int(input(&amp;quot;Aukštis: &amp;quot;))&lt;br /&gt;
plotis = int(input(&amp;quot;Plotis: &amp;quot;))&lt;br /&gt;
print(&amp;quot;perimetras =&amp;quot;, plotis + aukstis + plotis + plotis)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;Klausimas:&#039;&#039; Kuri eilutė vykdoma pirma?&lt;br /&gt;
: &#039;&#039;Atsakymas:&#039;&#039; Pirmoji kodo eilutė visada yra vykdoma pirma. Šiuo atveju tai: &amp;lt;code&amp;gt;aukstis = int(input(&amp;quot;Aukštis: &amp;quot;))&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką daro ši eilutė?&lt;br /&gt;
: Spausdina &amp;lt;code&amp;gt;Aukštis: &amp;lt;/code&amp;gt;, laukia, kol naudotojas įves teksto eilutę ir ją konvertuoja į sveikąjį kintamąjį &amp;lt;code&amp;gt;aukstis&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Bendrai, tai yra kita eilutė, kuri yra &amp;lt;code&amp;gt;plotis = int(input(&amp;quot;Plotis: &amp;quot;))&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką daro ši eilutė?&lt;br /&gt;
: Spausdina &amp;lt;code&amp;gt;Plotis: &amp;lt;/code&amp;gt;, laukia, kol naudotojas įves teksto eilutę ir ją konvertuoja į sveikąjį kintamąjį &amp;lt;code&amp;gt;plotis&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Kai kita eilutė nėra daugiau ar mažiau įtraukta, nei esama eilutė, ji ir yra vykdoma. Šiuo atveju tai: &amp;lt;code&amp;gt;print(&amp;quot;perimetras =&amp;quot;, plotis + aukstis + plotis + plotis)&amp;lt;/code&amp;gt; (Taip pat gali būti kviečiama funkcija esamoje eilutėje, bet tai bus paaiškinta tolimesniame skyriuje)                                                                       &lt;br /&gt;
; Ką daro ši eilutė?&lt;br /&gt;
: Visų pirma, ji spausdina &amp;lt;code&amp;gt;perimetras = &amp;lt;/code&amp;gt;, o tada - sumą, sudarytą iš kintamųjų &amp;lt;code&amp;gt;plotis&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;aukstis&amp;lt;/code&amp;gt;, kuri užrašoma taip: &amp;lt;code&amp;gt;plotis + aukstis + plotis + plotis&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Ar kodas &amp;lt;code&amp;gt;plotis + aukstis + plotis + plotis&amp;lt;/code&amp;gt; skaičiuoja perimetrą teisingai?&lt;br /&gt;
: Pažiūrėk: stačiakampio perimetras yra apatinė kraštinė (plotis), plius kairė (aukstis), plius viršutinė (plotis), plius dešinė kraštinė (a?). Paskutinis kintamasis turėtų būti dešinės kraštinės ilgis, arba kitaip - aukštis.&lt;br /&gt;
; Ar supranti, kodėl, kai kuriais atvejais, skaičiuojant perimetrą buvo gaunamas teisingas atsakymas?                                                                             &lt;br /&gt;
: Teisingas atsakymas buvo gaunamas kai aukštis ir plotis buvo lygūs.&lt;br /&gt;
&lt;br /&gt;
Kita programa, kurios kodo peržiūrą darysime, tai programa, kuri turėtų ekrane išvesti 5 taškus. Tačiau, programos išvestis yra:&lt;br /&gt;
&lt;br /&gt;
 . . . . &lt;br /&gt;
&lt;br /&gt;
Programa:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
skaicius = 5&lt;br /&gt;
while skaicius &amp;gt; 1:&lt;br /&gt;
    print(&amp;quot;.&amp;quot;, end = &amp;quot; &amp;quot;)&lt;br /&gt;
    skaicius = skaicius - 1&lt;br /&gt;
print()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šios programos peržiūra bus kiek sudėtingesnė, nes joje yra įtrauktų kodo dalių. Pradėk.&lt;br /&gt;
; Kuri eilutė vykdoma pirma?&lt;br /&gt;
: Pirmoji kodo eilutė: &amp;lt;code&amp;gt;skaicius = 5&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Priskiria skaičių 5 kintamajam &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Kita eilutė yra: &amp;lt;code&amp;gt;while skaicius &amp;gt; 1:&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Na, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; sakiniai žiūri į juose esančius reiškinius. Jei jie yra tesingi, vykdomas kitas įtrauktas blokas. Jei klaidingi – įtrauktas blokas yra praleidžiamas.&lt;br /&gt;
; Tai ką ji daro šiuo atveju?&lt;br /&gt;
: Jei &amp;lt;code&amp;gt;skaicius &amp;gt; 1&amp;lt;/code&amp;gt; yra &#039;&#039;teisinga&#039;&#039;, bus vykdomos kitos dvi eilutės.&lt;br /&gt;
; Taigi, ar &amp;lt;code&amp;gt;skaicius &amp;gt; 1&amp;lt;/code&amp;gt;?&lt;br /&gt;
: Paskutinė vertė, kuri buvo priskirta &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; buvo &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;5 &amp;gt; 1&amp;lt;/code&amp;gt;, taigi – taip.&lt;br /&gt;
; O kuri eilutė vykdoma po to?&lt;br /&gt;
: Kadangi &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; buvo teisinga, tai kita eilutė yra: &amp;lt;code&amp;gt;print(&amp;quot;.&amp;quot;, end = &amp;quot; &amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką daro ši eilutė?&lt;br /&gt;
: Spausdina vieną tašką. Kadangi funkcija turi papildomą argumentą &amp;lt;code&amp;gt;end = &amp;quot; &amp;quot;&amp;lt;/code&amp;gt;, toliau spausdinamas tekstas nebus pradedamas naujoje eilutėje.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: &amp;lt;code&amp;gt;skaicius = skaicius - 1&amp;lt;/code&amp;gt;, nes tai yra kita eilutė ir nėra jokių įtraukos pasikeitimų.&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Eilutė skaičiuoja &amp;lt;code&amp;gt;skaicius - 1&amp;lt;/code&amp;gt;: iš esamos &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; vertės (5) atimamas 1, ir tai tampa nauja kintamojo &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmė. Sutrumpintai, &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; vertė yra pakeičiama iš 5 į 4.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Įtraukos lygis keičiasi, todėl turi žiūrėti į tai, kokią valdymo struktūrą turime. Peržiūrėk &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; ciklą, taigi turi grįžti į &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; sąlygą, kuri yra &amp;lt;code&amp;gt;while skaicius &amp;gt; 1:&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Eilutė žiūri į &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmę, kuri yra 4, ir lygina ją su 1. Kadangi &amp;lt;code&amp;gt;4 &amp;gt; 1&amp;lt;/code&amp;gt;, ciklas tęsiasi.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Kadangi ciklo sąlyga buvo teisinga, kita eilutė yra: &amp;lt;code&amp;gt;print(&amp;quot;.&amp;quot;, end = &amp;quot; &amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Ekrane išspausdina dar vieną tašką, po jo padėdama tarpą.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Nėra įtraukos pokyčio, todėl: &amp;lt;code&amp;gt;skaicius = skaicius - 1&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ir ką ji daro?&lt;br /&gt;
: Ima dabartinę &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmę (4), atima 1, kas yra lygu 3 ir priskiria 3 kaip naują &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmę.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Kadangi turime įtraukos pokytį dėl ciklo, kita eilutė yra: &amp;lt;code&amp;gt;while skaicius &amp;gt; 1:&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Palygina dabartinę &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmę (3) su 1. &amp;lt;code&amp;gt;3 &amp;gt; 1&amp;lt;/code&amp;gt;, todėl ciklas tęsiasi.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Kadangi ciklo sąlyga yra teisinga, kita eilutė: &amp;lt;code&amp;gt;print(&amp;quot;.&amp;quot;, end = &amp;quot; &amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
; O ji daro?&lt;br /&gt;
: Trečias taškas yra spausdinamas eilutėje.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Tai: &amp;lt;code&amp;gt;skaicius = skaicius - 1&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Ima dabartinę &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmę (3), atima 1, kas yra lygu 2 ir priskiria 2 kaip naują &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmę.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Vėl grįžtame į ciklo pradžią: &amp;lt;code&amp;gt;while skaicius &amp;gt; 1:&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Palygina dabartinę &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmę (2) su 1. &amp;lt;code&amp;gt;2 &amp;gt; 1&amp;lt;/code&amp;gt;, todėl ciklas tęsiasi.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Kadangi ciklas tęsiasi: &amp;lt;code&amp;gt;print(&amp;quot;.&amp;quot;, end = &amp;quot; &amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Atranda atsakymą gyvenimui, Visatai, ir viskam. Juokauju (turėjau patikrinti, kad dar neužmigai). Eilutė spausdina ketvirtą tašką ekrane.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Tai: &amp;lt;code&amp;gt;skaicius = skaicius - 1&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Ima dabartinę &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmę (2), atima 1, kas yra lygu 1 ir priskiria 1 kaip naują &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmę.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Atgal į ciklo pradžią: &amp;lt;code&amp;gt;while skaicius &amp;gt; 1:&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką daro ši eilutė?&lt;br /&gt;
: Ji palygina &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmę (1) to 1. Kadangi &amp;lt;code&amp;gt;1 &amp;gt; 1&amp;lt;/code&amp;gt; yra &#039;&#039;klaidinga&#039;&#039; (vienas nėra daugiau nei vienas), ciklas baigiasi.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Kadangi ciklo sąlyga buvo klaidinga, vykdoma kita eilutė esanti už ciklo. Tai yra: &amp;lt;code&amp;gt;print()&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką daro ši eilutė?&lt;br /&gt;
: Priverčia teksto žymeklį ekrane peršokti į kitą eilutę.&lt;br /&gt;
; Kodėl programa nespausdina 5 taškų?&lt;br /&gt;
: Ciklas baigiasi vienu tašku per anksti.&lt;br /&gt;
; Kaip tai sutvarkyti?&lt;br /&gt;
: Priversti ciklą baigtis vienu tašku vėliau.&lt;br /&gt;
; Ir kaip tai padaryti?&lt;br /&gt;
: Yra keli būdai. Vienas iš jų yra pakeisti ciklo sąlygą į: &amp;lt;code&amp;gt;while skaicius &amp;gt; 0:&amp;lt;/code&amp;gt;. Kitas būdas pakeisti sąlygą į: &amp;lt;code&amp;gt;skaicius &amp;gt;= 1&amp;lt;/code&amp;gt;. Yra ir daugiau būdų.&lt;br /&gt;
&lt;br /&gt;
=== Kaip turėčiau taisyti savo programą? ===&lt;br /&gt;
&lt;br /&gt;
Tau reikia suprasti, ką programa daro. Tau reikia suprasti, ką programa turėtų daryti. Suprasti, koks skirtumas tarp šių dviejų dalykų. Derinimas - tai įgūdis, kurį norint išmokti, reikia daug praktikos. Jei po valandos nepavyksta išspręsti problemos, pailsėk, pakalbėk su kuo nors apie tai. Po kurio laiko sugrįžk prie problemos ir greičiausiai turėsi naujų minčių, kaip ją įveikti. Sėkmės.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
&lt;br /&gt;
Žemiau esančiose programose įsivėlė klaidų. Padėk jas surasti.&lt;br /&gt;
&lt;br /&gt;
1. Programos tikslas: programa turėtų išvesti skaičius nuo 1 iki 10.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
skaičius = 1&lt;br /&gt;
&lt;br /&gt;
while skaičius &amp;lt; 10:&lt;br /&gt;
	skaičius = skaičius + 1&lt;br /&gt;
	print(skaičius)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
Programa išveda skaičius nuo 2 iki 10. Tam, kad būtų išvedama nuo 1, reikėtų pakeisti pradinę &amp;lt;code&amp;gt;skaičius&amp;lt;/code&amp;gt; reikšmę į 0.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
skaičius = 0&lt;br /&gt;
&lt;br /&gt;
while skaičius &amp;lt; 10:&lt;br /&gt;
	skaičius = skaičius + 1&lt;br /&gt;
	print(skaičius)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Programos tikslas: programa turėtų prašyti įvesti 5 skaičius ir išvesti jų sandaugą.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
sandauga = 0&lt;br /&gt;
įvesta_skaičių = 0&lt;br /&gt;
while įvesta_skaičių &amp;lt;5:&lt;br /&gt;
	naujas_skaičius = int(input(&amp;quot;Skaičius: &amp;quot;))&lt;br /&gt;
	sandauga = sandauga * naujas_skaičius&lt;br /&gt;
	įvesta_skaičių = įvesta_skaičių + 1&lt;br /&gt;
&lt;br /&gt;
print(sandauga)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
Įvedus bet kokius skaičius, programa visada grąžina sandaugą lygią 0. Taip yra todėl, kad pradinė sandaugos reikšmė yra 0 ir daugyba su nuliu visada bus 0. Tam, kad programa veiktų teisingai, reikia pradinę sandaugos reikšmę pakeisti į 1.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
sandauga = 1&lt;br /&gt;
įvesta_skaičių = 0&lt;br /&gt;
while įvesta_skaičių &amp;lt;5:&lt;br /&gt;
	naujas_skaičius = int(input(&amp;quot;Skaičius: &amp;quot;))&lt;br /&gt;
	sandauga = sandauga * naujas_skaičius&lt;br /&gt;
	įvesta_skaičių = įvesta_skaičių + 1&lt;br /&gt;
&lt;br /&gt;
print(sandauga)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Programos tikslas: programa turėtų išvesti reiškinio (2023 - 2000) * (9 + 10) reikšmę.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print((2023 - 2000) * 9 + 10)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
Programos išvedama reikšmė yra 217, o tikroji reiškinio reikšmė: 437. Taip nutiko todėl, kad programoje skaičiavimai atliekami netinkama tvarka, trūksta skliaustų.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print((2023 - 2000) * (9 + 10))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Pasirinkimai |next=Funkcijų apibrėžimas}}&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Derinimas&amp;diff=72</id>
		<title>Vadovėlis/Derinimas</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Derinimas&amp;diff=72"/>
		<updated>2023-01-05T09:14:28Z</updated>

		<summary type="html">&lt;p&gt;Monika: Prdėtos užduotys&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Pasirinkimai |next=Funkcijų apibrėžimas}}&lt;br /&gt;
{{BookCat}}&lt;br /&gt;
&lt;br /&gt;
=== Kas yra derinimas? ===&lt;br /&gt;
:„Pradėjus programuoti supratau, kad nėra taip lengva kurti teisingai veikiančias programas. Atsimenu akimirką, kai supratau, kad didedė dalis mano gyvenimo, bus skirta klaidų ieškojimui mano paties kurtose programose. Taip atsidaro derinimas.“ &amp;amp;mdash; &#039;&#039;Maurice Wilkes atranda derinimą&#039;&#039;, 1949&lt;br /&gt;
&lt;br /&gt;
Jei jau bandei parašyti kelias programas, turbūt pastebėjai, kad kartais programa daro ką nors, ko neturėtų daryti. Tai yra tikrai dažna situacija. Derinimas tai yra procesas, kuomet bandoma suprasti, ką kompiuteris daro ir kaip jį priversti daryti tai, ką norėtum, kad jis darytų. Tai gali būti sudėtinga. Vieną kartą aš praleidau beveik savaitę ieškodamas ir taisydamas klaidą, kurią sukėlė kitas žmogus, kode parašęs &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; vietoje &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ši dalis bus abstraktesnė, nei prieš tai buvusios dalys.&lt;br /&gt;
&lt;br /&gt;
=== Ką turėtų daryti programa? ===&lt;br /&gt;
&lt;br /&gt;
Pirmas dalykas, ką reikia padaryti (kad ir kaip akivaizdžiai tai skamba), tai suprasti, ką turėtų daryti teisingai veikianti programa. Sugalvok kelis tikrinimo scenarijus ir pažiūrėk, kas nutiks. Tarkime, kad aš noriu sukurti programą, kuri suskaičiuoja stačiakampio perimetrą (visų kraštinių sumą). Turiu tokius tikrinimo scenarijus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!aukštis !! plotis !!perimetras&lt;br /&gt;
|-&lt;br /&gt;
|3 ||4 ||14&lt;br /&gt;
|--&lt;br /&gt;
|2 ||3 ||10&lt;br /&gt;
|-&lt;br /&gt;
|4 ||4 ||16&lt;br /&gt;
|-&lt;br /&gt;
|2 ||2 ||8&lt;br /&gt;
|-&lt;br /&gt;
|5 ||1 ||12&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Dabar galiu vykdyti savo programą su visais tikrinimo scenarijais ir pamatyti, ar programa daro tai, ko tikiuosi. Jei ne, turiu suprasti, ką iš tiesų daro kompiuteris.&lt;br /&gt;
&lt;br /&gt;
Dažniausiai, dalis tikrinimo scenarijų veikia, dalis - ne. Jei toks yra ir tavo atvejis, turėtum bandyti suprasti, ką veikiantys scenarijai turi bendro. &lt;br /&gt;
Pavyzdžiui, apačioje yra perimetro programos išvestis (kodas bus pateiktas kiek vėliau):&lt;br /&gt;
&lt;br /&gt;
 Aukštis: &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
 Plotis: &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
 Perimetras = 15&lt;br /&gt;
&lt;br /&gt;
 Aukštis: &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Plotis: &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
 Perimetras = 11&lt;br /&gt;
&lt;br /&gt;
 Aukštis: &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
 Plotis: &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
 Perimetras = 16&lt;br /&gt;
&lt;br /&gt;
 Aukštis: &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Plotis: &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
 Perimetras = 8&lt;br /&gt;
&lt;br /&gt;
 Aukštis: &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
 Plotis: &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
 Perimetras = 8&lt;br /&gt;
&lt;br /&gt;
Gali pastebėti, kad programa neveikė su pirmomis dvejomis įvestimis, veikė su sekančiomis dvejomis ir vėl neveikė su paskutine. Pabandyk sugalvoti, kas yra bendro tarp veikiančių scenarijų. Kai supranti, kokia yra programos problema, atrasti jos priežastį yra daug lengviau. Jei reikia, savo programoms gali sugalvoti ir daugiau tikrinimo scenarijų.&lt;br /&gt;
&lt;br /&gt;
=== Ką daro programa? ===&lt;br /&gt;
&lt;br /&gt;
Kitas dalykas, ką reikia padaryti, tai peržiūrėti pirminį programos tekstą. Tai vienas iš svarbiausių dalykų programavime. Pagrindinis būdas, kaip tai daroma - tai kodo peržiūros.&lt;br /&gt;
&lt;br /&gt;
Kodo peržiūra prasideda pirma eilute ir tęsiasi iki programos galo. &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; ciklai ir &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; sakiniai reiškia, kad kai kurios eilutės gali būti nekviečiamos niekada, o kai kurios - vykdomos keletą kartų. Kiekvienoje eilutėje turi suprasti, ką daro Python&#039;as.&lt;br /&gt;
&lt;br /&gt;
Pradėkime su paprasta parametro programa. Šios programos nerašyk. Tau reikės ją tik skaityti, ne vykdyti. Programos pirminis tekstas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
aukstis = int(input(&amp;quot;Aukštis: &amp;quot;))&lt;br /&gt;
plotis = int(input(&amp;quot;Plotis: &amp;quot;))&lt;br /&gt;
print(&amp;quot;perimetras =&amp;quot;, plotis + aukstis + plotis + plotis)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;Klausimas:&#039;&#039; Kuri eilutė vykdoma pirma?&lt;br /&gt;
: &#039;&#039;Atsakymas:&#039;&#039; Pirmoji kodo eilutė visada yra vykdoma pirma. Šiuo atveju tai: &amp;lt;code&amp;gt;aukstis = int(input(&amp;quot;Aukštis: &amp;quot;))&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką daro ši eilutė?&lt;br /&gt;
: Spausdina &amp;lt;code&amp;gt;Aukštis: &amp;lt;/code&amp;gt;, laukia, kol naudotojas įves teksto eilutę ir ją konvertuoja į sveikąjį kintamąjį &amp;lt;code&amp;gt;aukstis&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Bendrai, tai yra kita eilutė, kuri yra &amp;lt;code&amp;gt;plotis = int(input(&amp;quot;Plotis: &amp;quot;))&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką daro ši eilutė?&lt;br /&gt;
: Spausdina &amp;lt;code&amp;gt;Plotis: &amp;lt;/code&amp;gt;, laukia, kol naudotojas įves teksto eilutę ir ją konvertuoja į sveikąjį kintamąjį &amp;lt;code&amp;gt;plotis&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Kai kita eilutė nėra daugiau ar mažiau įtraukta, nei esama eilutė, ji ir yra vykdoma. Šiuo atveju tai: &amp;lt;code&amp;gt;print(&amp;quot;perimetras =&amp;quot;, plotis + aukstis + plotis + plotis)&amp;lt;/code&amp;gt; (Taip pat gali būti kviečiama funkcija esamoje eilutėje, bet tai bus paaiškinta tolimesniame skyriuje)                                                                       &lt;br /&gt;
; Ką daro ši eilutė?&lt;br /&gt;
: Visų pirma, ji spausdina &amp;lt;code&amp;gt;perimetras = &amp;lt;/code&amp;gt;, o tada - sumą, sudarytą iš kintamųjų &amp;lt;code&amp;gt;plotis&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;aukstis&amp;lt;/code&amp;gt;, kuri užrašoma taip: &amp;lt;code&amp;gt;plotis + aukstis + plotis + plotis&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Ar kodas &amp;lt;code&amp;gt;plotis + aukstis + plotis + plotis&amp;lt;/code&amp;gt; skaičiuoja perimetrą teisingai?&lt;br /&gt;
: Pažiūrėk: stačiakampio perimetras yra apatinė kraštinė (plotis), plius kairė (aukstis), plius viršutinė (plotis), plius dešinė kraštinė (a?). Paskutinis kintamasis turėtų būti dešinės kraštinės ilgis, arba kitaip - aukštis.&lt;br /&gt;
; Ar supranti, kodėl, kai kuriais atvejais, skaičiuojant perimetrą buvo gaunamas teisingas atsakymas?                                                                             &lt;br /&gt;
: Teisingas atsakymas buvo gaunamas kai aukštis ir plotis buvo lygūs.&lt;br /&gt;
&lt;br /&gt;
Kita programa, kurios kodo peržiūrą darysime, tai programa, kuri turėtų ekrane išvesti 5 taškus. Tačiau, programos išvestis yra:&lt;br /&gt;
&lt;br /&gt;
 . . . . &lt;br /&gt;
&lt;br /&gt;
Programa:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
skaicius = 5&lt;br /&gt;
while skaicius &amp;gt; 1:&lt;br /&gt;
    print(&amp;quot;.&amp;quot;, end = &amp;quot; &amp;quot;)&lt;br /&gt;
    skaicius = skaicius - 1&lt;br /&gt;
print()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šios programos peržiūra bus kiek sudėtingesnė, nes joje yra įtrauktų kodo dalių. Pradėk.&lt;br /&gt;
; Kuri eilutė vykdoma pirma?&lt;br /&gt;
: Pirmoji kodo eilutė: &amp;lt;code&amp;gt;skaicius = 5&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Priskiria skaičių 5 kintamajam &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Kita eilutė yra: &amp;lt;code&amp;gt;while skaicius &amp;gt; 1:&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Na, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; sakiniai žiūri į juose esančius reiškinius. Jei jie yra tesingi, vykdomas kitas įtrauktas blokas. Jei klaidingi – įtrauktas blokas yra praleidžiamas.&lt;br /&gt;
; Tai ką ji daro šiuo atveju?&lt;br /&gt;
: Jei &amp;lt;code&amp;gt;skaicius &amp;gt; 1&amp;lt;/code&amp;gt; yra &#039;&#039;teisinga&#039;&#039;, bus vykdomos kitos dvi eilutės.&lt;br /&gt;
; Taigi, ar &amp;lt;code&amp;gt;skaicius &amp;gt; 1&amp;lt;/code&amp;gt;?&lt;br /&gt;
: Paskutinė vertė, kuri buvo priskirta &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; buvo &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;5 &amp;gt; 1&amp;lt;/code&amp;gt;, taigi – taip.&lt;br /&gt;
; O kuri eilutė vykdoma po to?&lt;br /&gt;
: Kadangi &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; buvo teisinga, tai kita eilutė yra: &amp;lt;code&amp;gt;print(&amp;quot;.&amp;quot;, end = &amp;quot; &amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką daro ši eilutė?&lt;br /&gt;
: Spausdina vieną tašką. Kadangi funkcija turi papildomą argumentą &amp;lt;code&amp;gt;end = &amp;quot; &amp;quot;&amp;lt;/code&amp;gt;, toliau spausdinamas tekstas nebus pradedamas naujoje eilutėje.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: &amp;lt;code&amp;gt;skaicius = skaicius - 1&amp;lt;/code&amp;gt;, nes tai yra kita eilutė ir nėra jokių įtraukos pasikeitimų.&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Eilutė skaičiuoja &amp;lt;code&amp;gt;skaicius - 1&amp;lt;/code&amp;gt;: iš esamos &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; vertės (5) atimamas 1, ir tai tampa nauja kintamojo &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmė. Sutrumpintai, &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; vertė yra pakeičiama iš 5 į 4.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Įtraukos lygis keičiasi, todėl turi žiūrėti į tai, kokią valdymo struktūrą turime. Peržiūrėk &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; ciklą, taigi turi grįžti į &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; sąlygą, kuri yra &amp;lt;code&amp;gt;while skaicius &amp;gt; 1:&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Eilutė žiūri į &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmę, kuri yra 4, ir lygina ją su 1. Kadangi &amp;lt;code&amp;gt;4 &amp;gt; 1&amp;lt;/code&amp;gt;, ciklas tęsiasi.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Kadangi ciklo sąlyga buvo teisinga, kita eilutė yra: &amp;lt;code&amp;gt;print(&amp;quot;.&amp;quot;, end = &amp;quot; &amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Ekrane išspausdina dar vieną tašką, po jo padėdama tarpą.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Nėra įtraukos pokyčio, todėl: &amp;lt;code&amp;gt;skaicius = skaicius - 1&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ir ką ji daro?&lt;br /&gt;
: Ima dabartinę &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmę (4), atima 1, kas yra lygu 3 ir priskiria 3 kaip naują &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmę.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Kadangi turime įtraukos pokytį dėl ciklo, kita eilutė yra: &amp;lt;code&amp;gt;while skaicius &amp;gt; 1:&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Palygina dabartinę &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmę (3) su 1. &amp;lt;code&amp;gt;3 &amp;gt; 1&amp;lt;/code&amp;gt;, todėl ciklas tęsiasi.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Kadangi ciklo sąlyga yra teisinga, kita eilutė: &amp;lt;code&amp;gt;print(&amp;quot;.&amp;quot;, end = &amp;quot; &amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
; O ji daro?&lt;br /&gt;
: Trečias taškas yra spausdinamas eilutėje.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Tai: &amp;lt;code&amp;gt;skaicius = skaicius - 1&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Ima dabartinę &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmę (3), atima 1, kas yra lygu 2 ir priskiria 2 kaip naują &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmę.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Vėl grįžtame į ciklo pradžią: &amp;lt;code&amp;gt;while skaicius &amp;gt; 1:&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Palygina dabartinę &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmę (2) su 1. &amp;lt;code&amp;gt;2 &amp;gt; 1&amp;lt;/code&amp;gt;, todėl ciklas tęsiasi.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Kadangi ciklas tęsiasi: &amp;lt;code&amp;gt;print(&amp;quot;.&amp;quot;, end = &amp;quot; &amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Atranda atsakymą gyvenimui, Visatai, ir viskam. Juokauju (turėjau patikrinti, kad dar neužmigai). Eilutė spausdina ketvirtą tašką ekrane.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Tai: &amp;lt;code&amp;gt;skaicius = skaicius - 1&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką ji daro?&lt;br /&gt;
: Ima dabartinę &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmę (2), atima 1, kas yra lygu 1 ir priskiria 1 kaip naują &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmę.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Atgal į ciklo pradžią: &amp;lt;code&amp;gt;while skaicius &amp;gt; 1:&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką daro ši eilutė?&lt;br /&gt;
: Ji palygina &amp;lt;code&amp;gt;skaicius&amp;lt;/code&amp;gt; reikšmę (1) to 1. Kadangi &amp;lt;code&amp;gt;1 &amp;gt; 1&amp;lt;/code&amp;gt; yra &#039;&#039;klaidinga&#039;&#039; (vienas nėra daugiau nei vienas), ciklas baigiasi.&lt;br /&gt;
; Kuri eilutė vykdoma po to?&lt;br /&gt;
: Kadangi ciklo sąlyga buvo klaidinga, vykdoma kita eilutė esanti už ciklo. Tai yra: &amp;lt;code&amp;gt;print()&amp;lt;/code&amp;gt;&lt;br /&gt;
; Ką daro ši eilutė?&lt;br /&gt;
: Priverčia teksto žymeklį ekrane peršokti į kitą eilutę.&lt;br /&gt;
; Kodėl programa nespausdina 5 taškų?&lt;br /&gt;
: Ciklas baigiasi vienu tašku per anksti.&lt;br /&gt;
; Kaip tai sutvarkyti?&lt;br /&gt;
: Priversti ciklą baigtis vienu tašku vėliau.&lt;br /&gt;
; Ir kaip tai padaryti?&lt;br /&gt;
: Yra keli būdai. Vienas iš jų yra pakeisti ciklo sąlygą į: &amp;lt;code&amp;gt;while skaicius &amp;gt; 0:&amp;lt;/code&amp;gt;. Kitas būdas pakeisti sąlygą į: &amp;lt;code&amp;gt;skaicius &amp;gt;= 1&amp;lt;/code&amp;gt;. Yra ir daugiau būdų.&lt;br /&gt;
&lt;br /&gt;
=== Kaip turėčiau taisyti savo programą? ===&lt;br /&gt;
&lt;br /&gt;
Tau reikia suprasti, ką programa daro. Tau reikia suprasti, ką programa turėtų daryti. Suprasti, koks skirtumas tarp šių dviejų dalykų. Derinimas - tai įgūdis, kurį norint išmokti, reikia daug praktikos. Jei po valandos nepavyksta išspręsti problemos, pailsėk, pakalbėk su kuo nors apie tai. Po kurio laiko sugrįžk prie problemos ir greičiausiai turėsi naujų minčių, kaip ją įveikti. Sėkmės.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
&lt;br /&gt;
Žemiau esančiose programose įsivėlė klaidų. Padėk jas surasti.&lt;br /&gt;
&lt;br /&gt;
1. Programos tikslas: programa turėtų išvesti skaičius nuo 1 iki 10.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
skaičius = 1&lt;br /&gt;
&lt;br /&gt;
while skaičius &amp;lt; 10:&lt;br /&gt;
	skaičius = skaičius + 1&lt;br /&gt;
	print(skaičius)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
Programa išveda skaičius nuo 2 iki 10. Tam, kad būtų išvedama nuo 1, reikėtų pakeisti pradinę &amp;lt;code&amp;gt;skaičius&amp;lt;/code&amp;gt; reikšmę į 0.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
skaičius = 0&lt;br /&gt;
&lt;br /&gt;
while skaičius &amp;lt; 10:&lt;br /&gt;
	skaičius = skaičius + 1&lt;br /&gt;
	print(skaičius)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
2. Programos tikslas: programa turėtų prašyti įvesti 5 skaičius ir išvesti jų sandaugą.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
sandauga = 0&lt;br /&gt;
įvesta_skaičių = 0&lt;br /&gt;
while įvesta_skaičių &amp;lt;5:&lt;br /&gt;
	naujas_skaičius = int(input(&amp;quot;Skaičius: &amp;quot;))&lt;br /&gt;
	sandauga = sandauga * naujas_skaičius&lt;br /&gt;
	įvesta_skaičių = įvesta_skaičių + 1&lt;br /&gt;
&lt;br /&gt;
print(sandauga)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
Įvedus bet kokius skaičius, programa visada grąžina sandaugą lygią 0. Taip yra todėl, kad pradinė sandaugos reikšmė yra 0 ir daugyba su nuliu visada bus 0. Tam, kad programa veiktų teisingai, reikia pradinę sandaugos reikšmę pakeisti į 1.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
sandauga = 1&lt;br /&gt;
įvesta_skaičių = 0&lt;br /&gt;
while įvesta_skaičių &amp;lt;5:&lt;br /&gt;
	naujas_skaičius = int(input(&amp;quot;Skaičius: &amp;quot;))&lt;br /&gt;
	sandauga = sandauga * naujas_skaičius&lt;br /&gt;
	įvesta_skaičių = įvesta_skaičių + 1&lt;br /&gt;
&lt;br /&gt;
print(sandauga)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Pasirinkimai |next=Funkcijų apibrėžimas}}&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Suskai%C4%8Diuoti_iki_10&amp;diff=71</id>
		<title>Vadovėlis/Suskaičiuoti iki 10</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Suskai%C4%8Diuoti_iki_10&amp;diff=71"/>
		<updated>2023-01-04T12:57:51Z</updated>

		<summary type="html">&lt;p&gt;Monika: Pridėtos užduotys&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Kas čia eina? |next=Pasirinkimai}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ciklai kol (While loops) ===&lt;br /&gt;
Šiame skyriuje susipažinsi su ciklu &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;(liet. kol). Kaip jau sužinojai praeitame skyriuje, kompiuteris įprastai programą pradeda skaityti ir vykdyti nuo pirmos eilutės ir taip eilutė po eilutės keliauja žemyn per visas duoto kodo eilutes. Tačiau ciklas &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; šią tvarką pakeičia ir dėl to kompiuteris priėjęs šią kodo vietą eilutes skaito iki galo, pagal šio ciklo nustatytą tvarką. Štai čia yra programos su ciklo &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; pavyzdžiu:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 0            # PIRMA, nustatome pradinio kintamojo a reikšmę 0 (nuliui).&lt;br /&gt;
while a &amp;lt; 10:    # Kol kintamojo a vertė yra mažesnė nei 10, programa atlieka šiuos veiksmus:&lt;br /&gt;
    a = a + 1    # Padidina kintamojo a reikšmę 1 (vienu), visai taip kaip nurodyta: a = a + 1! &lt;br /&gt;
    print(a)     # Tuomet nurodome, kad spausdintų. Viskas tam, kad pamatytumėte, kokia yra dabartinė kintamojo a vertė.&lt;br /&gt;
                 # Ir visą šitą ciklą programa vykdo tol, kol kintamojo a reikšmė bus lygi 9!? Žr. Pastabą.&lt;br /&gt;
                 &lt;br /&gt;
                 # PASTABA:&lt;br /&gt;
                 # Kintamojo a vertė padidės 1&lt;br /&gt;
                 # su kiekvienu pakartojimu ar ciklu, kol pasieks nustatytą sąlygą ir sustos.&lt;br /&gt;
                 # pvz. a = 1, tada a = 2, tada a = 3 ir t.t., kol a bus lygus 9 (a = 9), tada...&lt;br /&gt;
                 # kodas baigs pridėjinėti po 1 prie a, nes taps lygus 10 (a = 10) kaip ir &lt;br /&gt;
                 # numatyta mūsų parašytoje sąlygoje. &lt;br /&gt;
                 # O kai mūsų nurodyta sąlyga yra patenkinama, programa atspausdina rezultatą.&lt;br /&gt;
                 #              --&lt;br /&gt;
                 # While a &amp;lt; 10: |&lt;br /&gt;
                 #     a = a + 1 |&amp;lt;--[ Ciklo Kol sąlygos blokas ]&lt;br /&gt;
                 #     print (a) |&lt;br /&gt;
                 #              --&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na, o jeigu paleidžiame programą, tai turime štai tokį įdomų rezultatą: &lt;br /&gt;
&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
 4&lt;br /&gt;
 5&lt;br /&gt;
 6&lt;br /&gt;
 7&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
(Tikriausiai iki šios pamokos net nesusimąstei, kad kompiuterį gali paversti pigiu skaičiuotuvu...)&lt;br /&gt;
&lt;br /&gt;
Na, o dabar pasiaiškinkime kaip veikia ši programa. Pirmiausia kompiuteris mato eilutę &amp;lt;code&amp;gt;a = 0&amp;lt;/code&amp;gt; ir nustato &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; reikšmę lygią nuliui. Tada programa mato sąlygą &amp;lt;code&amp;gt;while a &amp;lt; 10:&amp;lt;/code&amp;gt;, todėl kompiuteris patikrina, ar &amp;lt;code&amp;gt;a &amp;lt; 10&amp;lt;/code&amp;gt;. Kompiuteriui pirmą kartą matant šį teiginį, &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; yra lygus 0, ir akivaizdu, kad turima reikšmė yra mažesnė nei 10. Kitaip tariant, kol &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; yra mažesnis skaičius nei dešimt, tol kompiuteris tikrins teiginį ir kartos jį (t.y. pridėjinės po 1). Ciklas baigsis, kai &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; bus lygus dešimčiai. Kadangi šiame kode daugiau nieko nėra, tai programa sustoja.&lt;br /&gt;
&lt;br /&gt;
ĮSIDĖMĖK: Nepamiršk parašyti dvitaškio &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; eilutės pabaigoje, tik taip kompiuteris supras, kad čia yra komanda!&lt;br /&gt;
&lt;br /&gt;
Kitas ciklo &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; pavyzdys:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 1&lt;br /&gt;
s = 0&lt;br /&gt;
print(&amp;quot;Įvesk skaičius, kuriuos nori pridėti prie sumos&amp;quot;)&lt;br /&gt;
print(&amp;quot;Norint išeiti, įvesk 0.&amp;quot;)&lt;br /&gt;
while a != 0:                           &lt;br /&gt;
    print(&amp;quot;Dabartinė suma:&amp;quot;, s)            &lt;br /&gt;
    a = float(input(&amp;quot;Skaičius? &amp;quot;))        &lt;br /&gt;
    s = s + a                            &lt;br /&gt;
print(&amp;quot;Galutinė suma =&amp;quot;, s)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galimas programos scenarijus: &lt;br /&gt;
&lt;br /&gt;
 Įvesk skaičius, kuriuos nori pridėti prie sumos.&lt;br /&gt;
 Norint išeiti, įveskite 0.&lt;br /&gt;
 Dabartinė suma: 0&lt;br /&gt;
 Skaičius? &#039;&#039;&#039;200&#039;&#039;&#039;&lt;br /&gt;
 Dabartinė suma: 200.0&lt;br /&gt;
 Skaičius? &#039;&#039;&#039;-15.25&#039;&#039;&#039;&lt;br /&gt;
 Dabartinė suma: 184.75&lt;br /&gt;
 Skaičius? &#039;&#039;&#039;-151.85&#039;&#039;&#039;&lt;br /&gt;
 Dabartinė suma: 32.9&lt;br /&gt;
 Skaičius? &#039;&#039;&#039;10.00&#039;&#039;&#039;&lt;br /&gt;
 Dabartinė suma: 42.9&lt;br /&gt;
 Skaičius? &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
 Galutinė suma = 42.9&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad &amp;lt;code&amp;gt;print(&#039;Galutinė suma =&#039;, s)&amp;lt;/code&amp;gt; yra įvykdoma tik pačioje pabaigoje, kai jau ciklas būna nutrauktas. Komanda &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; veikia tik tas eilutes, kurios yra atitrauktos nuo krašto ir priklauso ciklo &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; blokui. &amp;lt;code&amp;gt;!=&amp;lt;/code&amp;gt; reiškia nelygu, taigi &amp;lt;code&amp;gt;while a != 0:&amp;lt;/code&amp;gt; reiškia tol, kol &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; nėra nulis, programa vykdo kodą.&lt;br /&gt;
&lt;br /&gt;
Ar pastebėjai, kad šiuo atveju &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; yra skaičius su reikšme po kablelio ir ne visi tokie skaičiai gali būti tiksliai atvaizduoti, kai naudojamas &amp;lt;code&amp;gt;!=&amp;lt;/code&amp;gt;. Pabandyk paleidęs programą įvesti 1.1&lt;br /&gt;
&lt;br /&gt;
==== Begaliniai ciklai (infinitive loops) arba niekada nesibaigaintys ciklai (Never Ending Loop)====&lt;br /&gt;
Dabar, kai jau išsiaiškinome, kas yra ciklas &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, pasižiūrėkime kaip atrodo niekada nesibaigiantys ciklai, kaip kad ir šis:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
while True:&lt;br /&gt;
   print(&amp;quot;Padėk! Užstrigau cikle!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Operatorius &amp;lt;code&amp;gt;==&amp;lt;/code&amp;gt; naudojamas abiejų operatoriaus pusių išraiškų lygybei patikrinti, kaip ir &amp;lt;code&amp;gt; &amp;lt; &amp;lt;/code&amp;gt; buvo naudojami norint pasakyt „mažiau nei“ (kitame skyriuje rasi išsamų visų palyginimo operatorių sąrašą). &lt;br /&gt;
&lt;br /&gt;
Ši mūsų sukurta programa spausdins &amp;lt;code&amp;gt;Padėk! Užstrigau cikle!&amp;lt;/code&amp;gt; visą amžinybę... Tol, kol pats ją sustabdysi, todėl kad ji visą laiką yra &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; (visada atitinka teigiamą reikšmę) ir niekada nesikeičia (&#039;&#039;True&#039;&#039;, lietuviškai &#039;&#039;teisinga&#039;&#039; arba &#039;&#039;tiesa&#039;&#039;, paprastai programavime dar rašomas kaip 1). Kaip programą sustabdyti? Paprasčiausiai paspausk ctrl + c mygtukus.&lt;br /&gt;
&lt;br /&gt;
=== Pavyzdžiai ===&lt;br /&gt;
==== Fibonačio skaičių seka ====&lt;br /&gt;
Fibonačio skaičių seka – sveikųjų skaičių seka. Seka prasideda šiais skaičiais: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233. Kiekvienas šios sekos skaičius lygus dviejų prieš jį einančių skaičių sumai. Toliau parodysiu, kaip gali atvaizduoti pirmus dvidešimt Fibonačio skaičius 3 skirtingais būdais.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fibonacci-metodas1.py&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Ši programa skaičiuoja Fibonačio seką&lt;br /&gt;
a = 0&lt;br /&gt;
b = 1&lt;br /&gt;
pradinis_skaičius = 0&lt;br /&gt;
maksimalus_skaičius = 20&lt;br /&gt;
&lt;br /&gt;
while pradinis_skaičius &amp;lt; maksimalus_skaičius:&lt;br /&gt;
    pradinis_skaičius = pradinis_skaičius + 1&lt;br /&gt;
    print(a, end = &amp;quot; &amp;quot;)  # Atkreipkite dėmesį į end = &amp;quot; &amp;quot; spausdinimo funkcijos argumentuose  &lt;br /&gt;
                       # būtent tai neleidžia sukurti naujos eilutės.&lt;br /&gt;
    senas_a = a    # turime sekti, nes mes jį keičiame.&lt;br /&gt;
    a = b&lt;br /&gt;
    b = senas_a + b&lt;br /&gt;
print()  # gauna naują (tuščią) eilutę.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Išvestis :&lt;br /&gt;
 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181&lt;br /&gt;
&lt;br /&gt;
Įsidėmėk, kad išvestis yra vienoje eilutėje dėl papildomų argumentų &amp;lt;code&amp;gt;end = &amp;quot; &amp;quot;&amp;lt;/code&amp;gt; funkcijos &amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt; argumentuose.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fibonacci-metodas2.py&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Supaprastintas ir greitesnis Fibonačio sekos apskaičiavimo metodas&lt;br /&gt;
a = 0&lt;br /&gt;
b = 1&lt;br /&gt;
pradinis_skaičius = 0&lt;br /&gt;
maksimalus_skaičius = 10&lt;br /&gt;
&lt;br /&gt;
while pradinis_skaičius &amp;lt; maksimalus_skaičius:&lt;br /&gt;
    pradinis_skaičius = pradinis_skaičius + 1&lt;br /&gt;
    print(a, b, end=&amp;quot; &amp;quot;)  # Įsidėmėk end=&amp;quot; &amp;quot;&lt;br /&gt;
    a = a + b    &lt;br /&gt;
    b = a + b&lt;br /&gt;
print()  # gauna naują (tuščią) eilutę.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Išvestis:&lt;br /&gt;
 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fibonacci-metodas3.py&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 0&lt;br /&gt;
b = 1&lt;br /&gt;
pradinis_skaičius = 0&lt;br /&gt;
maksimalus_skaičius = 20&lt;br /&gt;
&lt;br /&gt;
#kai ciklas prasideda, mes jame pasiliekame&lt;br /&gt;
while pradinis_skaičius &amp;lt; maksimalus_skaičius:&lt;br /&gt;
    pradinis_skaičius += 1&lt;br /&gt;
    senas_a = a&lt;br /&gt;
    a = a + b&lt;br /&gt;
    b = senas_a&lt;br /&gt;
    print(senas_a,end=&amp;quot; &amp;quot;)&lt;br /&gt;
print()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Išvestis:&lt;br /&gt;
 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181&lt;br /&gt;
&lt;br /&gt;
==== Įvesk slaptažodį ====&lt;br /&gt;
&#039;&#039;&#039;Slaptaždis.py&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Laukia, kol bus įvestas slaptažodis. Naudok „ctrl+ C“, kad sustabdytum programą&lt;br /&gt;
# be slaptažodžio&lt;br /&gt;
&lt;br /&gt;
#atkreipk dėmesį, kad tai neturi būti slaptažodis, kad&lt;br /&gt;
# ciklas while turi prasisukti bent kartą.&lt;br /&gt;
slaptažodis= str()&lt;br /&gt;
&lt;br /&gt;
# įsidėmėk != reiškia nelygu&lt;br /&gt;
while slaptažodis!= &amp;quot;Angis&amp;quot;:&lt;br /&gt;
    slaptažodis = input(&amp;quot;Slaptažodis: &amp;quot;)&lt;br /&gt;
print(&amp;quot;Prisijungimas sėkmingas&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kaip programa veikia:&lt;br /&gt;
 Slaptažodis: &#039;&#039;&#039;auo&#039;&#039;&#039;&lt;br /&gt;
 Slaptažodis: &#039;&#039;&#039;y22&#039;&#039;&#039;&lt;br /&gt;
 Slaptažodis: &#039;&#039;&#039;slaptažodis&#039;&#039;&#039;&lt;br /&gt;
 Slaptažodis: &#039;&#039;&#039;Sezamai atsiverk&#039;&#039;&#039;&lt;br /&gt;
 Slaptažodis: &#039;&#039;&#039;Angis&#039;&#039;&#039;&lt;br /&gt;
 Prisijungimas sėkmingas&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
1. Parašyk programą, kuri prašo vartotojo įvesti skaičius tol, kol jis įveda &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. Tada programa turi išvesti skaičių vidurkį. Gali remtis skyriuje aptartu skaičių sumos pavyzdžiu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
skaičius = -1&lt;br /&gt;
skaičių_suma = 0&lt;br /&gt;
viso_skaičių = 0&lt;br /&gt;
&lt;br /&gt;
while skaičius != 0:&lt;br /&gt;
    skaičius = int(input(&amp;quot;Įveskite skaičių: &amp;quot;))&lt;br /&gt;
    if skaičius != 0:&lt;br /&gt;
		skaičių_suma = skaičių_suma + skaičius&lt;br /&gt;
		viso_skaičių = viso_skaičių + 1&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Skaičių vidurkis:&amp;quot;, skaičių_suma / viso_skaičių)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Parašyk programą, kuri prašo vartotojo įvesti skaičių ir išveda to skaičiaus, pakelto kubu, reikšmę. Programa turėtų veiksmą kartoti tol, kol vartotojas įveda &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
skaičius = 1&lt;br /&gt;
&lt;br /&gt;
while skaičius != 0:&lt;br /&gt;
    skaičius = int(input(&amp;quot;Įvesk skaičių: &amp;quot;))&lt;br /&gt;
    if skaičius != 0:&lt;br /&gt;
        skaičius_kubu = skaičius * skaičius * skaičius&lt;br /&gt;
        print(skaičius, &amp;quot; pakelta kubu yra &amp;quot;, skaičius_kubu)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Parašyk programą, kuri prašo vartotojo įvesti penkis skaičius ir išveda jų sandaugą.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
sandauga = 1&lt;br /&gt;
skaičių_kiekis = 0&lt;br /&gt;
&lt;br /&gt;
while skaičių_kiekis &amp;lt; 5:&lt;br /&gt;
    naujas_skaičius = int(input(&amp;quot;Įvesk skaičių: &amp;quot;))&lt;br /&gt;
    sandauga = sandauga * naujas_skaičius&lt;br /&gt;
    skaičių_kiekis = skaičių_kiekis + 1&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Įvestų skaičių sandauga: &amp;quot;, sandauga)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Parašyk programą, kuri prašo vartotojo įvesti skaičių ir išveda to skaičiaus daugybos lentelę nuo 1 iki 10. Pavyzdžiui, jei įvestas skaičius yra 11, išvestis turėtų būti:&lt;br /&gt;
&lt;br /&gt;
11 x 1 = 11&lt;br /&gt;
&lt;br /&gt;
11 x 2 = 22&lt;br /&gt;
&lt;br /&gt;
11 x 3 = 33&lt;br /&gt;
&lt;br /&gt;
11 x 4 = 44&lt;br /&gt;
&lt;br /&gt;
11 x 5 = 55&lt;br /&gt;
&lt;br /&gt;
11 x 6 = 66&lt;br /&gt;
&lt;br /&gt;
11 x 7 = 77&lt;br /&gt;
&lt;br /&gt;
11 x 8 = 88&lt;br /&gt;
&lt;br /&gt;
11 x 9 = 99&lt;br /&gt;
&lt;br /&gt;
11 x 10 = 110&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
skaičius = int(input(&amp;quot;Įvesk skaičių: &amp;quot;))&lt;br /&gt;
indeksas = 1&lt;br /&gt;
&lt;br /&gt;
while indeksas &amp;lt;= 10:&lt;br /&gt;
    print(skaičius, &amp;quot; * &amp;quot;, indeksas, &amp;quot; = &amp;quot;, skaičius * indeksas)&lt;br /&gt;
    indeksas = indeksas + 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Kas čia eina? |next=Pasirinkimai}}&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Kas_%C4%8Dia_eina%3F&amp;diff=70</id>
		<title>Vadovėlis/Kas čia eina?</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Kas_%C4%8Dia_eina%3F&amp;diff=70"/>
		<updated>2023-01-03T14:34:06Z</updated>

		<summary type="html">&lt;p&gt;Monika: Pridėtos dvi užduotys&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Labas, Pasauli |next=Suskaičiuoti iki 10}}&lt;br /&gt;
{{BookCat}}&lt;br /&gt;
&lt;br /&gt;
=== Įvestis ir kintamieji ===&lt;br /&gt;
&lt;br /&gt;
[[Vaizdas:Kintamieji.png|600px|frameless|center|Kintamieji]]&lt;br /&gt;
&lt;br /&gt;
Jaučiu, kad atėjo laikas tikrai sudėtingai programai. Štai ji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Stop!&amp;quot;)&lt;br /&gt;
vartotojo_įvestis = input(&amp;quot;Kas čia eina? &amp;quot;)&lt;br /&gt;
print(&amp;quot;Gali praeiti,&amp;quot;,  vartotojo_įvestis )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kai &#039;&#039;&#039;aš&#039;&#039;&#039; paleidau programą, štai ką &#039;&#039;&#039;mano&#039;&#039;&#039; ekranas parodė:&lt;br /&gt;
&lt;br /&gt;
 Stop!&lt;br /&gt;
 Kas čia eina? &#039;&#039;&#039;Benas&#039;&#039;&#039;&lt;br /&gt;
 Gali praeiti, Benas&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Pastaba: Jei paleisi kodą spausdamas &amp;quot;F5&amp;quot;, Python išvestis bus tik tokia:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Stop!&lt;br /&gt;
 Kas čia eina?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tu turi įvesti savo vardą į Python [http://www.ims.mii.lt/EK%C5%BD/enciklo.html?word=apvalkalas apvalkalą] ir tada paspausti enter norėdama/s pamatyt likusį tekstą.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Žinoma, kai tu paleisi programą, tavo ekranas atrodys kitaip dėl &amp;lt;code&amp;gt;input()&amp;lt;/code&amp;gt; užklausos.&lt;br /&gt;
Kai paleidai programą (juk paleidai, tiesa?), tu turėjai surinkti savo vardą ir tada paspausti Enter.&lt;br /&gt;
Programa atspausdino dalį teksto ir tavo vardą. Taip atrodo &#039;&#039;įvesties&#039;&#039; pavyzdys.&lt;br /&gt;
Programa pasiekia tam tikrą kodo tašką ir laukia vartotojo įvesties, kad duomenis galėtų panaudoti tolimesniuose procesuose.&lt;br /&gt;
&lt;br /&gt;
Žinoma, gauti informaciją iš vartotojo pasaulio nieko verta, jei tos informacijos nėra kur padėti. Ir šioje vietoje atsiranda kintamieji.  &lt;br /&gt;
&lt;br /&gt;
Pavyzdinėje programoje &amp;lt;code&amp;gt;vartotojo_įvestis&amp;lt;/code&amp;gt; yra &#039;&#039;kintamasis&#039;&#039;. Kintamieji yra kaip dėžės, į kurias galima įdėti norimas informacijos dalis.  &lt;br /&gt;
&lt;br /&gt;
Štai programa, parodanti kintamųjų pavyzdžius:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 123.4&lt;br /&gt;
b23 = &#039;Šlamštas&#039;&lt;br /&gt;
vardas = &amp;quot;Benas&amp;quot;&lt;br /&gt;
b = 432&lt;br /&gt;
c = a + b&lt;br /&gt;
print(&amp;quot;a + b yra&amp;quot;, c)&lt;br /&gt;
print(&amp;quot;vardas yra&amp;quot;, vardas)&lt;br /&gt;
print(&amp;quot;Rūšiuotos dalys, Po vidurnakčio ar&amp;quot;, b23)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Štai kokia išvestis:&lt;br /&gt;
&lt;br /&gt;
 a + b yra 555.4&lt;br /&gt;
 vardas yra Benas&lt;br /&gt;
 Rūšiuotos dalys, Po vidurnakčio ar Šlamštas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kintamieji laiko duomenis. Viršuje aprašytoje programoje kintamieji yra &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;b23&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vardas&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;. Pagrindiniai du kintamųjų tipai yra &#039;&#039;tekstas&#039;&#039; ir &#039;&#039;skaičius&#039;&#039;. Tekstas yra raidžių, skaičių ir kitų simbolių seka. Šiame pavyzdyje &amp;lt;code&amp;gt;b23&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;vardas&amp;lt;/code&amp;gt; yra tekstinio tipo kintamieji. &amp;lt;code&amp;gt;Šlamštas&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Benas&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a + b yra&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vardas yra&amp;lt;/code&amp;gt;, ir &amp;lt;code&amp;gt;Rūšiuotos dalys, Po vidurnakčio ar&amp;lt;/code&amp;gt; šioje programoje yra tiesiog tekstinės reikšmės. Paprastas tekstas yra apsuptas kabučių &amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt; arba &amp;lt;code&amp;gt;&#039;&amp;lt;/code&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
Kitas kintamojo tipas yra skaičius. Atkreipkite dėmesį, kad kintamieji, kurie naudojami saugoti reikšmes, nenaudoja kabučių (&amp;quot; ir &#039;). Jei norite naudoti realias &#039;&#039;reikšmes&#039;&#039;, privalote naudoti kabutes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
reikšmė1 == Oho&lt;br /&gt;
reikšmė2 == &amp;quot;Oho&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abu pavyzdžiai atrodo vienodai, bet pirmu atveju Python tikrins ar reikšmė, patalpinta kintamajame &amp;lt;code&amp;gt;reikšmė1&amp;lt;/code&amp;gt;, yra tokia pati kaip &#039;&#039;kintamojo&#039;&#039; &amp;lt;code&amp;gt;Oho&amp;lt;/code&amp;gt;. Antrame pavyzdyje Python tikrins ar tekstas (konkrečios raidės &amp;lt;code&amp;gt;O&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;h&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;o&amp;lt;/code&amp;gt;) yra tokios pat kaip ir &amp;lt;code&amp;gt;reikšmė2&amp;lt;/code&amp;gt; (toliau daugiau paaiškinsiu apie tekstą ir &amp;lt;code&amp;gt;==&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Priskyrimai ===&lt;br /&gt;
&lt;br /&gt;
Gerai, dabar mes turime dėžutes, pavadintas kintamaisiais, taip pat informaciją, kuri gali būti kintamajame. Kompiuteris pamatys tokią eilutę &amp;lt;code&amp;gt;vardas = &amp;quot;Benas&amp;quot;&amp;lt;/code&amp;gt; ir perskaitys ją kaip &amp;quot;Padėk tekstą &amp;lt;code&amp;gt;Benas&amp;lt;/code&amp;gt; į dėžę (ar kintamąjį) &amp;lt;code&amp;gt;vardas&amp;lt;/code&amp;gt;&amp;quot;. Vėliau, pamatęs sakinį &amp;lt;code&amp;gt;c = a + b&amp;lt;/code&amp;gt; jį perskaitys kaip &amp;quot;padėt sumą &amp;lt;code&amp;gt;a + b&amp;lt;/code&amp;gt; arba &amp;lt;code&amp;gt;123.4 + 432&amp;lt;/code&amp;gt;, kas lygu &amp;lt;code&amp;gt;555.4&amp;lt;/code&amp;gt;, į &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;&amp;quot;. Dešinė sakinio pusė &#039;&#039;konvertuosis&#039;&#039; ir rezultatas bus padėtas į kintamajį kairėje pusėje (&amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;). Tai yra vadinama &#039;&#039;priskyrimu&#039;&#039;. Turėtume nemaišyti priskyrimo ir matematinio lygybės ženklo (&amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;). Ką reiškia &amp;lt;code&amp;gt;==&amp;lt;/code&amp;gt; aptarsime vėliau.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O štai ir kitas kintamųjų naudojimo pavyzdys:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = 1&lt;br /&gt;
print(a)&lt;br /&gt;
a = a + 1&lt;br /&gt;
print(a)&lt;br /&gt;
a = a * 2&lt;br /&gt;
print(a)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ir žinoma štai tokį rezultatą gausime:&lt;br /&gt;
&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 4&lt;br /&gt;
&lt;br /&gt;
Net jei kintamieji yra abiejose lygybės pusėse (pavyzdžiui šlamštas = šlamštas), kompiuteris vis tiek perskaitys taip: &amp;quot;Pirmiausia surask informaciją, kuri patalpinta ir tada surask, kur ją padėti&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dar viena programa prieš man pabangiant šį skyrių:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
skaičius = float(input(&amp;quot;Įvesk skaičių: &amp;quot;))&lt;br /&gt;
sveikasSkaičius = int(input(&amp;quot;Įvesk sveiką skaičių: &amp;quot;))&lt;br /&gt;
tekstas = input(&amp;quot;Įvesk tekstą: &amp;quot;)&lt;br /&gt;
print(&amp;quot;skaičius =&amp;quot;, skaičius)&lt;br /&gt;
print(&amp;quot;skaičius yra&amp;quot;, type(skaičius))&lt;br /&gt;
print(&amp;quot;skaičius * 2 =&amp;quot;, skaičius * 2)&lt;br /&gt;
print(&amp;quot;sveikas skaičius =&amp;quot;, sveikasSkaičius)&lt;br /&gt;
print(&amp;quot;sveikas skaičius yra&amp;quot;, type(sveikasSkaičius))&lt;br /&gt;
print(&amp;quot;sveikasSkaičius * 2 =&amp;quot;, sveikasSkaičius * 2)&lt;br /&gt;
print(&amp;quot;tekstas =&amp;quot;, tekstas)&lt;br /&gt;
print(&amp;quot;tekstas yra&amp;quot;, type(tekstas))&lt;br /&gt;
print(&amp;quot;tekstas * 2 =&amp;quot;, tekstas * 2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas:&lt;br /&gt;
&lt;br /&gt;
 Įvesk skaičių: &#039;&#039;&#039;12.34&#039;&#039;&#039;&lt;br /&gt;
 Įvesk sveiką skaičių: &#039;&#039;&#039;-3&#039;&#039;&#039;&lt;br /&gt;
 Įvesk tekstą: &#039;&#039;&#039;Labas&#039;&#039;&#039;&lt;br /&gt;
 skaičius = 12.34&lt;br /&gt;
 skaičius yra &amp;lt;class &#039;float&#039;&amp;gt;&lt;br /&gt;
 skaičius * 2 = 24.68&lt;br /&gt;
 sveikas skaičius = -3&lt;br /&gt;
 sveikas skaičius yra &amp;lt;class &#039;int&#039;&amp;gt;&lt;br /&gt;
 sveikasSkaičius * 2 = -6&lt;br /&gt;
 tekstas = Labas&lt;br /&gt;
 tekstas yra &amp;lt;class &#039;str&#039;&amp;gt;&lt;br /&gt;
 tekstas * 2 = LabasLabas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad kintamasis &amp;lt;code&amp;gt;skaičius&amp;lt;/code&amp;gt; buvo sukurtas su &amp;lt;code&amp;gt;float(input())&amp;lt;/code&amp;gt;, išsaugos, o vėliau atspausdins tokį skaičių, koks buvo įvestas – su kableliu. Kintamasis &amp;lt;code&amp;gt;sveikasSkaičius&amp;lt;/code&amp;gt;, kuris buvo sukurtas su &amp;lt;code&amp;gt;int(input())&amp;lt;/code&amp;gt;, grąžina sveiką skaičių – reikšmę be kablelio. Tuo tarpu &amp;lt;code&amp;gt;tekstas&amp;lt;/code&amp;gt;, kuris buvo sukurtas su &amp;lt;code&amp;gt;input()&amp;lt;/code&amp;gt;, grąžino tekstinę eilutę (gali būti aprašoma ir &amp;lt;code&amp;gt;str(input())&amp;lt;/code&amp;gt;). Jei tu nori, kad vartotojas įvestų skaičių su kableliu, naudok &amp;lt;code&amp;gt;float(input())&amp;lt;/code&amp;gt; kintamojo tipą. Jei nori, kad vartotojas įvestų sveiką skaičių, naudok &amp;lt;code&amp;gt;int(input())&amp;lt;/code&amp;gt; (jeigu vartotojas įves skaičių su kabliu – dalį po kabelio programa tiesiog ignoruos), bet jei nori teksto – naudok &amp;lt;code&amp;gt;input()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Antra pusė programos naudoja &amp;lt;code&amp;gt;type()&amp;lt;/code&amp;gt; funkciją, kuri nusako, kokio tipo kintamasis yra. Skaičius yra &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; arba &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; tipo. Tai yra angliškų žodžių &#039;&#039;integer&#039;&#039; (sveikas skaičius) ir &#039;&#039;floating point&#039;&#039; (slankusis kablelis, naudojamas daugiausiai skaičiams su kableliu) trumpiniai. Tekstinė eilutė yra &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt;, trumpinys &#039;&#039;string&#039;&#039; (tekstinė eilutė). Sveiki skaičiai ir slankusis kablelis gali būti naudojami matematinėms funkcijoms, tekstas – ne. Atkreipk dėmesį, kai Python&#039;as daugina skaičių iš sveiko skaičiaus gaunamas rezultatas, kurio ir galima tikėtis, tačiau jei tekstas padauginamas iš sveiko skaičiaus – sukuriamos kelios teksto kopijos (pavyzdžiui, &amp;lt;code&amp;gt;tekstas * 2 = LabasLabas&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Tos pačios operacijos su teksto tipu daro kitokius dalykus nei su skaičiais. Taip pat, kai kurios operacijos veikia tik su skaičiais ir grąžina klaidą, jei bus bandoma panaudoti tesktą. Štai keletas interaktyvių pavyzdžių:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; print(&amp;quot;Čia&amp;quot; + &amp;quot; &amp;quot; + &amp;quot;yra&amp;quot; + &amp;quot; junginys.&amp;quot;)&lt;br /&gt;
Čia yra junginys.&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; print(&amp;quot;Ha, &amp;quot; * 5)&lt;br /&gt;
Ha, Ha, Ha, Ha, Ha, &lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; print(&amp;quot;Ha, &amp;quot; * 5 + &amp;quot;ha!&amp;quot;)&lt;br /&gt;
Ha, Ha, Ha, Ha, Ha, ha!&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; print(3 - 1)&lt;br /&gt;
2&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; print(&amp;quot;3&amp;quot; - &amp;quot;1&amp;quot;)&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;&amp;lt;string&amp;gt;&amp;quot;, line 1, in &amp;lt;module&amp;gt;&lt;br /&gt;
TypeError: unsupported operand type(s) for -: &#039;str&#039; and &#039;str&#039;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Štai sąrašas kelių operacijų su tekstu:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Operacija&lt;br /&gt;
!Symbolis &lt;br /&gt;
!Pavyzdys&lt;br /&gt;
|-&lt;br /&gt;
|Pakartojimas&lt;br /&gt;
|&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; &lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;i&amp;quot; * 5 == &amp;quot;iiiii&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Sujungimas&lt;br /&gt;
|&amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; &lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;Hello, &amp;quot; + &amp;quot;World!&amp;quot; == &amp;quot;Hello, World!&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pavyzdžiai ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Laikas.py&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# ši programa apskaičiuoja laiko priklausomybę nuo greičio ir atstumo&lt;br /&gt;
print(&amp;quot;Įvesk greitį ir atstumą&amp;quot;)&lt;br /&gt;
greitis = float(input(&amp;quot;Greitis: &amp;quot;))&lt;br /&gt;
atstumas = float(input(&amp;quot;Atstumas: &amp;quot;))&lt;br /&gt;
laikas = (atstumas / greitis)&lt;br /&gt;
print(&amp;quot;Laikas:&amp;quot;, laikas)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas:&lt;br /&gt;
&lt;br /&gt;
 Įvesk greitį ir atstumą&lt;br /&gt;
 Greitis: &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
 Atstumas: &#039;&#039;&#039;10&#039;&#039;&#039;&lt;br /&gt;
 Laikas: 2.0&lt;br /&gt;
&lt;br /&gt;
 Įvesk greitį ir atstumą&lt;br /&gt;
 Greitis: &#039;&#039;&#039;3.52&#039;&#039;&#039;&lt;br /&gt;
 Atstumas: &#039;&#039;&#039;45.6&#039;&#039;&#039;&lt;br /&gt;
 Laikas: 12.9545454545&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Plotas.py&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Ši programa apskaičiuoja stačiakampio perimetrą ir plotą &lt;br /&gt;
print(&amp;quot;Įveskite stačiakampio informaciją&amp;quot;)&lt;br /&gt;
ilgis = float(input(&amp;quot;Ilgis: &amp;quot;))&lt;br /&gt;
plotis = float(input(&amp;quot;Plotis: &amp;quot;))&lt;br /&gt;
perimetras = (2 * ilgis + 2 * plotis) &lt;br /&gt;
print(&amp;quot;Plotas:&amp;quot;, ilgis * plotis)&lt;br /&gt;
print(&amp;quot;Perimetras:&amp;quot;, perimetras)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pavyzdžio rezultatas:&lt;br /&gt;
&lt;br /&gt;
 Įveskite stačiakampio informaciją&lt;br /&gt;
 Ilgis: &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
 Plotis: &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
 Plotas: 12.0&lt;br /&gt;
 Perimetras: 14.0&lt;br /&gt;
&lt;br /&gt;
 Įveskite stačiakampio informaciją&lt;br /&gt;
 Ilgis: &#039;&#039;&#039;2.53&#039;&#039;&#039;&lt;br /&gt;
 Plotis: &#039;&#039;&#039;5.2&#039;&#039;&#039;&lt;br /&gt;
 Plotas: 13.156&lt;br /&gt;
 Perimetras: 15.46&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;temperatura.py&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Ši programa konvertuoja temperatūra iš Farenheitų į Celsijų&lt;br /&gt;
far_temp = float(input(&amp;quot;Temperatūra Farenheitais: &amp;quot;))&lt;br /&gt;
cels_temp = (far_temp - 32.0) * (5.0 / 9.0)&lt;br /&gt;
print(&amp;quot;Temperatūra Celsijaus laipsniais:&amp;quot;, cels_temp )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pavyzdžio rezultatas:&lt;br /&gt;
&lt;br /&gt;
 Temperatūra Farenheitais: &#039;&#039;&#039;32&#039;&#039;&#039;&lt;br /&gt;
 Temperatūra Celsijaus laipsniais: 0.0&lt;br /&gt;
&lt;br /&gt;
 Temperatūra Farenheitais: &#039;&#039;&#039;-40&#039;&#039;&#039;&lt;br /&gt;
 Temperatūra Celsijaus laipsniais: -40.0&lt;br /&gt;
&lt;br /&gt;
 Temperatūra Farenheitais: &#039;&#039;&#039;212&#039;&#039;&#039;&lt;br /&gt;
 Temperatūra Celsijaus laipsniais: 100.0&lt;br /&gt;
&lt;br /&gt;
 Temperatūra Farenheitais: &#039;&#039;&#039;98.6&#039;&#039;&#039;&lt;br /&gt;
 Temperatūra Celsijaus laipsniais: 37.0&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
1. Parašyk programą, kuri priima 2 tekstines reikšmes ir 2 skaičius iš vartotojo įvesties, sujungia tekstus be tarpų ir atvaizduoja gautą rezultatą, o tada sudaugina du skaičius ir atvaizduoja naujoje eilutėje.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;  &lt;br /&gt;
tekstas1 = input(&#039;Tekstas 1: &#039;)&lt;br /&gt;
tekstas2 = input(&#039;Tekstas 2: &#039;)&lt;br /&gt;
skaičius1 = float(input(&#039;Skaičius 1: &#039;))&lt;br /&gt;
skaičius2 = float(input(&#039;Skaičius 2: &#039;))&lt;br /&gt;
print(tekstas1 + tekstas2)&lt;br /&gt;
print(skaičius1 * skaičius2)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Parašyk programą, kuri paprašytų įvesti savo vardą ir amžių, o ji atspausdintų tekstą “Labas, aš {vardas}. Man {metai} metų.”. Kur {vardas} ir {metai} yra įvesti duomenys.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
vardas = input(&amp;quot;Įvesk savo vardą: &amp;quot;)&lt;br /&gt;
metai = input(&amp;quot;Įvesk savo amžių: &amp;quot;)&lt;br /&gt;
print(&amp;quot;Labas, aš &amp;quot;, vardas, &amp;quot;. Man &amp;quot;, metai, &amp;quot; metų.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Parašyk programą, kuriai įvestum sekundžių skaičių, o ji išvestų, kiek tai yra minučių.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; &lt;br /&gt;
sekundės = int(input(&amp;quot;Įvesk sekundžių skaičių: &amp;quot;))&lt;br /&gt;
minutės = sekundės / 60&lt;br /&gt;
print(sekundės, &amp;quot;s = &amp;quot;, minutės, &amp;quot;min&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Labas, Pasauli |next=Suskaičiuoti iki 10}}&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Labas,_Pasauli&amp;diff=69</id>
		<title>Vadovėlis/Labas, Pasauli</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Labas,_Pasauli&amp;diff=69"/>
		<updated>2023-01-03T14:25:07Z</updated>

		<summary type="html">&lt;p&gt;Monika: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Now for our first lesson, what is a computer program?  A computer program is a set of very detailed instructions that tell a computer what to do.   --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Įvadas |next=Kas čia eina?}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ką sužinosi? ===&lt;br /&gt;
Perskaitęs šį skyrių, turėtum suprasti kaip teksto redaktoriumi rašyti programas, kaip parašytas programas išsaugoti kompiuterio atmintyje ir kaip jas paleisti.&lt;br /&gt;
&lt;br /&gt;
=== Spausdinimas ===&lt;br /&gt;
Istoriškai taip jau susiklostė, kad programavimo pamokos dažniausiai prasideda nuo mažos ir paprastos programėlės pavadinimu „Labas, Pasauli!“ arba angliškai „Hello, World!“.&lt;br /&gt;
&lt;br /&gt;
[[Vaizdas:Labas, pasauli.png|600px|frameless|center]]&lt;br /&gt;
&lt;br /&gt;
Python&#039;o programavimo kalboje programa atrodytų taip: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Labas, Pasauli!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Programavimas kodo redaktoriumi ====&lt;br /&gt;
&lt;br /&gt;
Programavimui rekomenduoju naudoti kodo redaktorių &amp;lt;code&amp;gt;LR NŠA Python&amp;lt;/code&amp;gt;, kaip aprašytą skyriuje [[Python Vadovėlis/Įvadas#Python_ir_Visual_Studio_Code_diegimas|Python ir Visual Studio Code diegimas]]. Savo kompiuteryje atsidaryk šią programavimo aplinką, sukurk naują failą (File -&amp;gt; New File arba Failas -&amp;gt; Naujas failas), įkopijuok šį kodą ir tuomet failą išsaugok (File -&amp;gt; Save arba Failas -&amp;gt; Išsaugoti) pavadinimu &amp;lt;code&amp;gt;labas.py&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Sveikiname! Sukūrei savo pirmą Python programą.&lt;br /&gt;
&lt;br /&gt;
(Jeigu tokios programavimo aplinkos įsidiegti savo kompiuteryje negali, žr. kitą žingsnį).&lt;br /&gt;
&lt;br /&gt;
Dabar parašytą programą paleisk vykdyti: tiesiog paspausk žalią mygtuką dešinėje viršuje.&lt;br /&gt;
&lt;br /&gt;
Kai paleisi šią programą, ji suveiks ir terminale atsiras užrašas:&lt;br /&gt;
&lt;br /&gt;
 Labas, Pasauli!&lt;br /&gt;
&lt;br /&gt;
==== Alternatyvus būdas: Programavimas paprastu teksto redaktoriumi ====&lt;br /&gt;
&lt;br /&gt;
Jeigu kodo redaktoriaus negali įsidiegti savo kompiuteryje dėl kokių nors priežasčių, programuoti galima ir tiesiog paprasčiausiu teksto redaktoriumi, pvz. Notepad.  &lt;br /&gt;
&lt;br /&gt;
Tiesiog sukurk naują paprastą tekstinį failą (.txt), jame įrašyk programinį kodą &amp;lt;code&amp;gt;print(&amp;quot;Labas, Pasauli!&amp;quot;)&amp;lt;/code&amp;gt;, failą išsaugok pavadinimu &amp;lt;code&amp;gt;labas.py&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Dabar parašytą programą paleisk vykdyti, tiesiog konsolėje parašęs &amp;lt;code&amp;gt;python3 labas.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tavo programa parašys: &lt;br /&gt;
&lt;br /&gt;
 Labas, Pasauli!&lt;br /&gt;
&lt;br /&gt;
=== Eime toliau ===&lt;br /&gt;
&lt;br /&gt;
Labai rekomenduoju kiekvieną programos pavyzdį pasibandyti pačiam - parašyk ir tada pasileisk programą. Mūsų praktikoje toks mokymosi procesas yra pats efektyviausias ir veiksmingiausias.&lt;br /&gt;
&lt;br /&gt;
Na, o dabar keliaukime prie kiek sudėtingesnės programos pavyzdžio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Gyveno kadaise Paryžiuj bobutė –&amp;quot;)&lt;br /&gt;
print(&amp;quot;Prie Eifelio bokšto turėjo ji butą.&amp;quot;)&lt;br /&gt;
print(&amp;quot;Ji visko pasauly klausytis norėjo,&amp;quot;)&lt;br /&gt;
print(&amp;quot;Bet viena kairiąja ausim tegirdėjo.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kai paleidi šią programą, ji parašo J. Erlicko eilėraščio Bobutė iš Paryžiaus (2) ištrauką:&lt;br /&gt;
&lt;br /&gt;
 Gyveno kadaise Paryžiuj bobutė –&lt;br /&gt;
 Prie Eifelio bokšto turėjo ji butą.&lt;br /&gt;
 Ji visko pasauly klausytis norėjo,&lt;br /&gt;
 Bet viena kairiąja ausim tegirdėjo.&lt;br /&gt;
&lt;br /&gt;
Kai kompiuteris paleidžia programą, pirmiausia jis mato:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Gyveno kadaise Paryžiuj bobutė –&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Todėl kompiuteris užrašo:&lt;br /&gt;
&lt;br /&gt;
 Gyveno kadaise Paryžiuj bobutė –&lt;br /&gt;
&lt;br /&gt;
Tada kompiuteris skaito kitą eilutę ir mato:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Prie Eifelio bokšto turėjo ji butą.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Todėl ir ją užrašo kompiuterio ekrane:&lt;br /&gt;
&lt;br /&gt;
 Prie Eifelio bokšto turėjo ji butą.&lt;br /&gt;
&lt;br /&gt;
Taip kompiuteris žiūri į kiekvieną eilutę *iš eilės*, ir ją įvykdęs - eina toliau: skaito kitą eilutę, ją įvykdo ir t.t. Taip kompiuteris vykdo visas surašytas komandas, kol pasiekia programos pabaigą.&lt;br /&gt;
&lt;br /&gt;
==== Terminologija ====&lt;br /&gt;
Taigi pats laikas truputį paaiškinti, kas vyksta ir trumpai supažindinti su terminologija.&lt;br /&gt;
&lt;br /&gt;
Prieš tai rašydami kodą, mes naudojame „funkciją“ pavadinimu &amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt;. Po funkcijos pavadinimo &amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt; rašomi skliausteliai &amp;lt;code&amp;gt;()&amp;lt;/code&amp;gt;, kuriuose nurodome tos funkcijos parametrus/argumentus. Pažiūrėk į pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Labas, Pasauli!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
funkcijai duodamas vienas parametras, kuris yra &amp;lt;code&amp;gt;&amp;quot;Labas, Pasauli!&amp;quot;&amp;lt;/code&amp;gt;. Ar pastebėjai, kad šis parametras, sudarytas iš simbolių grupės, kuri įrašyta tarp dviejų kabučių (&amp;quot;&amp;quot;)? Programuotojai tai vadina „rašytinių simbolių seka“ ar trumpiau tariant „eilute“ (tekstine reikšme, angliškai &#039;string&#039;). Kitas tekstinės reikšmės pavyzdys yra &amp;lt;code&amp;gt;&amp;quot;Gyveno kadaise Paryžiuj bobutė&amp;quot;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Užrašyta funkcija su argumentais yra komanda, kurią supranta Python&#039;as. Sakinio pavyzdys:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Labas, Pasauli!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Paprasčiau tariant, komandą gali įsivaizduoti kaip vieną programos eilutę.  &lt;br /&gt;
&lt;br /&gt;
Kol kas terminologijos pakaks, keliaujam į kitą poskyrį ir mokomės toliau.&lt;br /&gt;
&lt;br /&gt;
====Ženklo \n naudojimas====&lt;br /&gt;
&amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; (kaitos ženklas, angliškai - escape character), arba nauja eilutė. Rašant tekstą, visas tekstas po \n yra užrašomas naujoje eilutėje. Pabandyk suprasti šią programą:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Labas, Pasauli!\nKą turėčiau daryti?&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kurios rezultatas yra toks:&lt;br /&gt;
&lt;br /&gt;
 Labas, Pasauli! &lt;br /&gt;
 Ką turėčiau daryti?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; naudojamas, kai norime tekstą perkelti į kitą eilutę, bet nenorime naudoti kelių &amp;lt;code&amp;gt;print()&amp;lt;/code&amp;gt; komandų.&lt;br /&gt;
&lt;br /&gt;
Spausdinimo komanda automatiškai naudoja &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;, t.y. kiekviena komanda tekstą spausdina vis naujoje eilutėje, net jeigu pats &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; ir neužrašai. Paprasčiau suprasti bus pamačius pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Labas, Pasauli!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
iš tikrųjų yra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Labas, Pasauli!\n&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Aritmetinės operacijos ===&lt;br /&gt;
Programos pavyzdys:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;2 + 2 yra&amp;quot;, 2 + 2)&lt;br /&gt;
print(&amp;quot;3 * 4 yra&amp;quot;, 3 * 4)&lt;br /&gt;
print(&amp;quot;100 - 1 yra&amp;quot;, 100 - 1)&lt;br /&gt;
# Atkreipk dėmesį, python&#039;e aritmetikoje skaičiai po kablelio rašomi su tašku (.)&lt;br /&gt;
print(&amp;quot;((33 + 2) / 5 + 11.5 yra&amp;quot;, (33 + 2) / 5 + 11.5)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas:&lt;br /&gt;
&lt;br /&gt;
 2 + 2 yra 4&lt;br /&gt;
 3 * 4 yra 12&lt;br /&gt;
 100 - 1 yra 99&lt;br /&gt;
 (33 + 2) / 5 + 11.5 yra 18.5&lt;br /&gt;
&lt;br /&gt;
==== Aritmetinės išraiškos ====&lt;br /&gt;
&lt;br /&gt;
Šiame pavyzdyje, rašymo funkcija &amp;lt;code&amp;gt;print()&amp;lt;/code&amp;gt; yra su dvejais argumentais, kurie atskirti kableliu. Panagrinėkime pirmoje eilutėje užrašytą komandą:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;2 + 2 yra&amp;quot;, 2 + 2)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pirmas argumentas yra teksto eilutė &amp;lt;code&amp;gt;&amp;quot;2 + 2 yra&amp;quot;&amp;lt;/code&amp;gt; ir antras argumentas yra aritmetinė išraiška &amp;lt;code&amp;gt;2 + 2&amp;lt;/code&amp;gt;, tiksliau tariant viena iš aritmetinių operacijų.&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad eilutė, kuri yra užrašyta kabutėse yra atspausdinama kaip tekstas, o išraiška užrašyta be kabučių yra apskaičiuojama ir užrašomas atsakymas.&lt;br /&gt;
&lt;br /&gt;
Python&#039;o programavimo kalba turi septynias pagrindines skaičių operacijas.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Operacija &lt;br /&gt;
! Simbolis &lt;br /&gt;
! Pavyzdys&lt;br /&gt;
|-&lt;br /&gt;
|Kėlimas laipsniu  &lt;br /&gt;
| &amp;lt;code&amp;gt;**&amp;lt;/code&amp;gt; &lt;br /&gt;
| &amp;lt;code&amp;gt;5 ** 2 == 25&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Daugyba &lt;br /&gt;
| &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; &lt;br /&gt;
|&amp;lt;code&amp;gt;2 * 3 == 6&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Dalyba &lt;br /&gt;
| &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; &lt;br /&gt;
| &amp;lt;code&amp;gt;14 / 3 == 4.666666666666667&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|Sveikųjų skaičių dalyba&lt;br /&gt;
| &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;14 // 3 == 4&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Liekana&lt;br /&gt;
| &amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt; &lt;br /&gt;
| &amp;lt;code&amp;gt;14 % 3 == 2&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|Sudėtis&lt;br /&gt;
| &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; &lt;br /&gt;
| &amp;lt;code&amp;gt;1 + 2 == 3&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|Atimtis &lt;br /&gt;
| &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; &lt;br /&gt;
| &amp;lt;code&amp;gt;4 - 3 == 1&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad yra trys dalybos būdai: vienas grąžina dešimtainį skaičių, antras – tik dalybos sveikąją dalį, o trečias – liekaną.&lt;br /&gt;
Operacijų tvarka tokia pati kaip matematikoje:&lt;br /&gt;
* pirmiausiai atliekami veiksmai skliausteliuose &amp;lt;code&amp;gt;()&amp;lt;/code&amp;gt;&lt;br /&gt;
* kėlimas laipsniu &amp;lt;code&amp;gt;**&amp;lt;/code&amp;gt;&lt;br /&gt;
* iš kairės į dešinę: daugyba &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;, dalyba&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;, sveikoji dalyba &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;, dalybos liekana &amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt; &lt;br /&gt;
* iš kairės į dešinę: sudėtis &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; ir atimtis &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Taigi, užrašydamas formules, nepamiršk skliaustelių!&lt;br /&gt;
&lt;br /&gt;
=== Komentarai ===&lt;br /&gt;
&lt;br /&gt;
Rašant daug kodo, ateityje tikrai ne viską atsiminsi. Todėl programoje gali naudoti komentarus, kurie yra tiesiog pastabos/paaiškinimai sau pačiam arba kitiems programuotojams. Pavyzdžiui:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Skaičiaus PI išraiška kompiuterio ekrane&lt;br /&gt;
print(22 / 7)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas: &lt;br /&gt;
&lt;br /&gt;
 3.14285714286&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad komentaras prasideda grotelių ženklu: &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;. Komentarai yra skirti žmonėms, pagerinti programos skaitomumą. &lt;br /&gt;
&lt;br /&gt;
Taip pat svarbu suprasti, kad po &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; galima naudoti bet kokius ženklus ir kompiuteris visą šį tekstą ignoruos iki pat eilutės galo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang = &amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Skaičiaus PI išraiška kompiuterio ekrane&lt;br /&gt;
print(22/7) # tokiu būdu gauname tik apytikslę PI reikšmę&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pavyzdžiai ===&lt;br /&gt;
Kiekvieno skyriaus gale bus pateikiami su skyriaus tema susiję pavyzdžiai. Turėtum juos peržvelgti ir išsiaiškinti ar supratai. Taip pat juos gali įsikelti į python&#039;o kodo redaktorių ir pažiūrėti kaip viekia. Jeigu suprasi, keliauk toliau, jeigu ne, bandyk dar kartą perskaityti skyriaus medžiagą ir suprasti pavyzdžių logiką.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Danija.py&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Būti ar nebūti, štai kur klausimas.&amp;quot;)&lt;br /&gt;
print(&amp;quot;                -- Šekspyras&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas:&lt;br /&gt;
&lt;br /&gt;
 Būti ar nebūti, štai kur klausimas.&lt;br /&gt;
                 -- Šekspyras&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mokykla.py&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Pirmoji klasė&amp;quot;)&lt;br /&gt;
print(&amp;quot;1 + 1 =&amp;quot;, 1 + 1)&lt;br /&gt;
print(&amp;quot;2 + 4 =&amp;quot;, 2 + 4)&lt;br /&gt;
print(&amp;quot;5 - 2 =&amp;quot;, 5 - 2)&lt;br /&gt;
print()&lt;br /&gt;
print(&amp;quot;Trečioji klasė&amp;quot;)&lt;br /&gt;
print(&amp;quot;243 - 23 =&amp;quot;, 243 - 23)&lt;br /&gt;
print(&amp;quot;12 * 4 =&amp;quot;, 12 * 4)&lt;br /&gt;
print(&amp;quot;12 / 3 =&amp;quot;, 12 / 3)&lt;br /&gt;
print(&amp;quot;13 / 3 =&amp;quot;, 13 // 3, &amp;quot;liekana&amp;quot;, 13 % 3)&lt;br /&gt;
print()&lt;br /&gt;
print(&amp;quot;Penktoji klasė&amp;quot;)&lt;br /&gt;
print(&amp;quot;123.56 - 62.12 =&amp;quot;, 123.56 - 62.12)&lt;br /&gt;
print(&amp;quot;(4 + 3) * 2 =&amp;quot;, (4 + 3) * 2)&lt;br /&gt;
print(&amp;quot;4 + 3 * 2 =&amp;quot;, 4 + 3 * 2)&lt;br /&gt;
print(&amp;quot;3 ** 2 =&amp;quot;, 3 ** 2)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas:&lt;br /&gt;
&lt;br /&gt;
 Pirma klasė&lt;br /&gt;
 1 + 1 = 2&lt;br /&gt;
 2 + 4 = 6&lt;br /&gt;
 5 - 2 = 3&lt;br /&gt;
 &lt;br /&gt;
 Trečia klasė&lt;br /&gt;
 243 - 23 = 220&lt;br /&gt;
 12 * 4 = 48&lt;br /&gt;
 12 / 3 = 4&lt;br /&gt;
 13 / 3 = 4 liekana 1&lt;br /&gt;
 &lt;br /&gt;
 Penktoji klasė&lt;br /&gt;
 123.56 - 62.12 = 61.44&lt;br /&gt;
 (4 + 3) * 2 = 14&lt;br /&gt;
 4 + 3 * 2 = 10&lt;br /&gt;
 3 ** 2 = 9&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
&lt;br /&gt;
1. Parašyk programą, kuri atspausdintų tavo vardą, pavardę ir gimtadienį kaip atskiras eilutes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas #1 &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Ada Lovelace&amp;quot;, &amp;quot;gimusi&amp;quot;, &amp;quot;1815 m. gruodžio 10 d.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Albertas Einšteinas&amp;quot;, &amp;quot;gimęs&amp;quot;, &amp;quot;1879 m. kovo 14 d.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print((&amp;quot;Styvas Džobsas&amp;quot;), (&amp;quot;gimęs&amp;quot;), (&amp;quot;1955 m. vasario 24 d.&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
2. Parašyk programą, kuri parodytų visų 7 [[#Aritmetinės_išraiškos|artimetinių operacijų]] panaudojimą.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas #2 &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;5**5 =&amp;quot;, 5**5)&lt;br /&gt;
print(&amp;quot;6*7 =&amp;quot;, 6*7)&lt;br /&gt;
print(&amp;quot;56/8 =&amp;quot;, 56/8)&lt;br /&gt;
print(&amp;quot;14//6 =&amp;quot;, 14//6)&lt;br /&gt;
print(&amp;quot;14%6 =&amp;quot;, 14%6)&lt;br /&gt;
print(&amp;quot;5+6 =&amp;quot;, 5+6)&lt;br /&gt;
print(&amp;quot;9-0 =&amp;quot;, 9-0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
3. Parašyk programą, kuri išvestų reiškinio (2023 - 2000) * (9 + 10) reikšmę.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas #3 &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;(2023 - 2000) * (9 + 10) =&amp;quot;, (2023-2000)*(9+10))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==== Išnašos====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Įvadas |next=Kas čia eina?}}&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
	<entry>
		<id>https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Labas,_Pasauli&amp;diff=68</id>
		<title>Vadovėlis/Labas, Pasauli</title>
		<link rel="alternate" type="text/html" href="https://wiki.pitonas.lt/index.php?title=Vadov%C4%97lis/Labas,_Pasauli&amp;diff=68"/>
		<updated>2023-01-03T14:22:52Z</updated>

		<summary type="html">&lt;p&gt;Monika: Pridėta trečia užduotis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Now for our first lesson, what is a computer program?  A computer program is a set of very detailed instructions that tell a computer what to do.   --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Įvadas |next=Kas čia eina?}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ką sužinosi? ===&lt;br /&gt;
Perskaitęs šį skyrių, turėtum suprasti kaip teksto redaktoriumi rašyti programas, kaip parašytas programas išsaugoti kompiuterio atmintyje ir kaip jas paleisti.&lt;br /&gt;
&lt;br /&gt;
=== Spausdinimas ===&lt;br /&gt;
Istoriškai taip jau susiklostė, kad programavimo pamokos dažniausiai prasideda nuo mažos ir paprastos programėlės pavadinimu „Labas, Pasauli!“ arba angliškai „Hello, World!“.&lt;br /&gt;
&lt;br /&gt;
[[Vaizdas:Labas, pasauli.png|600px|frameless|center]]&lt;br /&gt;
&lt;br /&gt;
Python&#039;o programavimo kalboje programa atrodytų taip: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Labas, Pasauli!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Programavimas kodo redaktoriumi ====&lt;br /&gt;
&lt;br /&gt;
Programavimui rekomenduoju naudoti kodo redaktorių &amp;lt;code&amp;gt;LR NŠA Python&amp;lt;/code&amp;gt;, kaip aprašytą skyriuje [[Python Vadovėlis/Įvadas#Python_ir_Visual_Studio_Code_diegimas|Python ir Visual Studio Code diegimas]]. Savo kompiuteryje atsidaryk šią programavimo aplinką, sukurk naują failą (File -&amp;gt; New File arba Failas -&amp;gt; Naujas failas), įkopijuok šį kodą ir tuomet failą išsaugok (File -&amp;gt; Save arba Failas -&amp;gt; Išsaugoti) pavadinimu &amp;lt;code&amp;gt;labas.py&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Sveikiname! Sukūrei savo pirmą Python programą.&lt;br /&gt;
&lt;br /&gt;
(Jeigu tokios programavimo aplinkos įsidiegti savo kompiuteryje negali, žr. kitą žingsnį).&lt;br /&gt;
&lt;br /&gt;
Dabar parašytą programą paleisk vykdyti: tiesiog paspausk žalią mygtuką dešinėje viršuje.&lt;br /&gt;
&lt;br /&gt;
Kai paleisi šią programą, ji suveiks ir terminale atsiras užrašas:&lt;br /&gt;
&lt;br /&gt;
 Labas, Pasauli!&lt;br /&gt;
&lt;br /&gt;
==== Alternatyvus būdas: Programavimas paprastu teksto redaktoriumi ====&lt;br /&gt;
&lt;br /&gt;
Jeigu kodo redaktoriaus negali įsidiegti savo kompiuteryje dėl kokių nors priežasčių, programuoti galima ir tiesiog paprasčiausiu teksto redaktoriumi, pvz. Notepad.  &lt;br /&gt;
&lt;br /&gt;
Tiesiog sukurk naują paprastą tekstinį failą (.txt), jame įrašyk programinį kodą &amp;lt;code&amp;gt;print(&amp;quot;Labas, Pasauli!&amp;quot;)&amp;lt;/code&amp;gt;, failą išsaugok pavadinimu &amp;lt;code&amp;gt;labas.py&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Dabar parašytą programą paleisk vykdyti, tiesiog konsolėje parašęs &amp;lt;code&amp;gt;python3 labas.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tavo programa parašys: &lt;br /&gt;
&lt;br /&gt;
 Labas, Pasauli!&lt;br /&gt;
&lt;br /&gt;
=== Eime toliau ===&lt;br /&gt;
&lt;br /&gt;
Labai rekomenduoju kiekvieną programos pavyzdį pasibandyti pačiam - parašyk ir tada pasileisk programą. Mūsų praktikoje toks mokymosi procesas yra pats efektyviausias ir veiksmingiausias.&lt;br /&gt;
&lt;br /&gt;
Na, o dabar keliaukime prie kiek sudėtingesnės programos pavyzdžio:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Gyveno kadaise Paryžiuj bobutė –&amp;quot;)&lt;br /&gt;
print(&amp;quot;Prie Eifelio bokšto turėjo ji butą.&amp;quot;)&lt;br /&gt;
print(&amp;quot;Ji visko pasauly klausytis norėjo,&amp;quot;)&lt;br /&gt;
print(&amp;quot;Bet viena kairiąja ausim tegirdėjo.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kai paleidi šią programą, ji parašo J. Erlicko eilėraščio Bobutė iš Paryžiaus (2) ištrauką:&lt;br /&gt;
&lt;br /&gt;
 Gyveno kadaise Paryžiuj bobutė –&lt;br /&gt;
 Prie Eifelio bokšto turėjo ji butą.&lt;br /&gt;
 Ji visko pasauly klausytis norėjo,&lt;br /&gt;
 Bet viena kairiąja ausim tegirdėjo.&lt;br /&gt;
&lt;br /&gt;
Kai kompiuteris paleidžia programą, pirmiausia jis mato:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Gyveno kadaise Paryžiuj bobutė –&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Todėl kompiuteris užrašo:&lt;br /&gt;
&lt;br /&gt;
 Gyveno kadaise Paryžiuj bobutė –&lt;br /&gt;
&lt;br /&gt;
Tada kompiuteris skaito kitą eilutę ir mato:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Prie Eifelio bokšto turėjo ji butą.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Todėl ir ją užrašo kompiuterio ekrane:&lt;br /&gt;
&lt;br /&gt;
 Prie Eifelio bokšto turėjo ji butą.&lt;br /&gt;
&lt;br /&gt;
Taip kompiuteris žiūri į kiekvieną eilutę *iš eilės*, ir ją įvykdęs - eina toliau: skaito kitą eilutę, ją įvykdo ir t.t. Taip kompiuteris vykdo visas surašytas komandas, kol pasiekia programos pabaigą.&lt;br /&gt;
&lt;br /&gt;
==== Terminologija ====&lt;br /&gt;
Taigi pats laikas truputį paaiškinti, kas vyksta ir trumpai supažindinti su terminologija.&lt;br /&gt;
&lt;br /&gt;
Prieš tai rašydami kodą, mes naudojame „funkciją“ pavadinimu &amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt;. Po funkcijos pavadinimo &amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt; rašomi skliausteliai &amp;lt;code&amp;gt;()&amp;lt;/code&amp;gt;, kuriuose nurodome tos funkcijos parametrus/argumentus. Pažiūrėk į pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Labas, Pasauli!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
funkcijai duodamas vienas parametras, kuris yra &amp;lt;code&amp;gt;&amp;quot;Labas, Pasauli!&amp;quot;&amp;lt;/code&amp;gt;. Ar pastebėjai, kad šis parametras, sudarytas iš simbolių grupės, kuri įrašyta tarp dviejų kabučių (&amp;quot;&amp;quot;)? Programuotojai tai vadina „rašytinių simbolių seka“ ar trumpiau tariant „eilute“ (tekstine reikšme, angliškai &#039;string&#039;). Kitas tekstinės reikšmės pavyzdys yra &amp;lt;code&amp;gt;&amp;quot;Gyveno kadaise Paryžiuj bobutė&amp;quot;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Užrašyta funkcija su argumentais yra komanda, kurią supranta Python&#039;as. Sakinio pavyzdys:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Labas, Pasauli!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Paprasčiau tariant, komandą gali įsivaizduoti kaip vieną programos eilutę.  &lt;br /&gt;
&lt;br /&gt;
Kol kas terminologijos pakaks, keliaujam į kitą poskyrį ir mokomės toliau.&lt;br /&gt;
&lt;br /&gt;
====Ženklo \n naudojimas====&lt;br /&gt;
&amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; (kaitos ženklas, angliškai - escape character), arba nauja eilutė. Rašant tekstą, visas tekstas po \n yra užrašomas naujoje eilutėje. Pabandyk suprasti šią programą:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Labas, Pasauli!\nKą turėčiau daryti?&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kurios rezultatas yra toks:&lt;br /&gt;
&lt;br /&gt;
 Labas, Pasauli! &lt;br /&gt;
 Ką turėčiau daryti?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; naudojamas, kai norime tekstą perkelti į kitą eilutę, bet nenorime naudoti kelių &amp;lt;code&amp;gt;print()&amp;lt;/code&amp;gt; komandų.&lt;br /&gt;
&lt;br /&gt;
Spausdinimo komanda automatiškai naudoja &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;, t.y. kiekviena komanda tekstą spausdina vis naujoje eilutėje, net jeigu pats &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; ir neužrašai. Paprasčiau suprasti bus pamačius pavyzdį:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Labas, Pasauli!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
iš tikrųjų yra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Labas, Pasauli!\n&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Aritmetinės operacijos ===&lt;br /&gt;
Programos pavyzdys:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;2 + 2 yra&amp;quot;, 2 + 2)&lt;br /&gt;
print(&amp;quot;3 * 4 yra&amp;quot;, 3 * 4)&lt;br /&gt;
print(&amp;quot;100 - 1 yra&amp;quot;, 100 - 1)&lt;br /&gt;
# Atkreipk dėmesį, python&#039;e aritmetikoje skaičiai po kablelio rašomi su tašku (.)&lt;br /&gt;
print(&amp;quot;((33 + 2) / 5 + 11.5 yra&amp;quot;, (33 + 2) / 5 + 11.5)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas:&lt;br /&gt;
&lt;br /&gt;
 2 + 2 yra 4&lt;br /&gt;
 3 * 4 yra 12&lt;br /&gt;
 100 - 1 yra 99&lt;br /&gt;
 (33 + 2) / 5 + 11.5 yra 18.5&lt;br /&gt;
&lt;br /&gt;
==== Aritmetinės išraiškos ====&lt;br /&gt;
&lt;br /&gt;
Šiame pavyzdyje, rašymo funkcija &amp;lt;code&amp;gt;print()&amp;lt;/code&amp;gt; yra su dvejais argumentais, kurie atskirti kableliu. Panagrinėkime pirmoje eilutėje užrašytą komandą:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;2 + 2 yra&amp;quot;, 2 + 2)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pirmas argumentas yra teksto eilutė &amp;lt;code&amp;gt;&amp;quot;2 + 2 yra&amp;quot;&amp;lt;/code&amp;gt; ir antras argumentas yra aritmetinė išraiška &amp;lt;code&amp;gt;2 + 2&amp;lt;/code&amp;gt;, tiksliau tariant viena iš aritmetinių operacijų.&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad eilutė, kuri yra užrašyta kabutėse yra atspausdinama kaip tekstas, o išraiška užrašyta be kabučių yra apskaičiuojama ir užrašomas atsakymas.&lt;br /&gt;
&lt;br /&gt;
Python&#039;o programavimo kalba turi septynias pagrindines skaičių operacijas.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Operacija &lt;br /&gt;
! Simbolis &lt;br /&gt;
! Pavyzdys&lt;br /&gt;
|-&lt;br /&gt;
|Kėlimas laipsniu  &lt;br /&gt;
| &amp;lt;code&amp;gt;**&amp;lt;/code&amp;gt; &lt;br /&gt;
| &amp;lt;code&amp;gt;5 ** 2 == 25&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Daugyba &lt;br /&gt;
| &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; &lt;br /&gt;
|&amp;lt;code&amp;gt;2 * 3 == 6&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Dalyba &lt;br /&gt;
| &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; &lt;br /&gt;
| &amp;lt;code&amp;gt;14 / 3 == 4.666666666666667&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|Sveikųjų skaičių dalyba&lt;br /&gt;
| &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;14 // 3 == 4&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Liekana&lt;br /&gt;
| &amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt; &lt;br /&gt;
| &amp;lt;code&amp;gt;14 % 3 == 2&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|Sudėtis&lt;br /&gt;
| &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; &lt;br /&gt;
| &amp;lt;code&amp;gt;1 + 2 == 3&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|Atimtis &lt;br /&gt;
| &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; &lt;br /&gt;
| &amp;lt;code&amp;gt;4 - 3 == 1&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad yra trys dalybos būdai: vienas grąžina dešimtainį skaičių, antras – tik dalybos sveikąją dalį, o trečias – liekaną.&lt;br /&gt;
Operacijų tvarka tokia pati kaip matematikoje:&lt;br /&gt;
* pirmiausiai atliekami veiksmai skliausteliuose &amp;lt;code&amp;gt;()&amp;lt;/code&amp;gt;&lt;br /&gt;
* kėlimas laipsniu &amp;lt;code&amp;gt;**&amp;lt;/code&amp;gt;&lt;br /&gt;
* iš kairės į dešinę: daugyba &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;, dalyba&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;, sveikoji dalyba &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;, dalybos liekana &amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt; &lt;br /&gt;
* iš kairės į dešinę: sudėtis &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; ir atimtis &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Taigi, užrašydamas formules, nepamiršk skliaustelių!&lt;br /&gt;
&lt;br /&gt;
=== Komentarai ===&lt;br /&gt;
&lt;br /&gt;
Rašant daug kodo, ateityje tikrai ne viską atsiminsi. Todėl programoje gali naudoti komentarus, kurie yra tiesiog pastabos/paaiškinimai sau pačiam arba kitiems programuotojams. Pavyzdžiui:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Skaičiaus PI išraiška kompiuterio ekrane&lt;br /&gt;
print(22 / 7)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas: &lt;br /&gt;
&lt;br /&gt;
 3.14285714286&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį, kad komentaras prasideda grotelių ženklu: &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;. Komentarai yra skirti žmonėms, pagerinti programos skaitomumą. &lt;br /&gt;
&lt;br /&gt;
Taip pat svarbu suprasti, kad po &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; galima naudoti bet kokius ženklus ir kompiuteris visą šį tekstą ignoruos iki pat eilutės galo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang = &amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Skaičiaus PI išraiška kompiuterio ekrane&lt;br /&gt;
print(22/7) # tokiu būdu gauname tik apytikslę PI reikšmę&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pavyzdžiai ===&lt;br /&gt;
Kiekvieno skyriaus gale bus pateikiami su skyriaus tema susiję pavyzdžiai. Turėtum juos peržvelgti ir išsiaiškinti ar supratai. Taip pat juos gali įsikelti į python&#039;o kodo redaktorių ir pažiūrėti kaip viekia. Jeigu suprasi, keliauk toliau, jeigu ne, bandyk dar kartą perskaityti skyriaus medžiagą ir suprasti pavyzdžių logiką.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Danija.py&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Būti ar nebūti, štai kur klausimas.&amp;quot;)&lt;br /&gt;
print(&amp;quot;                -- Šekspyras&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas:&lt;br /&gt;
&lt;br /&gt;
 Būti ar nebūti, štai kur klausimas.&lt;br /&gt;
                 -- Šekspyras&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mokykla.py&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Pirmoji klasė&amp;quot;)&lt;br /&gt;
print(&amp;quot;1 + 1 =&amp;quot;, 1 + 1)&lt;br /&gt;
print(&amp;quot;2 + 4 =&amp;quot;, 2 + 4)&lt;br /&gt;
print(&amp;quot;5 - 2 =&amp;quot;, 5 - 2)&lt;br /&gt;
print()&lt;br /&gt;
print(&amp;quot;Trečioji klasė&amp;quot;)&lt;br /&gt;
print(&amp;quot;243 - 23 =&amp;quot;, 243 - 23)&lt;br /&gt;
print(&amp;quot;12 * 4 =&amp;quot;, 12 * 4)&lt;br /&gt;
print(&amp;quot;12 / 3 =&amp;quot;, 12 / 3)&lt;br /&gt;
print(&amp;quot;13 / 3 =&amp;quot;, 13 // 3, &amp;quot;liekana&amp;quot;, 13 % 3)&lt;br /&gt;
print()&lt;br /&gt;
print(&amp;quot;Penktoji klasė&amp;quot;)&lt;br /&gt;
print(&amp;quot;123.56 - 62.12 =&amp;quot;, 123.56 - 62.12)&lt;br /&gt;
print(&amp;quot;(4 + 3) * 2 =&amp;quot;, (4 + 3) * 2)&lt;br /&gt;
print(&amp;quot;4 + 3 * 2 =&amp;quot;, 4 + 3 * 2)&lt;br /&gt;
print(&amp;quot;3 ** 2 =&amp;quot;, 3 ** 2)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezultatas:&lt;br /&gt;
&lt;br /&gt;
 Pirma klasė&lt;br /&gt;
 1 + 1 = 2&lt;br /&gt;
 2 + 4 = 6&lt;br /&gt;
 5 - 2 = 3&lt;br /&gt;
 &lt;br /&gt;
 Trečia klasė&lt;br /&gt;
 243 - 23 = 220&lt;br /&gt;
 12 * 4 = 48&lt;br /&gt;
 12 / 3 = 4&lt;br /&gt;
 13 / 3 = 4 liekana 1&lt;br /&gt;
 &lt;br /&gt;
 Penktoji klasė&lt;br /&gt;
 123.56 - 62.12 = 61.44&lt;br /&gt;
 (4 + 3) * 2 = 14&lt;br /&gt;
 4 + 3 * 2 = 10&lt;br /&gt;
 3 ** 2 = 9&lt;br /&gt;
&lt;br /&gt;
=== Pratimai ===&lt;br /&gt;
&lt;br /&gt;
1. Parašyk programą, kuri atspausdintų tavo vardą, pavardę ir gimtadienį kaip atskiras eilutes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas #1 &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Ada Lovelace&amp;quot;, &amp;quot;gimusi&amp;quot;, &amp;quot;1815 m. gruodžio 10 d.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Albertas Einšteinas&amp;quot;, &amp;quot;gimęs&amp;quot;, &amp;quot;1879 m. kovo 14 d.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print((&amp;quot;Styvas Džobsas&amp;quot;), (&amp;quot;gimęs&amp;quot;), (&amp;quot;1955 m. vasario 24 d.&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
2. Parašyk programą, kuri parodytų visų 7 [[#Aritmetinės_išraiškos|artimetinių operacijų]] panaudojimą.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas #2 &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;5**5 =&amp;quot;, 5**5)&lt;br /&gt;
print(&amp;quot;6*7 =&amp;quot;, 6*7)&lt;br /&gt;
print(&amp;quot;56/8 =&amp;quot;, 56/8)&lt;br /&gt;
print(&amp;quot;14//6 =&amp;quot;, 14//6)&lt;br /&gt;
print(&amp;quot;14%6 =&amp;quot;, 14%6)&lt;br /&gt;
print(&amp;quot;5+6 =&amp;quot;, 5+6)&lt;br /&gt;
print(&amp;quot;9-0 =&amp;quot;, 9-0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
3. Parašyk programą, kuri išvestų reiškinio (2023 - 2000) * (9 + 10) reikšmę.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | Sprendimas #3 &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print &amp;quot;(2023 - 2000) * (9 + 10) =&amp;quot;, (2023-2000)*(9+10)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==== Išnašos====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Įvadas |next=Kas čia eina?}}&lt;/div&gt;</summary>
		<author><name>Monika</name></author>
	</entry>
</feed>