<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="lt">
	<id>https://wiki.angis.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=MindaugasP</id>
	<title>wiki.angis.net - Naudotojo indėlis [lt]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.angis.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=MindaugasP"/>
	<link rel="alternate" type="text/html" href="https://wiki.angis.net/w/Specialus:Ind%C4%97lis/MindaugasP"/>
	<updated>2026-05-03T09:13:06Z</updated>
	<subtitle>Naudotojo indėlis</subtitle>
	<generator>MediaWiki 1.35.0</generator>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Rekursin%C4%97s_funkcijos&amp;diff=4211</id>
		<title>Python Vadovėlis/Rekursinės funkcijos</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Rekursin%C4%97s_funkcijos&amp;diff=4211"/>
		<updated>2022-08-05T07:07:12Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: sprendimo patikslinimas&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'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;
; ''Klausimas:'' Ką pirmiausia daro programa?&lt;br /&gt;
: ''Atsakymas:'' 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;
'''faktorialas.py'''&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;
'''atgalinis_skaičiavimas.py'''&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;
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;
{{navigation |previous=Funkcijų apibrėžimas |next=Sąrašai}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Ciklai_For&amp;diff=4210</id>
		<title>Python Vadovėlis/Ciklai For</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Ciklai_For&amp;diff=4210"/>
		<updated>2022-08-05T07:05:31Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: sprendimo patikslinimas&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;
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; '''range(1, 10)'''&lt;br /&gt;
 range(1, 10)&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''list(range(1, 10))'''&lt;br /&gt;
 [1, 2, 3, 4, 5, 6, 7, 8, 9]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''list(range(-32, -20))'''&lt;br /&gt;
 [-32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''list(range(5,21))'''&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; '''list(range(5))'''&lt;br /&gt;
 [0, 1, 2, 3, 4]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''list(range(21, 5))'''&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'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;
'''Pirma iteracija:'''&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;
'''Antra iteracija:'''&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;
'''Trečia iteracija:'''&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;
Sukurk naują sarašą, kuris turėtų tik skaičiaus 3 daliklius (skaičius turi dalintis iš 3) iš 'x' sąrašo ir tik skaičiaus 5 daliklius iš 'y' 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;
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('*'*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;
{{navigation |previous=Sąrašai |next=Loginiai reiškiniai}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Ciklai_For&amp;diff=4209</id>
		<title>Python Vadovėlis/Ciklai For</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Ciklai_For&amp;diff=4209"/>
		<updated>2022-08-04T22:13:59Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: sprendimo pataisymas&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;
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; '''range(1, 10)'''&lt;br /&gt;
 range(1, 10)&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''list(range(1, 10))'''&lt;br /&gt;
 [1, 2, 3, 4, 5, 6, 7, 8, 9]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''list(range(-32, -20))'''&lt;br /&gt;
 [-32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''list(range(5,21))'''&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; '''list(range(5))'''&lt;br /&gt;
 [0, 1, 2, 3, 4]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''list(range(21, 5))'''&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'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;
'''Pirma iteracija:'''&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;
'''Antra iteracija:'''&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;
'''Trečia iteracija:'''&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;
Sukurk naują sarašą, kuris turėtų tik skaičiaus 3 daliklius (skaičius turi dalintis iš 3) iš 'x' sąrašo ir tik skaičiaus 5 daliklius iš 'y' 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;
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 spausdintiEglute(aukstis):&lt;br /&gt;
    for i in range(1, aukstis + 1):&lt;br /&gt;
        print('*'*i)&lt;br /&gt;
&lt;br /&gt;
spausdintiEglute(3)&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>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Ciklai_For&amp;diff=4208</id>
		<title>Python Vadovėlis/Ciklai For</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Ciklai_For&amp;diff=4208"/>
		<updated>2022-08-04T22:12:01Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: sprendimas&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;
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; '''range(1, 10)'''&lt;br /&gt;
 range(1, 10)&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''list(range(1, 10))'''&lt;br /&gt;
 [1, 2, 3, 4, 5, 6, 7, 8, 9]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''list(range(-32, -20))'''&lt;br /&gt;
 [-32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''list(range(5,21))'''&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; '''list(range(5))'''&lt;br /&gt;
 [0, 1, 2, 3, 4]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''list(range(21, 5))'''&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'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;
'''Pirma iteracija:'''&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;
'''Antra iteracija:'''&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;
'''Trečia iteracija:'''&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;
Sukurk naują sarašą, kuris turėtų tik skaičiaus 3 daliklius (skaičius turi dalintis iš 3) iš 'x' sąrašo ir tik skaičiaus 5 daliklius iš 'y' 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;
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 spausdintiEglute(aukstis):&lt;br /&gt;
    for i in range(1, aukstis + 1):&lt;br /&gt;
        print(*'*'*i)&lt;br /&gt;
&lt;br /&gt;
 spausdintiEglute(3)&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>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Rekursin%C4%97s_funkcijos&amp;diff=4207</id>
		<title>Python Vadovėlis/Rekursinės funkcijos</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Rekursin%C4%97s_funkcijos&amp;diff=4207"/>
		<updated>2022-08-04T21:58:29Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: uzduoties atsakymas&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'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;
; ''Klausimas:'' Ką pirmiausia daro programa?&lt;br /&gt;
: ''Atsakymas:'' 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;
'''faktorialas.py'''&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;
'''atgalinis_skaičiavimas.py'''&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;
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(skaicius, laipsnis):&lt;br /&gt;
    if laipsnis == 0:&lt;br /&gt;
        return 1&lt;br /&gt;
    return skaicius * keltiLaipsniu(skaicius, 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;
{{navigation |previous=Funkcijų apibrėžimas |next=Sąrašai}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C5%BDodynai&amp;diff=4206</id>
		<title>Python Vadovėlis/Žodynai</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C5%BDodynai&amp;diff=4206"/>
		<updated>2022-08-04T11:03:41Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: funkcijos detales&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('1. Spausdink telefonų numerius')&lt;br /&gt;
    print('2. Pridėk telefono numerį')&lt;br /&gt;
    print('3. Pašalink telefono numerį')&lt;br /&gt;
    print('4. Ieškok telefono numerio')&lt;br /&gt;
    print('5. Išeik')&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): '''2'''&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: '''Benas'''&lt;br /&gt;
 Telefono numeris: '''869935951'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''2'''&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: '''Liepa'''&lt;br /&gt;
 Telefono numeris: '''869935952'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''2'''&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: '''Markas'''&lt;br /&gt;
 Telefono numeris: '''869935957'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''1'''&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): '''4'''&lt;br /&gt;
 Ieškok telefono numerio&lt;br /&gt;
 Vardas: '''Benas'''&lt;br /&gt;
 Telefono numeris yra 869935951&lt;br /&gt;
 Įvesk skaičių (1-5): '''3'''&lt;br /&gt;
 Pašalink telefono numerį&lt;br /&gt;
 Vardas: '''Markas'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''1'''&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): '''5'''&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'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 = ['nd sk 1', 'nd sk 2', 'viktorina   ', 'nd sk 3', 'testas']&lt;br /&gt;
mokiniai = {'#Max': 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('\t', end=' ')&lt;br /&gt;
    for i in range(len(užduotys)):&lt;br /&gt;
        print(užduotys[i], '\t', end=' ')&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, '\t', end=' ')&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], '\t', end=' ')&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], '\t', end=' ')&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): '''3'''&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): '''5'''&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): '''1'''&lt;br /&gt;
 Pridėk mokinį: '''Markas'''&lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): '''4'''&lt;br /&gt;
 Įrašyk pažymį&lt;br /&gt;
 Mokinys: '''Markas'''&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į: '''1'''&lt;br /&gt;
 Pažymys: '''25'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''2'''&lt;br /&gt;
 Pažymys: '''24'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''3'''&lt;br /&gt;
 Pažymys: '''45'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''4'''&lt;br /&gt;
 Pažymys: '''23'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''5'''&lt;br /&gt;
 Pažymys: '''95'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''0'''&lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): '''3'''&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): '''6'''&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 = {'#Max': 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('\t',end=&amp;quot; &amp;quot;)&lt;br /&gt;
    for i in range(len(užduotys)):&lt;br /&gt;
        print(užduotys[i], '\t',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, '\t',end=' ')&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;
=== Pratimai ===&lt;br /&gt;
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 'enter' 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>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C5%BDodynai&amp;diff=4205</id>
		<title>Python Vadovėlis/Žodynai</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C5%BDodynai&amp;diff=4205"/>
		<updated>2022-08-04T11:01:13Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: funkcijos pavadinimas&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('1. Spausdink telefonų numerius')&lt;br /&gt;
    print('2. Pridėk telefono numerį')&lt;br /&gt;
    print('3. Pašalink telefono numerį')&lt;br /&gt;
    print('4. Ieškok telefono numerio')&lt;br /&gt;
    print('5. Išeik')&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): '''2'''&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: '''Benas'''&lt;br /&gt;
 Telefono numeris: '''869935951'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''2'''&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: '''Liepa'''&lt;br /&gt;
 Telefono numeris: '''869935952'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''2'''&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: '''Markas'''&lt;br /&gt;
 Telefono numeris: '''869935957'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''1'''&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): '''4'''&lt;br /&gt;
 Ieškok telefono numerio&lt;br /&gt;
 Vardas: '''Benas'''&lt;br /&gt;
 Telefono numeris yra 869935951&lt;br /&gt;
 Įvesk skaičių (1-5): '''3'''&lt;br /&gt;
 Pašalink telefono numerį&lt;br /&gt;
 Vardas: '''Markas'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''1'''&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): '''5'''&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'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 = ['nd sk 1', 'nd sk 2', 'viktorina   ', 'nd sk 3', 'testas']&lt;br /&gt;
mokiniai = {'#Max': 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('\t', end=' ')&lt;br /&gt;
    for i in range(len(užduotys)):&lt;br /&gt;
        print(užduotys[i], '\t', end=' ')&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, '\t', end=' ')&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], '\t', end=' ')&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], '\t', end=' ')&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): '''3'''&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): '''5'''&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): '''1'''&lt;br /&gt;
 Pridėk mokinį: '''Markas'''&lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): '''4'''&lt;br /&gt;
 Įrašyk pažymį&lt;br /&gt;
 Mokinys: '''Markas'''&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į: '''1'''&lt;br /&gt;
 Pažymys: '''25'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''2'''&lt;br /&gt;
 Pažymys: '''24'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''3'''&lt;br /&gt;
 Pažymys: '''45'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''4'''&lt;br /&gt;
 Pažymys: '''23'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''5'''&lt;br /&gt;
 Pažymys: '''95'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''0'''&lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): '''3'''&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): '''6'''&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 = {'#Max': 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('\t',end=&amp;quot; &amp;quot;)&lt;br /&gt;
    for i in range(len(užduotys)):&lt;br /&gt;
        print(užduotys[i], '\t',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, '\t',end=' ')&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;
=== Pratimai ===&lt;br /&gt;
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 'enter' 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>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C5%BDodynai&amp;diff=4203</id>
		<title>Python Vadovėlis/Žodynai</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C5%BDodynai&amp;diff=4203"/>
		<updated>2022-08-04T10:48:54Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: Sprendimas&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('1. Spausdink telefonų numerius')&lt;br /&gt;
    print('2. Pridėk telefono numerį')&lt;br /&gt;
    print('3. Pašalink telefono numerį')&lt;br /&gt;
    print('4. Ieškok telefono numerio')&lt;br /&gt;
    print('5. Išeik')&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): '''2'''&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: '''Benas'''&lt;br /&gt;
 Telefono numeris: '''869935951'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''2'''&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: '''Liepa'''&lt;br /&gt;
 Telefono numeris: '''869935952'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''2'''&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: '''Markas'''&lt;br /&gt;
 Telefono numeris: '''869935957'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''1'''&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): '''4'''&lt;br /&gt;
 Ieškok telefono numerio&lt;br /&gt;
 Vardas: '''Benas'''&lt;br /&gt;
 Telefono numeris yra 869935951&lt;br /&gt;
 Įvesk skaičių (1-5): '''3'''&lt;br /&gt;
 Pašalink telefono numerį&lt;br /&gt;
 Vardas: '''Markas'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''1'''&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): '''5'''&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'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 = ['nd sk 1', 'nd sk 2', 'viktorina   ', 'nd sk 3', 'testas']&lt;br /&gt;
mokiniai = {'#Max': 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('\t', end=' ')&lt;br /&gt;
    for i in range(len(užduotys)):&lt;br /&gt;
        print(užduotys[i], '\t', end=' ')&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, '\t', end=' ')&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], '\t', end=' ')&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], '\t', end=' ')&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): '''3'''&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): '''5'''&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): '''1'''&lt;br /&gt;
 Pridėk mokinį: '''Markas'''&lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): '''4'''&lt;br /&gt;
 Įrašyk pažymį&lt;br /&gt;
 Mokinys: '''Markas'''&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į: '''1'''&lt;br /&gt;
 Pažymys: '''25'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''2'''&lt;br /&gt;
 Pažymys: '''24'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''3'''&lt;br /&gt;
 Pažymys: '''45'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''4'''&lt;br /&gt;
 Pažymys: '''23'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''5'''&lt;br /&gt;
 Pažymys: '''95'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''0'''&lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): '''3'''&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): '''6'''&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 = {'#Max': 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('\t',end=&amp;quot; &amp;quot;)&lt;br /&gt;
    for i in range(len(užduotys)):&lt;br /&gt;
        print(užduotys[i], '\t',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, '\t',end=' ')&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;
=== Pratimai ===&lt;br /&gt;
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;
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 'enter' 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 lang=&amp;quot;python&amp;quot;&amp;gt;&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>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AE%C5%BEanga&amp;diff=3951</id>
		<title>Python Vadovėlis/Įžanga</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AE%C5%BEanga&amp;diff=3951"/>
		<updated>2022-05-19T15:07:23Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Autoriai|next=Įvadas}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Visi pavyzdiniai Python kodai šiame vadovėlyje yra skirti viešam naudojimui (angl. public domain). Jūs galite bet kaip keisti ir platinti modifikuotus kodus, naudojant bet kokią norimą licenciją (nebūtinai Creative Commons Attribution-ShareAlike).  &lt;br /&gt;
&lt;br /&gt;
Šis vadovėlis sukurtas knygos &amp;quot;Non-Programmer's Tutorial for Python&amp;quot; pagrindu. Panašūs vertimai sukurti anglų, korėjiečių, ispanų, italų, graikų ir kitomis kalbomis, žr. [http://jjc.freeshell.org/easytut/ http://jjc.freeshell.org/easytut/]  &lt;br /&gt;
&lt;br /&gt;
Šis vadovėlis yra įvadas į Python programavimo kalbą. Skirtas neturintiems ar turintiems kiek mažiau programavimo žinių.&lt;br /&gt;
&lt;br /&gt;
Tokiu atveju, jeigu jau esi programavęs kokia nors kita programavimo kalba ir ją esi gerai įvaldęs, vietoje šio vadovėlio siūlau kitą resursą - [https://docs.python.org/3/tutorial/index.html Python Tutorial for Programmers], kurį parašė Gvidas van Rosumas (Guido van Rossum).  &lt;br /&gt;
&lt;br /&gt;
Jei turi klausimų ar komentarų, naudokis šio portalo diskusijų puslapiais, arba susisiek su [https://wiki.angis.net/w/Vadov%C4%97lis/Autoriai autoriais]. Visi klausimai ir pasiūlymai labai laukiami. Bandysime atsakyti kaip įmanoma greičiau.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Kiti resursų puslapiai (anglų kalba) ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.python.org Python Home Page]&lt;br /&gt;
* [https://docs.python.org/3/ Python 3 Documentation]&lt;br /&gt;
* [http://www.swaroopch.com/notes/python A Byte of Python by Swaroop C H]&lt;br /&gt;
* [http://python3porting.com/ Porting to Python 3: An in-depth guide]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Autoriai|next=Įvadas}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AE%C5%BEanga&amp;diff=3950</id>
		<title>Python Vadovėlis/Įžanga</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AE%C5%BEanga&amp;diff=3950"/>
		<updated>2022-05-19T15:07:09Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Autoriai|next=Įvadas}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Visi pavyzdiniai Python kodai šiame vadovėlyje yra skirti viešam naudojimui (angl. public domain). Jūs galite bet kaip keisti ir platinti modifikuotus kodus, naudojant bet kokią norimą licenciją (nebūtinai Creative Commons Attribution-ShareAlike).  &lt;br /&gt;
&lt;br /&gt;
Šis vadovėlis sukurtas knygos &amp;quot;Non-Programmer's Tutorial for Python&amp;quot; pagrindu. Panašūs vertimai sukurti anglų, korėjiečių, ispanų, italų, graikų ir kitomis kalbomis, žr. [http://jjc.freeshell.org/easytut/ http://jjc.freeshell.org/easytut/]  &lt;br /&gt;
&lt;br /&gt;
Šis vadovėlis yra įvadas į Python programavimo kalbą. Skirtas neturintiems ar turintiems mažiau programavimo žinių.&lt;br /&gt;
&lt;br /&gt;
Tokiu atveju, jeigu jau esi programavęs kokia nors kita programavimo kalba ir ją esi gerai įvaldęs, vietoje šio vadovėlio siūlau kitą resursą - [https://docs.python.org/3/tutorial/index.html Python Tutorial for Programmers], kurį parašė Gvidas van Rosumas (Guido van Rossum).  &lt;br /&gt;
&lt;br /&gt;
Jei turi klausimų ar komentarų, naudokis šio portalo diskusijų puslapiais, arba susisiek su [https://wiki.angis.net/w/Vadov%C4%97lis/Autoriai autoriais]. Visi klausimai ir pasiūlymai labai laukiami. Bandysime atsakyti kaip įmanoma greičiau.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Kiti resursų puslapiai (anglų kalba) ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.python.org Python Home Page]&lt;br /&gt;
* [https://docs.python.org/3/ Python 3 Documentation]&lt;br /&gt;
* [http://www.swaroopch.com/notes/python A Byte of Python by Swaroop C H]&lt;br /&gt;
* [http://python3porting.com/ Porting to Python 3: An in-depth guide]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Autoriai|next=Įvadas}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AE%C5%BEanga&amp;diff=3949</id>
		<title>Python Vadovėlis/Įžanga</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AE%C5%BEanga&amp;diff=3949"/>
		<updated>2022-05-19T15:05:09Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: autorių navigacija&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Autoriai|next=Įvadas}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Visi pavyzdiniai Python kodai šiame vadovėlyje yra skirti viešam naudojimui (angl. public domain). Jūs galite bet kaip keisti ir platinti modifikuotus kodus, naudojant bet kokią norimą licenciją (nebūtinai Creative Commons Attribution-ShareAlike).  &lt;br /&gt;
&lt;br /&gt;
Šis vadovėlis sukurtas knygos &amp;quot;Non-Programmer's Tutorial for Python&amp;quot; pagrindu. Panašūs vertimai sukurti anglų, korėjiečių, ispanų, italų, graikų ir kitomis kalbomis, žr. [http://jjc.freeshell.org/easytut/ http://jjc.freeshell.org/easytut/]  &lt;br /&gt;
&lt;br /&gt;
Šis vadovėlis yra įvadas į Python programavimo kalbą. Skirtas neturintiems ar turintiems ne daug programavimo žinių.&lt;br /&gt;
&lt;br /&gt;
Tokiu atveju, jeigu jau esi programavęs kokia nors kita programavimo kalba ir ją esi gerai įvaldęs, vietoje šio vadovėlio siūlau kitą resursą - [https://docs.python.org/3/tutorial/index.html Python Tutorial for Programmers], kurį parašė Gvidas van Rosumas (Guido van Rossum).  &lt;br /&gt;
&lt;br /&gt;
Jei turi klausimų ar komentarų, naudokis šio portalo diskusijų puslapiais, arba susisiek su [https://wiki.angis.net/w/Vadov%C4%97lis/Autoriai autoriais]. Visi klausimai ir pasiūlymai labai laukiami. Bandysime atsakyti kaip įmanoma greičiau.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Kiti resursų puslapiai (anglų kalba) ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.python.org Python Home Page]&lt;br /&gt;
* [https://docs.python.org/3/ Python 3 Documentation]&lt;br /&gt;
* [http://www.swaroopch.com/notes/python A Byte of Python by Swaroop C H]&lt;br /&gt;
* [http://python3porting.com/ Porting to Python 3: An in-depth guide]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Autoriai|next=Įvadas}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AE%C5%BEanga&amp;diff=3948</id>
		<title>Python Vadovėlis/Įžanga</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AE%C5%BEanga&amp;diff=3948"/>
		<updated>2022-05-19T15:00:39Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: žodžio korekcija&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Autoriai|next=Įvadas}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Visi pavyzdiniai Python kodai šiame vadovėlyje yra skirti viešam naudojimui (angl. public domain). Jūs galite bet kaip keisti ir platinti modifikuotus kodus, naudojant bet kokią norimą licenciją (nebūtinai Creative Commons Attribution-ShareAlike).  &lt;br /&gt;
&lt;br /&gt;
Šis vadovėlis sukurtas knygos &amp;quot;Non-Programmer's Tutorial for Python&amp;quot; pagrindu. Panašūs vertimai sukurti anglų, korėjiečių, ispanų, italų, graikų ir kitomis kalbomis, žr. [http://jjc.freeshell.org/easytut/ http://jjc.freeshell.org/easytut/]  &lt;br /&gt;
&lt;br /&gt;
Šis vadovėlis yra įvadas į Python programavimo kalbą. Skirtas neturintiems ar turintiems ne daug programavimo žinių.&lt;br /&gt;
&lt;br /&gt;
Tokiu atveju, jeigu jau esi programavęs kokia nors kita programavimo kalba ir ją esi gerai įvaldęs, vietoje šio vadovėlio siūlau kitą resursą - [https://docs.python.org/3/tutorial/index.html Python Tutorial for Programmers], kurį parašė Gvidas van Rosumas (Guido van Rossum).  &lt;br /&gt;
&lt;br /&gt;
Jei turi klausimų ar komentarų, naudokis šio portalo diskusijų puslapiais, arba susisiek su autoriais. Visi klausimai ir pasiūlymai labai laukiami. Bandysime atsakyti kaip įmanoma greičiau.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Kiti resursų puslapiai (anglų kalba) ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.python.org Python Home Page]&lt;br /&gt;
* [https://docs.python.org/3/ Python 3 Documentation]&lt;br /&gt;
* [http://www.swaroopch.com/notes/python A Byte of Python by Swaroop C H]&lt;br /&gt;
* [http://python3porting.com/ Porting to Python 3: An in-depth guide]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Autoriai|next=Įvadas}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AE%C5%BEanga&amp;diff=3947</id>
		<title>Python Vadovėlis/Įžanga</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AE%C5%BEanga&amp;diff=3947"/>
		<updated>2022-05-19T14:59:52Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: Sakinių papildymas ar jų korekcija.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Autoriai|next=Įvadas}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Visi pavyzdiniai Python kodai šiame vadovėlyje yra skirti viešam naudojimui (angl. public domain). Jūs galite bet kaip keisti ir platinti modifikuotus kodus, naudojant bet kokią norimą licenciją (nebūtinai Creative Commons Attribution-ShareAlike).  &lt;br /&gt;
&lt;br /&gt;
Šis vadovėlis sukurtas knygos &amp;quot;Non-Programmer's Tutorial for Python&amp;quot; pagrindu. Panašūs vertimai sukurti anglų, korėjiečių, ispanų, italų, graikų ir kitomis kalbomis, žr. [http://jjc.freeshell.org/easytut/ http://jjc.freeshell.org/easytut/]  &lt;br /&gt;
&lt;br /&gt;
Šis vadovėlis yra įvadas į Python programavimo kalbą. Skirtas neturintiems ir turintiems ne daug programavimo žinių.&lt;br /&gt;
&lt;br /&gt;
Tokiu atveju, jeigu jau esi programavęs kokia nors kita programavimo kalba ir ją esi gerai įvaldęs, vietoje šio vadovėlio siūlau kitą resursą - [https://docs.python.org/3/tutorial/index.html Python Tutorial for Programmers], kurį parašė Gvidas van Rosumas (Guido van Rossum).  &lt;br /&gt;
&lt;br /&gt;
Jei turi klausimų ar komentarų, naudokis šio portalo diskusijų puslapiais, arba susisiek su autoriais. Visi klausimai ir pasiūlymai labai laukiami. Bandysime atsakyti kaip įmanoma greičiau.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Kiti resursų puslapiai (anglų kalba) ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.python.org Python Home Page]&lt;br /&gt;
* [https://docs.python.org/3/ Python 3 Documentation]&lt;br /&gt;
* [http://www.swaroopch.com/notes/python A Byte of Python by Swaroop C H]&lt;br /&gt;
* [http://python3porting.com/ Porting to Python 3: An in-depth guide]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Autoriai|next=Įvadas}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3896</id>
		<title>Python Vadovėlis/Įvadas į objektinį programavimą Python 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3896"/>
		<updated>2022-03-09T10:40:57Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: Navigacija viršuje&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{navigation |previous=Rekursija|next=Įvadas į importuotas bibliotekas ir kitas funkcijas}}&lt;br /&gt;
==Objektinis programavimas==&lt;br /&gt;
&lt;br /&gt;
Iki šiol rašei kodą pagal procedūrinio programavimo taisykles. Tačiau, yra daug programų, kurios parašytos pagal objektinio programavimo taisykles. Žinoti abu programavimo tipus ir jų skirtumus yra labai svarbu. Informatikoje, daug svarbių kalbų, tokių kaip C++ ar Java, dažnai naudoja objektinio programavimo taisykles.&lt;br /&gt;
&lt;br /&gt;
Pradedantiesiems ir mokiniams, neturintiems programavimo žinių, objektinis programavimas dažnai gali atrodyti painus ir tai yra visiškai normalu. Nesijausk blogai, jei nesiseka suprasti iš pat pradžių. Jei šis skyrius nepadės tau suprasti, yra ir daugiau informatyvių šaltinių, kurie padės atsakyti į visus klausimus.&lt;br /&gt;
&lt;br /&gt;
Šis skyrius yra padalintas į keletą pamokų. Kiekviena pamoka - skirta paaiškinti skirtingas objektinio programavimo dalis. &amp;lt;b&amp;gt;LABAI SVARBU&amp;lt;/b&amp;gt; suprasti jas visas. Nepamiršk prieš kiekvieną pamoką perskaityti įžangą, kuri paaiškins pagrindines idėjas, sąvokas ir kitas objektinio programavimo sritis.&lt;br /&gt;
&lt;br /&gt;
==Įžanga==&lt;br /&gt;
&lt;br /&gt;
Tu jau žinai, kad funkcija turi konkrečią paskyrtį ir ji gali būti įvairi: rinkti įvestis, atlikti matematinius skaičiavimus, atvaizduoti ar kitaip manipuliuoti duomenimis. Paprastai, funkcijos manipuliuoja duomenimis, kurie yra aprašyti atskirai. Šie duomenys yra dažnai perduodami iš vienos funkcijos į kitą. Ir, kai programa pasidaro per didelė, tai padaro duomenų perdavimą komplikuotą.&lt;br /&gt;
Pavyzdžiui, parašei programą, kuri kintamuosiuose išsaugo produkto duomenis. Kai klientas paprašo informacijos apie produktą, reikia išrinkti visus kintamuosius, saugančius tuos duomenis ir pateikti atitinkamoms funkcijoms. Laikui bėgant ir saugant vis daugiau duomenų apie turimus produktus, tu sugalvoji išsaugoti turimą informaciją sąrašuose ar žodynuose. Norint, jog tavo programa veiktų, tu dabar turi redaguoti kiekvieną funkciją, kuri naudojo tuos kintamuosius, taip, kad dabar ji galėtų priimti ir manipuliuoti sąrašus ar žodynus. Įsivaizduok kiek laiko tau reikėtų norint peržiūrėti ir pakeisti šimtus failų. Tu išprotėtum! Nekalbant apie tai, jog klaidas daro net ir labiausiai patyrę programuotojai, tad taip pat reikėtų taisyti begalę klaidų. Toks programavimas yra pernelyg neoptimalus.&lt;br /&gt;
Procedūrinis programavimas yra paremtas funkcijomis (procedūromis). Objektinis programavimas yra paremtas objektais. Ar prisimeni, kaip procedūrinė programa atskyrė duomenis nuo kodo? Ar prisimeni programą, kuri turėjo šimtus failų ir norint kažką pakeisti reikėdavo ilgai joje narpstytis? &lt;br /&gt;
Galvok apie &amp;lt;i&amp;gt;objektą&amp;lt;/i&amp;gt; kaip apie minėtų failų ir duomenų „kombinaciją“ į vieną esybę. Technine prasme, objektas yra esybė, kuri savyje turi duomenis ir veiksmus su tais duomenimis (kodą, funkcijas, t.t.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Duomenis objekto viduje vadiname &amp;lt;i&amp;gt;atributais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Funkcijas objekto viduje vadiname &amp;lt;i&amp;gt;metodais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;duomenų atributus&amp;lt;/b&amp;gt; kaip apie kintamuosius. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;metodus&amp;lt;/b&amp;gt; kaip apie funkcijas. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėk į paprastą, kasdienį pavyzdį. Lemputė ir jungiklis tavo kambaryje.&lt;br /&gt;
Atributai bus štai tokie.&lt;br /&gt;
&lt;br /&gt;
* šviesa_įjungta (True False)&lt;br /&gt;
* jungiklio_pozicija (Viršuje arba Apačioje)&lt;br /&gt;
* elektros_tekėjimas (True arba False)&lt;br /&gt;
&lt;br /&gt;
Metodai būtų štai tokie.&lt;br /&gt;
&lt;br /&gt;
* pakeisti_jungiklio_poziciją&lt;br /&gt;
* pakeisti_elektros_tekėjimą&lt;br /&gt;
&lt;br /&gt;
Atributai gali būti matomi ir nematomi. Pavyzdžiui, tu negali matyti elektros tekančios į lemputę. Tu tik žinai, kad elektra išties teka, nes ji tuo metu skleidžia šviesą. Nepaisant to, tu gali matyti jungiklio poziciją (jungiklio_pozicija) ir taip pat tu matai ar šviesa yra įjungta ar ne (šviesa_įjungta). Kai kurie metodai yra &amp;lt;i&amp;gt;privatūs&amp;lt;/i&amp;gt;. Tai reiškia, jog jų reikšmės neišeina tiesiogiai pakeisti. Pavyzdžiui, tu negalėtum pakeisti elektros tėkmės tiesiogiai, nebent būtų nukerpami laidai (to nedaryk ir dėl šio pavyzdžio; manyk, jog laidai neegzistuoja). Tu taip pat negali tiesiogiai įtakoti lemputės šviesos (ne, tu negali atsukti lemputės ar jos sudaužyti!). Bet tu visada gali šiuos atributus įtakoti netiesiogiai naudojant objekto &amp;lt;i&amp;gt;metodus&amp;lt;/i&amp;gt;. Jeigu nesumokėsi mokesčių, metodas pavadinimu &amp;lt;code&amp;gt;pakeisti_elektros_tekėjimą&amp;lt;/code&amp;gt; pakeis &amp;lt;code&amp;gt;elektros_tekėjimas&amp;lt;/code&amp;gt; reikšmę į False. Jei tu įjungsi jungiklį, &amp;lt;code&amp;gt;pakeisti_jungiklio_poziciją&amp;lt;/code&amp;gt; metodas pakeis &amp;lt;code&amp;gt;šviesa_įjungta&amp;lt;/code&amp;gt; atributo reikšmę.&lt;br /&gt;
&lt;br /&gt;
Dabar jau tikriausiai galvoji, „Ką tai turi bendro su Python'u?“ ar, „Aš nesuprantu, bet kaip man sukurti tą objektą?“. Na, beveik priėjai prie atsakymų! Tik turiu paaiškinti dar vieną dalyką prieš neriant į kodą.&lt;br /&gt;
&lt;br /&gt;
Python'e objekto atributai ir metodai yra nurodomi &amp;lt;b&amp;gt;klasės&amp;lt;/b&amp;gt;. Galvok apie klasę kaip apie objekto techninį piešinį. Pavyzdžiui, tavo namai - objektas kuriame gyveni - taip pat jį gali vadinti butu, vasarnamiu, prakartėle ar bet kuo kitu, buvo pastatytas naudojant techinius piešinius. Šie techniniai piešiniai būtų vadinami klasėmis, kurios buvo panaudotos projektuojant tavo namus, butą, vasarnamį, na, supranti apie ką kalbu. &lt;br /&gt;
&lt;br /&gt;
Dar kartą, klasė pasako, kaip sukurti objektą. Techniniais terminais tariant, ir tai yra labai svarbu, klasė nusako naudojamus duomenų atributus ir metodus objekte.&lt;br /&gt;
&lt;br /&gt;
Norint sukurti klasę, mes suprogramuojame &amp;lt;i&amp;gt;klasės apibrėžimą&amp;lt;/i&amp;gt;. Klasės apibrėžimas, tai grupė komandų, kurios nusako objekto atributus ir metodus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Pirma pamoka&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apačioje yra procedūrinė programa, kuri atlieka paprastą matematinį veiksmą su vartotojo įvestu skaičiumi.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Programa parašyta Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
&lt;br /&gt;
# Procedūra 1&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Pasiimk skaičių, kurį manipuliuosi.&lt;br /&gt;
        sk = float(input(&amp;quot;Įrašyk skaičių.\n&amp;quot;))&lt;br /&gt;
        # Išsaugok naują skaičių į kintamąjį. Prieš tai, su pasiimtu skaičiumi atlik matematinius&lt;br /&gt;
        # veiksmus naudojant procedūrą 2&lt;br /&gt;
        pridėksk = pridėkpenkis(sk)&lt;br /&gt;
        # Išsaugok naują skaičių į kintamąjį. Prieš tai, su ankščiau išsaugotu skaičiu atlik&lt;br /&gt;
        # matematinius veiksmus naudojant procedūrą 3&lt;br /&gt;
        dauginksk = daugink(pridėksk)&lt;br /&gt;
        # Paduok skaičių procedūrai 4&lt;br /&gt;
        rodyk(dauginksk)&lt;br /&gt;
    # Susidorok su išimtimis, kurios gali atsirasti dėl netinkamo vartotojo skaičiaus įvedimo&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Privalai įvesti tinkamą skaičių.\n&amp;quot;)&lt;br /&gt;
        # Atstatyk kintamojo num reikšmę, kad ištrintum netinkamą vartotojo įvestį.&lt;br /&gt;
        sk = 0&lt;br /&gt;
        # Dar kartą iškviesk main.&lt;br /&gt;
        main()&lt;br /&gt;
&lt;br /&gt;
# Procedūra 2&lt;br /&gt;
def pridėkpenkis(sk):&lt;br /&gt;
    return sk + 5&lt;br /&gt;
&lt;br /&gt;
# Procedūra 3&lt;br /&gt;
def daugink(pridėksk):&lt;br /&gt;
    return pridėksk * 2.452&lt;br /&gt;
&lt;br /&gt;
# Procedūra 4&lt;br /&gt;
def rodyk(dauginksk):&lt;br /&gt;
    # Parodyk galutinį rezultatą.&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra&amp;quot;, dauginksk)&lt;br /&gt;
&lt;br /&gt;
# Kviesk procedūrą 1&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jei įrašysi skaitemnį &amp;quot;5&amp;quot;, gausi išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašyk skaičių.&lt;br /&gt;
 5&lt;br /&gt;
 Galutinis rezultatas yra 24.52&lt;br /&gt;
&lt;br /&gt;
Jei įrašysi reikšmę &amp;quot;g&amp;quot;, tada pasitaisysi ir įrašysi skaitmenį &amp;quot;8&amp;quot;, tada gausi išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašyk skaičių.&lt;br /&gt;
 g&lt;br /&gt;
 Privalai įvesti tinkamą skaičių.&lt;br /&gt;
 &lt;br /&gt;
 Įrašyk skaičių.&lt;br /&gt;
 8&lt;br /&gt;
 Galutinis rezultatas yra 31.875999999999998&lt;br /&gt;
&lt;br /&gt;
Žemiau matai klasę ir programą, kuri naudoja nurodytą klasę. Ši objektinio programavimo būdu parašyta programa daro tą patį, ką prieš tai darė procedūriniu programavimo būdu parašyta programa. Apžiūrėk keletą svarbių objektinio programavimo būdo konceptų prieš neriant į ankščiau minėtą klasę ir programą.&lt;br /&gt;
Norint sukurti klasę, naudok &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; raktažodį. Po raktažodžio rašyk pavadinimą, kurį norėtum, jog turėtų klasė. Dažnai naudojama praktika kuriant klasių pavadinimus yra &amp;lt;i&amp;gt;NaujųŽodžiųRašymasIšDidžiosiosRaidės&amp;lt;/i&amp;gt;.&lt;br /&gt;
Jei norėčiau sukurti klasę pavadinimu purvinoskojinės, kodas atrodytų taip:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class PurvinosKojinės&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Iš pradžių pažiūrėk į klasę. Programa, kuri naudos šią klasę, bus parodyta vėliau.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Failo pavadinimas: ooppavyzdys.py&lt;br /&gt;
# Programa parašyta Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstracija - Klasė&lt;br /&gt;
&lt;br /&gt;
class SkKeitimas:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.__skaičius = 0&lt;br /&gt;
&lt;br /&gt;
    def pridėkpenkis(self, sk):&lt;br /&gt;
        self.__skaičius = sk&lt;br /&gt;
        return self.__skaičius + 5&lt;br /&gt;
&lt;br /&gt;
    def padaugink(self, pridėtas):&lt;br /&gt;
        self.__pridėtas = pridėtas&lt;br /&gt;
        return self.__pridėtas * 2.452&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Programa, kuri naudoja viršuje esančią klasę yra parašyta žemiau.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Failo pavadinimas: ooppavyzdys.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstracija - Programa&lt;br /&gt;
&lt;br /&gt;
import ooppavyzdys&lt;br /&gt;
&lt;br /&gt;
matkė = ooppavyzdys.SkKeitimas()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    sk = float(input(&amp;quot;Įrašyk skaičių.\n&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    pridėtas = matkė.pridėkpenkis(sk)&lt;br /&gt;
&lt;br /&gt;
    daugintas = matkė.padaugink(pridėtas)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra&amp;quot;, daugintas)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tikriausiai dabar esi pasimetęs. Tai visiškai suprantama. Iš pradžių, pasistenk suprasti klasę.&lt;br /&gt;
Klasė yra pavadinta &amp;quot;SkKeitimas&amp;quot;&lt;br /&gt;
Ši klasė turi tris metodus&lt;br /&gt;
* __init__&lt;br /&gt;
* pridėkpenkis&lt;br /&gt;
* padaugink&lt;br /&gt;
&lt;br /&gt;
Šie trys metodai savyje turi labai panašų kodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.__skaičius = 0&lt;br /&gt;
&lt;br /&gt;
def pridėkpenkis(self, sk):&lt;br /&gt;
    self.__skaičius = sk&lt;br /&gt;
    return self.__skaičius + 5&lt;br /&gt;
&lt;br /&gt;
def padaugink(self, pridėtas):&lt;br /&gt;
    self.__pridėtas = pridėtas&lt;br /&gt;
    return self.__pridėtas * 2.452&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį į tai, jog kiekvienas metodas turi parametrą pavadinimu „self“. Kiekvienas klasės metodas turi būtinai turėti šį parametrą. Šis parametras nebūtinai turi būti su pavadinimu „self“, bet tai laikoma gerąja praktika, tad tikriausiai ir tu turėtum jį taip vadinti. Šis parametras yra reikalingas kiekviename metode nes, kai jis yra iškviečiamas, jis turi žinoti, su kuriuo objekto atributu turėtų atlikti operacijas. Net kai turi tik vieną objektą, turi pasirūpinti, kad programa žinotų, jog nori naudoti atributus aprašytus būtent toje klasėje. Todėl turi būti saugus ir naudoti „self“ parametrą.&lt;br /&gt;
&lt;br /&gt;
Peržiūrėk pirmą metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dauguma Python'o klasių turi &amp;lt;code&amp;gt;__init__&amp;lt;/code&amp;gt; metodą, kuris yra paleidžiamas automatiškai kiekvieną kartą, kai atmintyje yra sukuriamas tos klasės objektas (kai vykdoma programa kreipiasi į klasę, yra sukuriama tos klasės &amp;lt;i&amp;gt;objektas&amp;lt;/i&amp;gt;). Šis metodas yra paprastai vadinamas &amp;lt;i&amp;gt;inicijavimo metodu&amp;lt;/i&amp;gt;. Kai šis metodas yra paleidžiamas, „self“ parametras yra automatiškai priskiriamas sukurtam objektui. __init__ metodas inicijuoja klasės atributus, dėl šios priežasties jis yra pavadintas inicijavimo metodu. Vykdant __init__ metodą, &amp;lt;code&amp;gt;skaičius&amp;lt;/code&amp;gt; atributui priskiriame 0.&lt;br /&gt;
Į objekto atributą skaičius kreipiamės panaudojant tašką.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.__skaičius = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kodas &amp;lt;code&amp;gt;self.__skaičius = 0&amp;lt;/code&amp;gt; reiškia, jog objekte esančio „skaičius“ atributo reikšmė tampa lygi 0.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėk į kitą metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def pridėkpenkis(self, sk):&lt;br /&gt;
    self.__skaičius = sk&lt;br /&gt;
    return self.__skaičius + 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis metodas yra pavadintas „pridėkpenkis“. Jis priima parametrą pavadinimu „sk“. Metode esanti komanda priskiria „sk“ reikšmę objekte esančiui atributui pavadinimu „skaičius“. Tada metodas prideda 5 prie „skaičius“ ir jį grąžina į tą vietą, kur metodas buvo iškviestas.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėk į trečiajį metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def padaugink(self, pridėtas):&lt;br /&gt;
    self.__pridėtas = pridėtas&lt;br /&gt;
    return self.__pridėtas * 2.453&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis metodas yra pavadintas „padaugink“. Jis priima parametrą pavadinimu „pridėtas“. Metodas priskiria priimtą reikšmę objekte esančiam atributui su pavadinimu „pridėtas“ ir grąžina „pridėtas“ atributo ir 2.452 sandaugą į tą vietą, kur metodas buvo iškviestas.&lt;br /&gt;
&lt;br /&gt;
Ar atkreipei dėmesį į tai, jog kiekvieno metodo viduje „self“ atributas prasideda su dviem pabraukimais? Pabandyk suprasti kodėl.&lt;br /&gt;
Prieš tai buvo minėta, jog objektas, metodų pagalba, dirba su atributais apibrėžtais jame pačiame. Būtų idealu, jei tuos atributus galėtum pakeisti TIK SU METODAIS ESANČIAIS TAME OBJEKTE. Įmanoma turėti iššorinį kodą, kuris galėtų manipuliuoti tais pačiais atributais. Norint „paslėpti“ atributus, taip, kad juos matytų tik metodai aprašyti pačiame objekte, turi naudoti du pabraukimus prieš objekto pavadinimą, taip kaip ir buvo padaryta. Ištrynus abu pabraukimus nuo atributo pavadinimo tu juo galėsi manipuliuoti kodu, kuris parašytas objekto išorėje.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėk į programą, kuri naudoja aptartą klasę.&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį į pirmą eilutę, kuri nėra komentaras.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import ooppavyzdys&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši kodo eilutė importuoją klasę, kurią išsaugojai atskirame faile (modulyje). Klasės nebūtinai turi būti talpinamos atskiruose failuose, bet tai yra priimta kaip geroji praktika, tad yra verta jau nuo pat pradžių priprasti prie modulių importavimo.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
matkė = ooppavyzdys.SkKeitimas()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši eilutė sukuria SkKeitimas pavadinimu „ooppavyzdys“ modulyje patalpintos klasės objektą, kuris yra priskiriamas „matkė“ kintamajam.&lt;br /&gt;
Sintaksė atrodo taip: &amp;lt;code&amp;gt;&amp;lt;i&amp;gt;moduliopavadinimas.Klasėspavadinimas()&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;. Toliau apibrėžiama ''main'' funkcija ir paimamas skaičius iš vartotojo priskiriamas kintamajam &amp;lt;code&amp;gt;sk&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė &amp;lt;code&amp;gt;pridėtas = matkė.pridėkpenkis(sk)&amp;lt;/code&amp;gt; nusiunčia „sk“ kintamojo reikšmę metodui pavadinimu „pridėkpenkis“. Metodas yra aprašytas klasėje, kurios objektą sukūrei kintamajame pavadinimu „matkė“. „pridėkpenkis“ metodas grąžina apskaičiuotį reikšmę, kuri priskiriama kintamajam pavadinimu „pridėtas“.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė &amp;lt;code&amp;gt;daugintas = matkė.daugink(pridėtas)&amp;lt;/code&amp;gt; nusiunčia „pridėtas“ kintamojo reikšmę metodui pavadinimu „daugink“. Metodas yra aprašytas objekto „matkė“ klasėje. „daugink“ metodas apskaičiuja ir grąžina reikšmę, kuri yra priskiriama kintamajam pavadinimu „daugintas“.&lt;br /&gt;
&lt;br /&gt;
Paskutinė main() funkcijos eilutė atspausdina „Galutinis rezultatas yra &amp;lt;kintamojo daugintas reikšmė&amp;gt;“. &lt;br /&gt;
&lt;br /&gt;
Programos paskutinė eilutė iškviečia main funkciją, kuri įvykdo žingsnius nurodytus viršuje.&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Rekursija|next=Įvadas į importuotas bibliotekas ir kitas funkcijas}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Rekursija&amp;diff=3712</id>
		<title>Python Vadovėlis/Rekursija</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Rekursija&amp;diff=3712"/>
		<updated>2021-12-15T13:46:17Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: pav&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Rekursija ==&lt;br /&gt;
&lt;br /&gt;
Python'o programoje rekursinė funkcija yra funkcija, kuri iškviečia pati save.&lt;br /&gt;
&lt;br /&gt;
=== Įvadas į rekursiją ===&lt;br /&gt;
&lt;br /&gt;
Iki šiol Python'o programoje matėme funkcijas, kurios iškviečia kitas funkcijas. Tačiau funkcija gali iškviesti ir pati save. Pažvelkime į paprastą pavyzdį.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Mitchell Aikens programa&lt;br /&gt;
# Nėra autorinių teisių&lt;br /&gt;
# 2010&lt;br /&gt;
&lt;br /&gt;
sk = 0&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    skaitliukas(sk)&lt;br /&gt;
&lt;br /&gt;
def skaitliukas(sk):&lt;br /&gt;
    print(sk)&lt;br /&gt;
    sk+= 1&lt;br /&gt;
    skaitliukas(sk)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jei šią programą paleistum IDLE kodo redaktoriuje, ji veiktų amžinai. Vienintelis būdas sustabdyti ciklą būtų nutraukti vykdymą paspaudžiant Ctrl + C klaviatūroje. Tai yra begalinės rekursijos pavyzdys (Kai kurie naudotojai pranešė apie esamos IDLE kodo redaktoriaus sistemos gedimą, dėl kurio Ctrl + C iškelta išimtis taip pat pradeda veikti. Jei taip nutinka, paspausk Ctrl + F6 ir IDLE kodo redaktoriaus terminalas turėtų pasileisti iš naujo.).&lt;br /&gt;
&lt;br /&gt;
Galima ginčytis, kad rekursija yra tik dar vienas būdas atlikti tą patį dalyką kaip ir naudojant ciklą. Kai kuriais atvejais tai yra visiškai teisinga. Tačiau yra ir kitų rekursijos naudojimo būdų, kurie yra labai tinkami, o  &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; arba &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; ciklai gali būti ne pats geriausias variantas.&lt;br /&gt;
&lt;br /&gt;
Rekursiją gali būti valdoma, kaip ir ciklai. Pažvelk į valdomo ciklo pavyzdį.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Mitchell Aikens programa&lt;br /&gt;
# Nėra autorinių teisių&lt;br /&gt;
# 2010&lt;br /&gt;
def main():&lt;br /&gt;
    ciklosk= int(input(&amp;quot;Kiek kartų norėtum paleisti ciklą?\n&amp;quot;))&lt;br /&gt;
    skaitliukas = 1&lt;br /&gt;
    recurr(ciklosk,skaitliukas)&lt;br /&gt;
&lt;br /&gt;
def recurr(ciklosk,skaitliukas):&lt;br /&gt;
    if ciklosk&amp;gt; 0:&lt;br /&gt;
        print(&amp;quot;Tai yra ciklo iteracija&amp;quot;,skaitliukas)&lt;br /&gt;
        recurr(ciklosk- 1,skaitliukas + 1)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Ciklas yra pabaigtas.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aukščiau naudojami argumentai/parametrai rekursijų skaičiui valdyti. Tiesiog naudok tai, ką jau žinai apie funkcijas, ir sek programos eigą. Tai paprasta išsiaiškinti. Jei kyla problemų, grįžk į [[Vadovėlis/Pažangių funkcijų pavyzdys|Pažangių funkcijų pavyzdys]].&lt;br /&gt;
&lt;br /&gt;
== Praktiniai rekursijos pritaikymai ==&lt;br /&gt;
&lt;br /&gt;
Dažnai rekursija yra studijuojama pažengusiu informatikos lygiu. Rekursija dažniausiai naudojama sprendžiant sudėtingas problemas, kurias galima suskirstyti į mažesnes, identiškas problemas. Norint išspręsti problemą, rekursija nebūtina. Problemos, kurias galima išspręsti naudojant rekursiją, greičiausiai gali būti išspręstos ir su ciklais. Be to, ciklas gali būti efektyvesnis nei rekursinė funkcija. Rekursinėms funkcijoms reikia daugiau atminties ir išteklių nei ciklams, todėl daugeliu atvejų jos yra mažiau efektyvios. Šis naudojimo reikalavimas kartais vadinamas &amp;lt;i&amp;gt;overhead&amp;lt;/i&amp;gt;.&lt;br /&gt;
Galbūt galvoji: „Na, kam nerimauti su rekursija. Aš tiesiog naudosiu ciklą. Aš jau žinau, kaip sudaryti ciklą, ir tai yra daug daugiau darbo.“ Ši mintis suprantama, bet ne visai ideali. Sprendžiant sudėtingas problemas, rekursinę funkciją kartais lengviau, greičiau ir paprasčiau sukurti bei programuoti.&lt;br /&gt;
&lt;br /&gt;
Pagalvokite apie šias dvi „taisykles“:&lt;br /&gt;
* Jei galiu išspręsti problemą dabar, be rekursijos, funkcija tiesiog grąžina reikšmę.&lt;br /&gt;
* Jei negaliu išspręsti problemos dabar be rekursijos, funkcija sumažina problemą iki mažesnio ir panašaus ir pakviečia pati save, kad išspręstų problemą.&lt;br /&gt;
&lt;br /&gt;
Taikyk tai naudojant bendrą matematinę sąvoką – faktorialus. Jei nesi susipažinęs su matematikos faktoriais, skaityk: [https://lt.wikipedia.org/wiki/Faktorialas Faktorialas]&lt;br /&gt;
 &lt;br /&gt;
Skaičiaus faktorialas &amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt;, yra žymimas kaip &amp;lt;i&amp;gt;n!&amp;lt;/i&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Štai keletas pagrindinių faktorialų taisyklių:&lt;br /&gt;
&lt;br /&gt;
Jei n = 0 tai n! = 1&lt;br /&gt;
&lt;br /&gt;
Jei n &amp;gt; 0 tai n! = 1 x 2 x 3 x ... x n&lt;br /&gt;
&lt;br /&gt;
Pavyzdžiui, pažiūrėk į skaičiaus 9 faktorialą.&lt;br /&gt;
&lt;br /&gt;
9! = 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9&lt;br /&gt;
&lt;br /&gt;
Pažiūrėk į programą, kuri rekursijos metodu apskaičiuoja bet kurio vartotojo įvesto skaičiaus faktorialą.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
def main():&lt;br /&gt;
    sk = int(input(&amp;quot;Įvesk neneigiamą sveikąjį skaičių.\n&amp;quot;))&lt;br /&gt;
    fact = factorialas(sk)&lt;br /&gt;
    print(&amp;quot;Skaičiaus &amp;quot;,sk,&amp;quot; faktorialas yra &amp;quot;,fact)&lt;br /&gt;
&lt;br /&gt;
def factorialas(sk):&lt;br /&gt;
    if sk== 0:&lt;br /&gt;
        return  1&lt;br /&gt;
    else:&lt;br /&gt;
        return sk* factorialas(sk- 1)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rekursija taip pat naudinga išplėstinėje temoje, vadinamoje generatoriais. Norint sugeneruoti serijas 1,2,1,3,1,2,1,4,1,2... reikės šio kodo:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def beprotiškas(min_):&lt;br /&gt;
    yield min_&lt;br /&gt;
    g=beprotiškas(min_+1)&lt;br /&gt;
    while True:&lt;br /&gt;
        yield next(g)&lt;br /&gt;
        yield min_&lt;br /&gt;
&lt;br /&gt;
i=beprotiškas(1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
norint gauti kitą elementą, iškiviestum next(i)&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Siekiant tobulumo |next=Įvadas į objektinį programavimą Python 3}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Fail%C5%B3_tvarkymas&amp;diff=3711</id>
		<title>Python Vadovėlis/Failų tvarkymas</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Fail%C5%B3_tvarkymas&amp;diff=3711"/>
		<updated>2021-12-15T13:45:55Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: pav&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Failų I/O ===&lt;br /&gt;
&lt;br /&gt;
Štai paprastas failo I/O (ang. Input/Output, lt. Įvesties/Išvesties) 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'ui įterpti ''n''aują eilutę toje vietoje.  &lt;br /&gt;
&lt;br /&gt;
Apžvelkime failų I/O:&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. ''r''ead) skaityti failą kaip ''t''ekstą arba &amp;lt;code&amp;gt;&amp;quot;wt&amp;quot;&amp;lt;/code&amp;gt; (''w''rite) rašytį į failą kaip ''t''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 kitą failo elementą ir grąžina jį kaip eilutę. Jei joks argumentas nepateiktas, funkcija grąžins visą failą (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('1. Spausdink telefonų numerius')&lt;br /&gt;
    print('2. Pridėk telefono numerį')&lt;br /&gt;
    print('3. Pašalink telefono numerį')&lt;br /&gt;
    print('4. Ieškok telefono numerio')&lt;br /&gt;
    print('5. Įkelk telefono numerius')&lt;br /&gt;
    print('6. Išsaugok telefono numerius')&lt;br /&gt;
    print('7. Išeik')&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 užkrauna 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): '''2'''&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: '''Liepa'''&lt;br /&gt;
 Telefono numeris: '''1234'''&lt;br /&gt;
 Įvesk skaičių (1-7): '''2'''&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: '''Benas'''&lt;br /&gt;
 Telefono numeris: '''4321'''&lt;br /&gt;
 Įvesk skaičių (1-7): '''1'''&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): '''6'''&lt;br /&gt;
 Failo pavadinimas išsaugojimui: '''numeriai.txt'''&lt;br /&gt;
 Įvesk skaičių (1-7): '''7'''&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): '''5'''&lt;br /&gt;
 Failo pavadinimas, kurį nori įkelti: '''numeriai.txt'''&lt;br /&gt;
 Įvesk skaičių (1-7): '''1'''&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): '''7'''&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 ji eina ir sukuria 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;
Užkrovimo 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 aptiktas &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt; teiginys. Toliau nuskaitoma eilutė su kodu &amp;lt;code&amp;gt;skaitoma_eilutė = skaitymo_failas.readline()&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ę. Teiginys &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; tai patikrina ir panaudojant kodą &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt; nutraukia &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; ciklą. Žinoma, jei funkcija &amp;lt;code&amp;gt;readline&amp;lt;/code&amp;gt; negrąžintų naujos eilutės eilutės pabaigoje, nebūtų jokio būdo pasakyti, ar tuščia eilutė yra tuščia eilutė, ar failo pabaiga, todėl nauja eilutė įtraukiama į tai ką grąžina funckoja &amp;lt;code&amp;gt;readline&amp;lt;/code&amp;gt;. Taigi turime atsikratyti tos naujos eilutės. Eilutė &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 į pavadinimą ir telefono numerį. Tada tai įtraukiama į &amp;lt;code&amp;gt;numeriai&amp;lt;/code&amp;gt; žodyną&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ą neatidaręs kitos programos?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Yra keletas skirtingų būdų, kaip tai padaryti. Iš tikrųjų, lengviausias būdas atidaro kitą programą, tačiau viskuo pasirūpina Python'o kodas ir vartotojui nereikia nurodyti spausdinamo failo. Šis metodas apima kitos programos subproceso (arba antrinis procesas; biblioteka 'subprocess') 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(['notepad','/p','numeriai.txt'])&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;'/p'&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;
&lt;br /&gt;
{{Solution|title=Sprendimas|text=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
užduotys = ['nd sk 1', 'nd sk 2', 'viktorina   ', 'nd sk 3', 'testas']&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('\t', end=' ')&lt;br /&gt;
        for x in užduotys:&lt;br /&gt;
            print(x, '\t', end=' ')&lt;br /&gt;
        print()&lt;br /&gt;
        for x in raktai:&lt;br /&gt;
            print(x, '\t', end=' ')&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, '\t', end=' ')&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, '\t', end=' ')&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>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C5%BDodynai&amp;diff=3710</id>
		<title>Python Vadovėlis/Žodynai</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C5%BDodynai&amp;diff=3710"/>
		<updated>2021-12-15T13:43:13Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: klaidinga&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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('1. Spausdink telefonų numerius')&lt;br /&gt;
    print('2. Pridėk telefono numerį')&lt;br /&gt;
    print('3. Pašalink telefono numerį')&lt;br /&gt;
    print('4. Ieškok telefono numerio')&lt;br /&gt;
    print('5. Išeik')&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): '''2'''&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: '''Benas'''&lt;br /&gt;
 Telefono numeris: '''869935951'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''2'''&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: '''Liepa'''&lt;br /&gt;
 Telefono numeris: '''869935952'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''2'''&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: '''Markas'''&lt;br /&gt;
 Telefono numeris: '''869935957'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''1'''&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): '''4'''&lt;br /&gt;
 Ieškok telefono numerio&lt;br /&gt;
 Vardas: '''Benas'''&lt;br /&gt;
 Telefono numeris yra 869935951&lt;br /&gt;
 Įvesk skaičių (1-5): '''3'''&lt;br /&gt;
 Pašalink telefono numerį&lt;br /&gt;
 Vardas: '''Markas'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''1'''&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): '''5'''&lt;br /&gt;
&lt;br /&gt;
Ši programa yra panaši į vardų sąrašą, pateiktą prieš tai buvusiame skyriuje apie sąrašus.  Štai kaip veikia programa.  Pirmiausia, funkcija &amp;lt;code&amp;gt;spausdink_meniu&amp;lt;/code&amp;gt; yra apibrėžiama.  &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'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ų.  Eilutės&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;
eina per žodyną ir spausdina visą informaciją.  Funkcija &amp;lt;code&amp;gt; numeriai.keys()&amp;lt;/code&amp;gt; grąžina 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.  Panašiai kaip sąrašai, teiginys &amp;lt;code&amp;gt;numeriai[x]&amp;lt;/code&amp;gt; naudojamas norint pasiekti konkretų žodyno narį.  Žinoma, šiuo atveju &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; yra eilutė.  Toliau, eilutė &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ę.  Toliau eilutės&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, pašalina.  Operatorius &amp;lt;code&amp;gt;vardas in numeriai&amp;lt;/code&amp;gt; grąžina &amp;lt;i&amp;gt;teisinga&amp;lt;/i&amp;gt; (angl. true), 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;i&amp;gt;klaidinga&amp;lt;/i&amp;gt; (angl. false).  Eilutė &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ę. Eilutės&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.  Raktai gali būti eilutės arba&lt;br /&gt;
numeriai.  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 = ['nd sk 1', 'nd sk 2', 'viktorina   ', 'nd sk 3', 'testas']&lt;br /&gt;
mokiniai = {'#Max': 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('\t', end=' ')&lt;br /&gt;
    for i in range(len(užduotys)):&lt;br /&gt;
        print(užduotys[i], '\t', end=' ')&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, '\t', end=' ')&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], '\t', end=' ')&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;
        name = 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], '\t', end=' ')&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): '''3'''&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): '''5'''&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): '''1'''&lt;br /&gt;
 Pridėk mokinį: '''Markas'''&lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): '''4'''&lt;br /&gt;
 Įrašyk pažymį&lt;br /&gt;
 Mokinys: '''Markas'''&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į: '''1'''&lt;br /&gt;
 Pažymys: '''25'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''2'''&lt;br /&gt;
 Pažymys: '''24'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''3'''&lt;br /&gt;
 Pažymys: '''45'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''4'''&lt;br /&gt;
 Pažymys: '''23'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''5'''&lt;br /&gt;
 Pažymys: '''95'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''0'''&lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): '''3'''&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): '''6'''&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ų vardas, 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 = {'#Max': 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; (nes &amp;lt;code&amp;gt;max_taškai&amp;lt;/code&amp;gt; ir buvo tai, kai priskyrimas buvo padarytas) (aš naudoju raktą &amp;lt;code&amp;gt;#Max&amp;lt;/code&amp;gt;, nes &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; yra surūšiuotas prieš bet kokias abėcėlės raides).  Toliau, &amp;lt;code&amp;gt;spausdink_meniu&amp;lt;/code&amp;gt; yra apibrėžtas.  Po to, &amp;lt;code&amp;gt;spausdink_visus_pažymius&amp;lt;/code&amp;gt; funkcija yra apibrėžta žemiau esančiose &lt;br /&gt;
eilutėse:&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('\t',end=&amp;quot; &amp;quot;)&lt;br /&gt;
    for i in range(len(užduotys)):&lt;br /&gt;
        print(užduotys[i], '\t',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, '\t',end=' ')&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 pirmieji raktai yra išimami iš &amp;lt;code&amp;gt;mokiniai&amp;lt;/code&amp;gt; žodyno su &amp;lt;code&amp;gt;raktai&amp;lt;/code&amp;gt; funkcija eilutėje &amp;lt;code&amp;gt;raktai = list(mokiniai.keys())&amp;lt;/code&amp;gt;.  &amp;lt;code&amp;gt;raktai&amp;lt;/code&amp;gt; yra iteruojamasis ir yra paverčiamas į sąrašą, tam kad būtų 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 &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; rakte.  Funkcija &amp;lt;code&amp;gt;spausdink_pažymius&amp;lt;/code&amp;gt; tiesiog spausdina sąrašą ir yra apibrėžta 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į prie savo vardo rakto.  Žymėjimas &amp;lt;code&amp;gt;[0] * len(max_taškai)&amp;lt;/code&amp;gt; tiesiog sukuria sąrašą 0-ių, kuris yra tokio pat ilgio kaip ir &amp;lt;code&amp;gt;max_taškai&amp;lt;/code&amp;gt; sąrašas.  &lt;br /&gt;
&lt;br /&gt;
Pašalinti mokinį pasirinkimas tiesiog ištrina mokinį, panašiai kaip ir telefonų knygutės pavyzdyje.  Įrašyti mokinį pasirinkimas yra šiek tiek sudėtingesnis.  Pažymiai yra  gaunami eilutėje &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 eilutėje &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ą (kaip ir ne  &amp;lt;code&amp;gt;mokiniai[vardas] = pažymiai&amp;lt;/code&amp;gt;).  Trūkstamo teiginio priežastis yra ta, kad &amp;lt;code&amp;gt;pažymiai&amp;lt;/code&amp;gt; iš tiesų yra kitas pavadinimas skirtas &amp;lt;code&amp;gt;mokiniai[vardas]&amp;lt;/code&amp;gt; ir 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 suteikia lengvą 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;
{{navigation |previous=Loginiai reiškiniai |next=Modulių naudojimas}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Daugiau_apie_s%C4%85ra%C5%A1us&amp;diff=3703</id>
		<title>Python Vadovėlis/Daugiau apie sąrašus</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Daugiau_apie_s%C4%85ra%C5%A1us&amp;diff=3703"/>
		<updated>2021-12-15T13:17:18Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: nedideli pakeitimai&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Apie sąrašus ir jų panaudojimą jau girdėjai praėjusiame skyriuje. Dabar, kai turi daugiau žinių, aš išsamiau aprašysiu sąrašus. Iš pradžių parodysiu, kaip dirbti su sąrašo elementais ir tuomet papasakosiu, kaip juos galima kopijuoti.  &lt;br /&gt;
&lt;br /&gt;
Parašiau pavyzdį, kuriame naudoju indeksus, kad pasiimčiau vieną konkretų elementą iš sąrašo:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''skaičiai = ['nulis', 'vienas', 'du', 'trys', 'keturi', 'penki']'''&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''skaičiai[0]'''&lt;br /&gt;
 'nulis'&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''skaičiai[4]'''&lt;br /&gt;
 'keturi'&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''skaičiai[5]'''&lt;br /&gt;
 'penki'&lt;br /&gt;
&lt;br /&gt;
Visi šie pavyzdžiai tau turėtų atrodyti pažįstami. Jei nori gauti pirmąjį sąrašo elementą, tu žiūri į indeksą 0, jei nori antrojo, tuomet imi indeksą 1 ir taip toliau judi per visą sąrašą. Tačiau ką daryti, jei nori paskutinio sąrašo elemento? Vienas iš būdų galėtų būti funkcijos &amp;lt;code&amp;gt;len()&amp;lt;/code&amp;gt; panaudojimas: &amp;lt;code&amp;gt;skaičiai[len(skaičiai) - 1]&amp;lt;/code&amp;gt;. Funkcija &amp;lt;code&amp;gt;len()&amp;lt;/code&amp;gt; visada grąžina paskutinį indeksą + 1. Šiuo būdu gali eiti per sąrašą iš kitos pusės, pavyzdžiui: antrasis sąrašo elementas nuo galo yra gaunamas taip: &amp;lt;code&amp;gt;skaičiai[len(skaičiai) - 2]&amp;lt;/code&amp;gt;. Kaip jau minėjau, yra dar vienas būdas, kaip galėtum pasiekti tą patį rezultatą. Python'e paskutinis elementas sąraše visada turi indeksą -1, antrojo elemento nuo sąrašo pabaigos indeksas yra -2 ir taip toliau. Štai daugiau pavyzdžių:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''skaičiai[len(skaičiai) - 1]'''&lt;br /&gt;
 'penki'&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''skaičiai[len(skaičiai) - 2]'''&lt;br /&gt;
 'keturi'&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''skaičiai[-1]'''&lt;br /&gt;
 'penki'&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''skaičiai[-2]'''&lt;br /&gt;
 'keturi'&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''skaičiai[-6]'''&lt;br /&gt;
 'nulis'&lt;br /&gt;
&lt;br /&gt;
Taigi, bet kuris sąrašo elementas gali būti indeksuojamas dviem būdais: iš priekio ir iš galo.&lt;br /&gt;
&lt;br /&gt;
Kitas naudingas būdas, kaip gali padalinti sąrašą ir gauti konkrečią jo dalį - pjaustymas(slicing). Štai dar vienas pavyzdys, leidžiantis suprasti, kam jie gali būti naudojami:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''dalykai = [0, 'Jonas', 2, 'S.P.A.M.', 'Kojinė', 42, &amp;quot;Benas&amp;quot;, &amp;quot;Liepa&amp;quot;]'''&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''dalykai[0]'''&lt;br /&gt;
 0&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''dalykai[7]'''&lt;br /&gt;
 'Liepa'&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''dalykai[0:8]'''&lt;br /&gt;
 [0, 'Jonas', 2, 'S.P.A.M.', 'Kojinė', 42, 'Benas', 'Liepa']&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''dalykai[2:4]'''&lt;br /&gt;
 [2, 'S.P.A.M.']&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''dalykai[4:7]'''&lt;br /&gt;
 ['Kojinė', 42, 'Benas']&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''dalykai[1:5]'''&lt;br /&gt;
 ['Jonas', 2, 'S.P.A.M.', 'Kojinė']&lt;br /&gt;
&lt;br /&gt;
Pjaustymą naudoju tada, kai noriu gauti konkrečią sąrašo dalį. Pjaustymo operatorius yra aprašomas taip: &amp;lt;code&amp;gt;dalykai[pirmas_indeksas:paskutinis_indeksas]&amp;lt;/code&amp;gt;. Pjaustymas „perpjauna“ sąrašą  ties &amp;lt;code&amp;gt;pirmas_indeksas&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;paskutinis_indeksas&amp;lt;/code&amp;gt; ir tuomet grąžina tą sarašo dalį, kuri yra tarp pirmo indekso ir paskutinio indekso. Gali naudoti abiejų tipų indeksavimą:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''dalykai[-4:-2]'''&lt;br /&gt;
 ['Kojinė', 42]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''dalykai[-4]'''&lt;br /&gt;
 'Kojinė'&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''dalykai[-4:6]'''&lt;br /&gt;
 ['Kojinė', 42]&lt;br /&gt;
&lt;br /&gt;
Dar vienas dalykas, kurį turėtum žinoti apie sąrašo pjaustymą - neapibrėžtas indeksas. Jei &amp;lt;code&amp;gt;pirmas_indeksas&amp;lt;/code&amp;gt; nenurodytas, tuomet numatytoji reikšmė yra pirmojo elemento sąraše indeksas. Jei paskutinis &amp;lt;code&amp;gt;paskutinis_indeksas&amp;lt;/code&amp;gt; nenurodytas, tuomet numatytoji reikšmė yra paskutiniojo elemento sąraše indeksas.  Štai keli pavyzdžiai:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''dalykai[:2]'''&lt;br /&gt;
 [0, 'Jonas']&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''dalykai[-2:]'''&lt;br /&gt;
 ['Benas', 'Liepa']&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''dalykai[:3]'''&lt;br /&gt;
 [0, 'Jonas', 2]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''dalykai[:-5]'''&lt;br /&gt;
 [0, 'Jonas', 2]&lt;br /&gt;
&lt;br /&gt;
Štai (HTML įkvėptas) programos pavyzdys (jei nori, nukopijuok ir išbandyk šios programos kodą):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
poema = [&amp;quot;&amp;lt;B&amp;gt;&amp;quot;, &amp;quot;Ta&amp;quot;, &amp;quot;liga&amp;quot;, &amp;quot;nelimpa&amp;quot;, &amp;quot;&amp;lt;/B&amp;gt;&amp;quot;, &amp;quot;net&amp;quot;, &amp;quot;ir&amp;quot;, &amp;quot;prie&amp;quot;,&lt;br /&gt;
        &amp;quot;savų.&amp;quot;, &amp;quot;Pats&amp;quot;, &amp;quot;&amp;lt;B&amp;gt;&amp;quot;, &amp;quot;žiopliukas&amp;quot;, &amp;quot;būdamas,&amp;quot;, &amp;quot;neapkrės&amp;quot;, &amp;quot;kitų.&amp;quot;, &amp;quot;&amp;lt;/B&amp;gt;&amp;quot;,&lt;br /&gt;
        &amp;quot;Žiopliškumas&amp;quot;, &amp;quot;buvo&amp;quot;, &amp;quot;ir&amp;quot;, &amp;quot;&amp;lt;B&amp;gt;&amp;quot;, &amp;quot;visad&amp;quot;, &amp;quot;jis&amp;quot;, &amp;quot;bus.&amp;quot;,&lt;br /&gt;
        &amp;quot;&amp;lt;/B&amp;gt;&amp;quot;, &amp;quot;Jei&amp;quot;, &amp;quot;skandinsi&amp;quot;, &amp;quot;pelkėj,&amp;quot;, &amp;quot;&amp;lt;B&amp;gt;&amp;quot;, &amp;quot;jis&amp;quot;, &amp;quot;ir&amp;quot;,&lt;br /&gt;
        &amp;quot;&amp;lt;/B&amp;gt;&amp;quot;, &amp;quot;ten&amp;quot;, &amp;quot;nežus.&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
def gauk_pastorintą(tekstas):&lt;br /&gt;
    true = 1&lt;br /&gt;
    false = 0&lt;br /&gt;
    ## ar_pastorintas pasako ar mes dabar tikriname &lt;br /&gt;
    ## pastorintą teksto dalį.&lt;br /&gt;
    ar_pastorintas = false&lt;br /&gt;
    ## pradinis_blokas yra indeksas arba nepastorinta &lt;br /&gt;
    ## teksto dalis arba pastorinta.&lt;br /&gt;
    pradinis_blokas = 0&lt;br /&gt;
    for indeksas in range(len(tekstas)):&lt;br /&gt;
        ## Apdorojama pastorinto teksto pradžia &lt;br /&gt;
        if tekstas[indeksas] == &amp;quot;&amp;lt;B&amp;gt;&amp;quot;:&lt;br /&gt;
            if ar_pastorintas:&lt;br /&gt;
                print(&amp;quot;Klaida: Papildoma pastorinimo atidarymo žyma&amp;quot;)&lt;br /&gt;
            ## print &amp;quot;Nepastorintas:&amp;quot;, tekstas[pradinis_blokas:indeksas]&lt;br /&gt;
            ar_pastorintas = true&lt;br /&gt;
            pradinis_blokas = indeksas + 1&lt;br /&gt;
        ## Apdorojama pastorinto teksto pabaiga&lt;br /&gt;
        ## Atsimink, kad paskutinis skaičius atliekant pjūvį yra indeksas &lt;br /&gt;
        ## po to, kai paskutinis indeksas yra panaudotas.&lt;br /&gt;
        if tekstas[indeksas] == &amp;quot;&amp;lt;/B&amp;gt;&amp;quot;:&lt;br /&gt;
            if not ar_pastorintas:&lt;br /&gt;
                print(&amp;quot;Klaida: papildoma pastorinimo uždarymo žyma&amp;quot;)&lt;br /&gt;
            print(&amp;quot;Pastorintas [&amp;quot;, pradinis_blokas, &amp;quot;:&amp;quot;, indeksas, &amp;quot;]&amp;quot;, tekstas[pradinis_blokas:indeksas])&lt;br /&gt;
            ar_pastorintas = false&lt;br /&gt;
            pradinis_blokas = indeksas + 1&lt;br /&gt;
&lt;br /&gt;
gauk_pastorintą(poema)&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;
 Pastorinta [ 1 : 4 ] ['Ta', 'liga', 'nelimpa']&lt;br /&gt;
 Pastorinta [ 11 : 15 ] ['žiopliukas', 'būdamas,', 'neapkrės', 'kitų.']&lt;br /&gt;
 Pastorinta [ 20 : 23 ] ['visad', 'jis', 'bus.']&lt;br /&gt;
 Pastorinta [ 28 : 30 ] ['jis', 'ir']&lt;br /&gt;
&lt;br /&gt;
Funkcija &amp;lt;code&amp;gt;gauk_pastorintą()&amp;lt;/code&amp;gt; pasiima sau į sąrašą tai, kas buvo padalinta į žodžius ir žymas.  Žymos, kurį ši funkcija ieško - &amp;lt;code&amp;gt;&amp;amp;lt;B&amp;amp;gt;&amp;lt;/code&amp;gt;, nes ji pradeda pastorintą tekstą ir &amp;lt;code&amp;gt;&amp;amp;lt;/B&amp;amp;gt;&amp;lt;/code&amp;gt;, kuris užbaigia pastorintą tekstą. Funkcija &amp;lt;code&amp;gt;gauk_pastorintą()&amp;lt;/code&amp;gt; eina per tekstą ir ieško pradžios ir pabaigos žymų.&lt;br /&gt;
&lt;br /&gt;
Kitas dalykas, kurį gali daryti su sąrašais - juos kopijuoti, pavyzdžiui: &lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''a = [1, 2, 3]'''&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''b = a'''&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''print(b)'''&lt;br /&gt;
 [1, 2, 3]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''b[1] = 10'''&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''print(b)'''&lt;br /&gt;
 [1, 10, 3]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''print(a)'''&lt;br /&gt;
 [1, 10, 3]&lt;br /&gt;
&lt;br /&gt;
Šis pavyzdys turėtų nustebinti, kadangi pakeitus &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; pasikeitė ir &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;. Taip yra todėl, kad teiginys &amp;lt;code&amp;gt;b = a&amp;lt;/code&amp;gt; sukūrė ''nuorodą(reference)'' iš &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; į &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;, o tai reiškia, jog &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; dabar yra dar vienas &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; vardas.&lt;br /&gt;
Taigi, bet koks &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; pakeitimas, keičia ir &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;. Tačiau kai kurie priskyrimai nesukuria dviejų pavadinimų vienam sąrašui, pažvelk į dar vieną pavyzdį:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''a = [1, 2, 3]'''&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''b = a * 2'''&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''print(a)'''&lt;br /&gt;
 [1, 2, 3]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''print(b)'''&lt;br /&gt;
 [1, 2, 3, 1, 2, 3]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''a[1] = 10'''&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''print(a)'''&lt;br /&gt;
 [1, 10, 3]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''print(b)'''&lt;br /&gt;
 [1, 2, 3, 1, 2, 3]&lt;br /&gt;
&lt;br /&gt;
Šiuo atveju &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; nėra nuoroda į &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;, nes išraiška &amp;lt;code&amp;gt;a * 2&amp;lt;/code&amp;gt; sukuria naują sąrašą vietoje nuorodos į &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;. Visos priskyrimo operacijos sukuria nuorodą, pavyzdžiui: kai perduodi sąrašą kaip funkcijos argumentą, tu sukuri nuorodą.&lt;br /&gt;
Visgi, dažniau kuriame kopijas, o ne nuorodas, todėl svarbu įsitikinti, kas buvo sukurta, pavyzdžiui: kai norime pakeisti vieną sąrašą, nekeisdami kito sąrašo pavadinimo, mes turime įsitikinti, kad sukūrėme sąrašo kopiją.&lt;br /&gt;
&lt;br /&gt;
Yra keli būdai, kaip gali sukurti sąrašo kopiją. Vienas iš paprasčiausių būdų yra pjaustymo operatorius, kadangi jis visuomet sukuria naują sąrašą, net tada, kai su pjūviu apimame viso sąrašo ilgį:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''a = [1, 2, 3]'''&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''b = a[:]'''&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''b[1] = 10'''&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''print(a)'''&lt;br /&gt;
 [1, 2, 3]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''print(b)'''&lt;br /&gt;
 [1, 10, 3]&lt;br /&gt;
&lt;br /&gt;
Panaudoję pjūvio operatorių &amp;lt;code&amp;gt;[:]&amp;lt;/code&amp;gt; mes sukuriame naują sąrašo kopiją. Turėk omeny, kad nukopijuojamas yra tik išorinis sąrašas. Bet koks vidinis sąrašas turi nuorodą į pirminį sąrašą. Todėl, kai sąraše yra sąrašų, reikia nukopijuoti ir vidinius sąrašus. Tu tai gali padaryti pats, tačiau Python'as savyje jau turi modulį, kuris tai padaro už tave. Gali panaudoti funkciją &amp;lt;code&amp;gt;deepcopy&amp;lt;/code&amp;gt; iš &amp;lt;code&amp;gt;copy&amp;lt;/code&amp;gt; modulio:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''import copy'''&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''a = [[1, 2, 3], [4, 5, 6]]'''&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''b = a[:]'''&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''c = copy.deepcopy(a)'''&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''b[0][1] = 10'''&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''c[1][1] = 12'''&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''print(a)'''&lt;br /&gt;
 [[1, 10, 3], [4, 5, 6]]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''print(b)'''&lt;br /&gt;
 [[1, 10, 3], [4, 5, 6]]&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; '''print(c)'''&lt;br /&gt;
 [[1, 2, 3], [4, 12, 6]]&lt;br /&gt;
&lt;br /&gt;
Iš pradžių atkreipk dėmesį į tai, kad &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; sąrašų sąrašas. Toliau, kai kodo eilutė &amp;lt;code&amp;gt;b[0][1] = 10&amp;lt;/code&amp;gt; yra vykdoma, tuomet &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; pasikeičia, bet &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt; ne. Taip nutiko todėl, kad vidiniai masyvai vis dar yra nuorodos, kai naudojamas pjūvio operatorius.  Iš kitos pusės, &amp;lt;code&amp;gt;deepcopy&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt; buvo visiškai nukopijuotas.&lt;br /&gt;
&lt;br /&gt;
Taigi, ar turėčiau nerimauti dėl nuorodų kiekvieną kartą, kai naudoju funkciją ar &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;?  Geros naujienos yra tos, kad tau reikia nerimauti apie nuorodas tik naudojant žodynus ir sąrašus. Skaičiai ir teksto eilutės sukuria nuorodas tik tada, kai yra vykdoma priskyrimo operacija, tačiau, kitos operacijos sukuria kopija ir tau nereikia sukti galvos ar netikėtai pasikeis reikšmė. Tačiau tau reikia turėt omeny nuorodas, kai keiti sąrašus ir žodynus. &lt;br /&gt;
&lt;br /&gt;
Turbūt susimąstei, kam išvis yra reikalingos nuorodos? Pagrindinė priežastis - greitis. Sukurti nuorodą sąrašo tūkstančiui elementų yra daug greičiau nei sukurti jų kopijas. Dar viena priežastis - tai, kad tu gali turėti funkciją, kuri leidžia modifikuoti sąrašus arba žodynus. Jei kada nors susidursi su keistomis problemomis, kai duomenys pasikeičia, nors neturėtų, tai prisimink apie nuorodas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--  On Sun, Sep 09, 2001 at 02:46:06PM +0100, Hamish Lawson wrote: --&amp;gt;&lt;br /&gt;
&amp;lt;!--  Hello Josh --&amp;gt;&lt;br /&gt;
&amp;lt;!--   --&amp;gt;&lt;br /&gt;
&amp;lt;!--  I think it's great that you have undertaken to write a non-programmer's --&amp;gt;&lt;br /&gt;
&amp;lt;!--  tutorial on Python. However may I suggest that a different approach to --&amp;gt;&lt;br /&gt;
&amp;lt;!--  the discussion of variables and references may make things easier for --&amp;gt;&lt;br /&gt;
&amp;lt;!--  both you and the reader, and lead to less potential confusion for the --&amp;gt;&lt;br /&gt;
&amp;lt;!--  novice when they explore Python further? --&amp;gt;&lt;br /&gt;
&amp;lt;!--   --&amp;gt;&lt;br /&gt;
&amp;lt;!--  Programming introductions that use a language like C or Pascal as the --&amp;gt;&lt;br /&gt;
&amp;lt;!--  medium often discuss variables in terms of boxes that store data. But --&amp;gt;&lt;br /&gt;
&amp;lt;!--  for a language like Python, I think this approach ends up making the --&amp;gt;&lt;br /&gt;
&amp;lt;!--  whole subject of variables and references more complicated than it need --&amp;gt;&lt;br /&gt;
&amp;lt;!--  be and means that the reader has a lot to unlearn later. --&amp;gt;&lt;br /&gt;
&amp;lt;!--  --&amp;gt;&lt;br /&gt;
&amp;lt;!--  Saying that &amp;quot;a = []&amp;quot; stores an empty list in 'a' and that &amp;quot;b = a&amp;quot; makes --&amp;gt;&lt;br /&gt;
&amp;lt;!--  'b' a reference to 'a' makes it appear that assignment is --&amp;gt;&lt;br /&gt;
&amp;lt;!--  context-dependent when it isn't really. Things get even trickier when --&amp;gt;&lt;br /&gt;
&amp;lt;!--  you have statements like &amp;quot;b = f()&amp;quot;. Instead a more coherent approach --&amp;gt;&lt;br /&gt;
&amp;lt;!--  might be to say that assignment to a variable stores a reference to --&amp;gt;&lt;br /&gt;
&amp;lt;!--  some object. The difference between &amp;quot;a = []&amp;quot; and &amp;quot;b = a&amp;quot; then lies in --&amp;gt;&lt;br /&gt;
&amp;lt;!--  whether it is a newly created object that you are storing a reference --&amp;gt;&lt;br /&gt;
&amp;lt;!--  to (as produced by '[]') or an existing object (as produced by 'a'), --&amp;gt;&lt;br /&gt;
&amp;lt;!--  *not* in whether or not a reference gets stored in the variable - it --&amp;gt;&lt;br /&gt;
&amp;lt;!--  always does. I believe this approach leads to much less confusion --&amp;gt;&lt;br /&gt;
&amp;lt;!--  overall and less need for special explanations. --&amp;gt;&lt;br /&gt;
&amp;lt;!--   --&amp;gt;&lt;br /&gt;
&amp;lt;!--  Fredrik Lundh has a good explanation of objects and references in --&amp;gt;&lt;br /&gt;
&amp;lt;!--  Python at http://www.effbot.org/guides/python-objects.htm. --&amp;gt;&lt;br /&gt;
&amp;lt;!--   --&amp;gt;&lt;br /&gt;
&amp;lt;!--  I hope you have found this useful. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Modulių naudojimas|next=Daugiau apie tekstines eilutes}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Labas,_Pasauli&amp;diff=3702</id>
		<title>Python Vadovėlis/Labas, Pasauli</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Labas,_Pasauli&amp;diff=3702"/>
		<updated>2021-12-15T13:06:50Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: pagražinimas ir asmens keitimas&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;
=== Ką sužinosi? ===&lt;br /&gt;
Perskaitęs šį skyrių, turėtum suprasti, kaip redaguoti programas teksto redaktoriuje arba kitaip vadinamam „IDLE“ kodo redaktoriuje, kaip programas išsaugoti kompiuterio atmintyje ir paprastai paleisti.&lt;br /&gt;
&lt;br /&gt;
=== Spausdinimas ===&lt;br /&gt;
Istoriškai taip susiklostė, kad programavimo pamokos dažniausiai prasideda nuo mažos ir paprastos programos pavadinimu „Hello, World!“ arba lietuviškai [[„Labas, Pasauli!“]].&lt;br /&gt;
&lt;br /&gt;
Python'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;
Jeigu naudoji paprastą kompiuterio tekstinį failą (.txt) programai rašyti - išsaugok šį failą ir pervadink, kad jis būtų &amp;lt;code&amp;gt;hello.py&amp;lt;/code&amp;gt; ir kodo redaktoriuje paleisk programą parašęs eilutę &amp;lt;code&amp;gt;python3 hello.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kitu atveju eik į „IDLE“ kodo redaktorių, sukurk naują langą ir tada sukurk programą, kaip aprašytą skyriuje [[Non-Programmer's Tutorial for Python 3/Intro#Creating_and_Running_Programs|Programų kūrimas ir paleidimas]].&lt;br /&gt;
&lt;br /&gt;
Kai paleisi šią programą, tuomet ji suveiks ir užrašys:&lt;br /&gt;
&lt;br /&gt;
 Labas, Pasauli!&lt;br /&gt;
&lt;br /&gt;
Įsidėmėk, kad rekomenduojame visus mūsų pateikiamus programos pavyzdžius pasibandyti pačiam - parašyk ir tada pasileisk programą. Pagal mūsų turimą praktiką, toks mokymosi procesas yra pats efektyviausias ir labiausiai pasiteisinantis.&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;Benas ir Liepa pakilo į kalną&amp;quot;)&lt;br /&gt;
print(&amp;quot;Kad atneštų indą pilną vandens.&amp;quot;)&lt;br /&gt;
print(&amp;quot;Benas nukrito ir sulaužė savo karūną,&amp;quot;)&lt;br /&gt;
print(&amp;quot;O Liepa suklupo iškart.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kai paleidi šią programą, ji parašo trumpą istoriją:&lt;br /&gt;
&lt;br /&gt;
 Benas ir Liepa pakilo į kalną&lt;br /&gt;
 Kad atneštų indą pilną vandens.&lt;br /&gt;
 Benas nukrito ir suslaužė savo karūną, &lt;br /&gt;
 O Liepa suklupo iškart.&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;Benas ir Liepa pakilo į kalną&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;
 Benas ir Liepa pakilo į kalną&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;Kad atneštų indą pilna vandens.&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;
 Kad atneštų indą pilna vandens.&lt;br /&gt;
&lt;br /&gt;
Taip kompiuteris žiūri į kiekvieną eilutę, o tada įvykdo duotą komandą ir eina toliau: skaito eilutę, įvykdo komandą ir t.t. Taip kompiuteris vykdo visas duotas 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 naudojamės „funkcija“ pavadinimu &amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt; arba „Angyje“ [[Rašymas|&amp;lt;code&amp;gt;rašyk&amp;lt;/code&amp;gt;.]] Po funkcijos pavadinimo &amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt; yra 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;
yra 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;)? Paprastai, tai vadiname „rašytinių simbolių seka“ ar trumpiau tariant „eilute“ (tekstine reikšme). Kitas tekstinės reikšmės pavyzdys yra &amp;lt;code&amp;gt;&amp;quot;Benas ir Liepa pakilo į kalną&amp;quot;&amp;lt;/code&amp;gt;. Na, o funkcijos iškvietimu vadiname eilutę, kurioje yra užrašytas funkcijos pavadinimas ir parametras esantis skliausteliuose.&lt;br /&gt;
&lt;br /&gt;
Funkcija ir jos argumentai yra vieno tipo „teiginys“, kurį galima naudoti Python'o programavimo kalboje. Teiginio 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, teiginį 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;
====\n rašyme====&lt;br /&gt;
&amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;, arba nauja eilutė. Rašant tekstą, visas tekstas po \n yra užrašomas naujoje eilutėje. Taip pat &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; gali būti naudojamas kaip „pabėgimo simbolis“ (escape character). 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;
Taip pat &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;
Be to, spausdinimo teiginys automatiškai naudoja &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;, 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;
=== Išraiškos ===&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;
print(&amp;quot;(&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;
„Angyje“:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
rašyk(&amp;quot;2 + 2 yra&amp;quot;, 2 + 2)&lt;br /&gt;
rašyk(&amp;quot;3 * 4 yra&amp;quot;, 3 * 4)&lt;br /&gt;
rašyk(&amp;quot;100 - 1 yra&amp;quot;, 100 - 1)&lt;br /&gt;
rašyk(&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, &amp;lt;code&amp;gt;print()&amp;lt;/code&amp;gt;(rašymo) funkcija yra su dvejais argumentais, kurie yra atskirti kableliu. Taigi pirmoje programos eilutėje&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ų išraiškų.&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'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 (exponentiation)&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 (modulis)&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 du dalybos būdai: vienas grąžina pasikartojantį dešimtainį skaičių, o kitas - liekaną ir visą skaičių.&lt;br /&gt;
Operacijų tvarka tokia pati kaip matematikoje:&lt;br /&gt;
* skliausteliuose &amp;lt;code&amp;gt;()&amp;lt;/code&amp;gt;&lt;br /&gt;
* rodikliai &amp;lt;code&amp;gt;**&amp;lt;/code&amp;gt;&lt;br /&gt;
* daugyba &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;, dalyba&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;, sveikųjų skaičių dalyba &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;, dalyba su liekana &amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt; &lt;br /&gt;
* 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 naudok skliaustelius užrašydamas formules.&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 gali būti naudojami kaip pastabos/paaiškinimai tau 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 naudojami ateičiai arba kitiems žmonėms, kurie skaito programą. &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 šio teksto nepaisys tol, kol atsiras tekstas naujos eilutės pradžioje.&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) # Jeigu būtume preciziškai tikslūs, tai čia gauname tik apytikslią 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 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;
'''Danija.py'''&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;
'''Mokykla.py'''&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;R&amp;quot;, 13 % 3)&lt;br /&gt;
print()&lt;br /&gt;
print(&amp;quot;Vidurinė)&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 R 1&lt;br /&gt;
 &lt;br /&gt;
 Vidurinė&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;
# Parašyk programą, kuri atspausdintų tavo vardą ir gimimo datą atskirose eilutėse&lt;br /&gt;
# Parašyk programą, kuri parodytų visų 7 [[#Aritmetinės_išraiškos|artimetinių operacijų]] panaudojimą.&lt;br /&gt;
&lt;br /&gt;
{{Solution|title=Sprendimas|text=&lt;br /&gt;
&lt;br /&gt;
1. Parašyk programą, kuri atspausdintų tavo vardą ir gimimo datą atskirose eilutėse&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;lapkričio 27, 1852&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;14 kovo 1879&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;Jonas Smitas&amp;quot;), (&amp;quot;gimęs&amp;quot;), (&amp;quot;14 kovo 1879&amp;quot;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Solution|title=Sprendimas|text=&lt;br /&gt;
2. Parašyk programą, kuri parodytų visų 7 [[#Aritmetinės_išraiškos|artimetinių operacijų]] panaudojimą.&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;
==== 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>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C5%BDodynai&amp;diff=3697</id>
		<title>Python Vadovėlis/Žodynai</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C5%BDodynai&amp;diff=3697"/>
		<updated>2021-12-15T12:14:01Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: viena raidelė&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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('1. Spausdink telefonų numerius')&lt;br /&gt;
    print('2. Pridėk telefono numerį')&lt;br /&gt;
    print('3. Pašalink telefono numerį')&lt;br /&gt;
    print('4. Ieškok telefono numerio')&lt;br /&gt;
    print('5. Išeik')&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): '''2'''&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: '''Benas'''&lt;br /&gt;
 Telefono numeris: '''869935951'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''2'''&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: '''Liepa'''&lt;br /&gt;
 Telefono numeris: '''869935952'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''2'''&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: '''Markas'''&lt;br /&gt;
 Telefono numeris: '''869935957'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''1'''&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): '''4'''&lt;br /&gt;
 Ieškok telefono numerio&lt;br /&gt;
 Vardas: '''Benas'''&lt;br /&gt;
 Telefono numeris yra 869935951&lt;br /&gt;
 Įvesk skaičių (1-5): '''3'''&lt;br /&gt;
 Pašalink telefono numerį&lt;br /&gt;
 Vardas: '''Markas'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''1'''&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): '''5'''&lt;br /&gt;
&lt;br /&gt;
Ši programa yra panaši į vardų sąrašą, pateiktą prieš tai buvusiame skyriuje apie sąrašus.  Štai kaip veikia programa.  Pirmiausia, funkcija &amp;lt;code&amp;gt;spausdink_meniu&amp;lt;/code&amp;gt; yra apibrėžiama.  &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'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ų.  Eilutės&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;
eina per žodyną ir spausdina visą informaciją.  Funkcija &amp;lt;code&amp;gt; numeriai.keys()&amp;lt;/code&amp;gt; grąžina 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.  Panašiai kaip sąrašai, teiginys &amp;lt;code&amp;gt;numeriai[x]&amp;lt;/code&amp;gt; naudojamas norint pasiekti konkretų žodyno narį.  Žinoma, šiuo atveju &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; yra eilutė.  Toliau, eilutė &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ę.  Toliau eilutės&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, pašalina.  Operatorius &amp;lt;code&amp;gt;vardas in numeriai&amp;lt;/code&amp;gt; grąžina &amp;lt;i&amp;gt;teisinga&amp;lt;/i&amp;gt; (angl. true), 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;i&amp;gt;neteisinga&amp;lt;/i&amp;gt; (angl. false).  Eilutė &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ę. Eilutės&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.  Raktai gali būti eilutės arba&lt;br /&gt;
numeriai.  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 = ['nd sk 1', 'nd sk 2', 'viktorina   ', 'nd sk 3', 'testas']&lt;br /&gt;
mokiniai = {'#Max': 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('\t', end=' ')&lt;br /&gt;
    for i in range(len(užduotys)):&lt;br /&gt;
        print(užduotys[i], '\t', end=' ')&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, '\t', end=' ')&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], '\t', end=' ')&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;
        name = 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], '\t', end=' ')&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): '''3'''&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): '''5'''&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): '''1'''&lt;br /&gt;
 Pridėk mokinį: '''Markas'''&lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): '''4'''&lt;br /&gt;
 Įrašyk pažymį&lt;br /&gt;
 Mokinys: '''Markas'''&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į: '''1'''&lt;br /&gt;
 Pažymys: '''25'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''2'''&lt;br /&gt;
 Pažymys: '''24'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''3'''&lt;br /&gt;
 Pažymys: '''45'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''4'''&lt;br /&gt;
 Pažymys: '''23'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''5'''&lt;br /&gt;
 Pažymys: '''95'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''0'''&lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): '''3'''&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): '''6'''&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ų vardas, 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 = {'#Max': 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; (nes &amp;lt;code&amp;gt;max_taškai&amp;lt;/code&amp;gt; ir buvo tai, kai priskyrimas buvo padarytas) (aš naudoju raktą &amp;lt;code&amp;gt;#Max&amp;lt;/code&amp;gt;, nes &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; yra surūšiuotas prieš bet kokias abėcėlės raides).  Toliau, &amp;lt;code&amp;gt;spausdink_meniu&amp;lt;/code&amp;gt; yra apibrėžtas.  Po to, &amp;lt;code&amp;gt;spausdink_visus_pažymius&amp;lt;/code&amp;gt; funkcija yra apibrėžta žemiau esančiose &lt;br /&gt;
eilutėse:&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('\t',end=&amp;quot; &amp;quot;)&lt;br /&gt;
    for i in range(len(užduotys)):&lt;br /&gt;
        print(užduotys[i], '\t',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, '\t',end=' ')&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 pirmieji raktai yra išimami iš &amp;lt;code&amp;gt;mokiniai&amp;lt;/code&amp;gt; žodyno su &amp;lt;code&amp;gt;raktai&amp;lt;/code&amp;gt; funkcija eilutėje &amp;lt;code&amp;gt;raktai = list(mokiniai.keys())&amp;lt;/code&amp;gt;.  &amp;lt;code&amp;gt;raktai&amp;lt;/code&amp;gt; yra iteruojamasis ir yra paverčiamas į sąrašą, tam kad būtų 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 &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; rakte.  Funkcija &amp;lt;code&amp;gt;spausdink_pažymius&amp;lt;/code&amp;gt; tiesiog spausdina sąrašą ir yra apibrėžta 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į prie savo vardo rakto.  Žymėjimas &amp;lt;code&amp;gt;[0] * len(max_taškai)&amp;lt;/code&amp;gt; tiesiog sukuria sąrašą 0-ių, kuris yra tokio pat ilgio kaip ir &amp;lt;code&amp;gt;max_taškai&amp;lt;/code&amp;gt; sąrašas.  &lt;br /&gt;
&lt;br /&gt;
Pašalinti mokinį pasirinkimas tiesiog ištrina mokinį, panašiai kaip ir telefonų knygutės pavyzdyje.  Įrašyti mokinį pasirinkimas yra šiek tiek sudėtingesnis.  Pažymiai yra  gaunami eilutėje &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 eilutėje &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ą (kaip ir ne  &amp;lt;code&amp;gt;mokiniai[vardas] = pažymiai&amp;lt;/code&amp;gt;).  Trūkstamo teiginio priežastis yra ta, kad &amp;lt;code&amp;gt;pažymiai&amp;lt;/code&amp;gt; iš tiesų yra kitas pavadinimas skirtas &amp;lt;code&amp;gt;mokiniai[vardas]&amp;lt;/code&amp;gt; ir 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 suteikia lengvą 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;
{{navigation |previous=Loginiai reiškiniai |next=Modulių naudojimas}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C5%BDodynai&amp;diff=3696</id>
		<title>Python Vadovėlis/Žodynai</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C5%BDodynai&amp;diff=3696"/>
		<updated>2021-12-15T12:06:48Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: brūkšnelis (yra)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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('1. Spausdink telefonų numerius')&lt;br /&gt;
    print('2. Pridėk telefono numerį')&lt;br /&gt;
    print('3. Pašalink telefono numerį')&lt;br /&gt;
    print('4. Ieškok telefono numerio')&lt;br /&gt;
    print('5. Išeik')&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): '''2'''&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: '''Benas'''&lt;br /&gt;
 Telefono numeris: '''869935951'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''2'''&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: '''Liepa'''&lt;br /&gt;
 Telefono numeris: '''869935952'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''2'''&lt;br /&gt;
 Pridėk vardą ir telefono numerį&lt;br /&gt;
 Vardas: '''Markas'''&lt;br /&gt;
 Telefono numeris: '''869935957'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''1'''&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): '''4'''&lt;br /&gt;
 Ieškok telefono numerio&lt;br /&gt;
 Vardas: '''Benas'''&lt;br /&gt;
 Telefono numeris yra 869935951&lt;br /&gt;
 Įvesk skaičių (1-5): '''3'''&lt;br /&gt;
 Pašalink telefono numerį&lt;br /&gt;
 Vardas: '''Markas'''&lt;br /&gt;
 Įvesk skaičių (1-5): '''1'''&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): '''5'''&lt;br /&gt;
&lt;br /&gt;
Ši programa yra panaši į vardų sąrašą, pateiktą prieš tai buvusiame skyriuje apie sąrašus.  Štai kaip veikia programa.  Pirmiausia, funkcija &amp;lt;code&amp;gt;spausdink_meniu&amp;lt;/code&amp;gt; yra apibrėžiama.  &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'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ų.  Eilutės&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;
eina per žodyną ir spausdina visą informaciją.  Funkcija &amp;lt;code&amp;gt; numeriai.keys()&amp;lt;/code&amp;gt; grąžina 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.  Panašiai kaip sąrašai, teiginys &amp;lt;code&amp;gt;numeriai[x]&amp;lt;/code&amp;gt; naudojamas norint pasiekti konkretų žodyno narį.  Žinoma, šiuo atveju &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; yra eilutė.  Toliau, eilutė &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ę.  Toliau eilutės&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, pašalina.  Operatorius &amp;lt;code&amp;gt;vardas in numeriai&amp;lt;/code&amp;gt; grąžina &amp;lt;i&amp;gt;teisinga&amp;lt;/i&amp;gt; (angl. true), 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;i&amp;gt;neteisinga&amp;lt;/i&amp;gt; (angl. false).  Eilutė &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ę. Eilutės&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.  Raktai gali būti eilutės arba&lt;br /&gt;
numeriai.  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 = ['nd sk 1', 'nd sk 2', 'viktorina   ', 'nd sk 3', 'testas']&lt;br /&gt;
mokiniai = {'#Max': 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('\t', end=' ')&lt;br /&gt;
    for i in range(len(užduotys)):&lt;br /&gt;
        print(užduotys[i], '\t', end=' ')&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, '\t', end=' ')&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], '\t', end=' ')&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;
        name = 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], '\t', end=' ')&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): '''3'''&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): '''5'''&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): '''1'''&lt;br /&gt;
 Pridėk mokinį: '''Markas'''&lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): '''4'''&lt;br /&gt;
 Įrašyk pažymį&lt;br /&gt;
 Mokinys: '''Markas'''&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į: '''1'''&lt;br /&gt;
 Pažymys: '''25'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''2'''&lt;br /&gt;
 Pažymys: '''24'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''3'''&lt;br /&gt;
 Pažymys: '''45'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''4'''&lt;br /&gt;
 Pažymys: '''23'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''5'''&lt;br /&gt;
 Pažymys: '''95'''&lt;br /&gt;
 Pakeisk kuris pažymį: '''0'''&lt;br /&gt;
 &lt;br /&gt;
 Meniu pasirinkimas (1-6): '''3'''&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): '''6'''&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ų vardas, 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 = {'#Max': 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; (nes &amp;lt;code&amp;gt;max_taškai&amp;lt;/code&amp;gt; ir buvo tai, kai priskyrimas buvo padarytas) (aš naudoju raktą &amp;lt;code&amp;gt;#Max&amp;lt;/code&amp;gt;, nes &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; yra surūšiuotas prieš bet kokias abėcėlės raides).  Toliau, &amp;lt;code&amp;gt;spausdink_meniu&amp;lt;/code&amp;gt; yra apibrėžtas.  Po to, &amp;lt;code&amp;gt;spausdink_visus_pažymius&amp;lt;/code&amp;gt; funkcija yra apibrėžta žemiau esančiose &lt;br /&gt;
eilutėse:&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('\t',end=&amp;quot; &amp;quot;)&lt;br /&gt;
    for i in range(len(užduotys)):&lt;br /&gt;
        print(užduotys[i], '\t',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, '\t',end=' ')&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 pirmieji raktai yra išimami iš &amp;lt;code&amp;gt;mokiniai&amp;lt;/code&amp;gt; žodyno su &amp;lt;code&amp;gt;raktai&amp;lt;/code&amp;gt; funkcija eilutėje &amp;lt;code&amp;gt;raktai = list(mokiniai.keys())&amp;lt;/code&amp;gt;.  &amp;lt;code&amp;gt;raktai&amp;lt;/code&amp;gt; yra iteruojamasis ir yra paverčiamas į sąrašą, tam kad būtų 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 &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; rakte.  Funkcija &amp;lt;code&amp;gt;spausdink_pažymius&amp;lt;/code&amp;gt; tiesiog spausdina sąrašą ir yra apibrėžtas 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į prie savo vardo rakto.  Žymėjimas &amp;lt;code&amp;gt;[0] * len(max_taškai)&amp;lt;/code&amp;gt; tiesiog sukuria sąrašą 0-ių, kuris yra tokio pat ilgio kaip ir &amp;lt;code&amp;gt;max_taškai&amp;lt;/code&amp;gt; sąrašas.  &lt;br /&gt;
&lt;br /&gt;
Pašalinti mokinį pasirinkimas tiesiog ištrina mokinį, panašiai kaip ir telefonų knygutės pavyzdyje.  Įrašyti mokinį pasirinkimas yra šiek tiek sudėtingesnis.  Pažymiai yra  gaunami eilutėje &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 eilutėje &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ą (kaip ir ne  &amp;lt;code&amp;gt;mokiniai[vardas] = pažymiai&amp;lt;/code&amp;gt;).  Trūkstamo teiginio priežastis yra ta, kad &amp;lt;code&amp;gt;pažymiai&amp;lt;/code&amp;gt; iš tiesų yra kitas pavadinimas skirtas &amp;lt;code&amp;gt;mokiniai[vardas]&amp;lt;/code&amp;gt; ir 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 suteikia lengvą 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;
{{navigation |previous=Loginiai reiškiniai |next=Modulių naudojimas}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Funkcij%C5%B3_apibr%C4%97%C5%BEimas&amp;diff=3597</id>
		<title>Python Vadovėlis/Funkcijų apibrėžimas</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Funkcij%C5%B3_apibr%C4%97%C5%BEimas&amp;diff=3597"/>
		<updated>2021-12-07T11:52:32Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: peržiūra nr. 1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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 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 lygios.&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 šios programos 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 paimama iš programos, kai funkcija yra iškviečiama. Vėliau eina dvitaškis &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;, po kurio esantys teiginiai yra vykdomi naudojant šią funkciją. Teiginiai tęsiami 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; teiginys grąžina reikšmę į vietą, kur buvo iškviesta funkcija, kaip pirmoje mūsų kurtoje programoje rezultatas buvo grąžintas, kur kvietėme &amp;lt;code&amp;gt;print()&amp;lt;/code&amp;gt; funkciją. Na, o dabar galime kurti 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 gali būti naudojamos kartojant užduotis, kurios negrąžina reikšmių. Štai keli pavyzdžiai:&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_labas(&amp;quot;Fredas&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 Fredas&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. Šis pavyzdys rodo dar kelis svarbius dalykus, kuriuos gali padaryti naudojant funkcijas. Taip pat atkreipk dėmesį, kad funkcijai nereikia grąžinti vertės - 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 yra globalūs kintamieji, o 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;
a_var = 10&lt;br /&gt;
b_var = 15&lt;br /&gt;
e_var = 25&lt;br /&gt;
&lt;br /&gt;
def funkcija(a_var):&lt;br /&gt;
    print(&amp;quot;funkcijoje a_var =&amp;quot;, a_var)&lt;br /&gt;
    b_var = 100 + a_var&lt;br /&gt;
    d_var = 2 * a_var&lt;br /&gt;
    print(&amp;quot;funkcijoje  b_var =&amp;quot;, b_var)&lt;br /&gt;
    print(&amp;quot;funkcijoje  d_var =&amp;quot;, d_var)&lt;br /&gt;
    print(&amp;quot;funkcijoje  e_var =&amp;quot;, e_var)&lt;br /&gt;
    return b_var + 10&lt;br /&gt;
&lt;br /&gt;
c_var = funkcija(b_var)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;a_var =&amp;quot;, a_var)&lt;br /&gt;
print(&amp;quot;b_var =&amp;quot;, b_var)&lt;br /&gt;
print(&amp;quot;c_var =&amp;quot;, c_var)&lt;br /&gt;
print(&amp;quot;d_var =&amp;quot;, d_var)&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  a_var =  15&lt;br /&gt;
 funkcijoje  b_var =  115&lt;br /&gt;
 funkcijoje  d_var =  30&lt;br /&gt;
 funkcijoje  e_var =  25&lt;br /&gt;
 a_var =  10&lt;br /&gt;
 b_var =  15&lt;br /&gt;
 c_var =  125&lt;br /&gt;
 d_var = &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;d_var = &amp;quot;, d_var)&lt;br /&gt;
 NameError: pavadinimas 'd_var' yra neapibrėžtas&lt;br /&gt;
&lt;br /&gt;
Šiame pavyzdyje kintamieji &amp;lt;code&amp;gt;a_var&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;b_var&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;d_var&amp;lt;/code&amp;gt; yra lokalūs kintamieji priklausantys funkcijai &amp;lt;code&amp;gt;funkcija()&amp;lt;/code&amp;gt;. Po argumento &amp;lt;code&amp;gt;return b_var + 10&amp;lt;/code&amp;gt; visi jie nustoja egzistuoti. Kintamasis &amp;lt;code&amp;gt; a_var &amp;lt;/code&amp;gt; yra parametro pavadinimas, todėl tai jį automatiškai padaro lokaliu kintamuoju. Kintamieji &amp;lt;code&amp;gt;b_var&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;d_var&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; b_var = 100 + a_var &amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt; d_var = 2 * a_var &amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Funkcijos &amp;lt;code&amp;gt;funkcija()&amp;lt;/code&amp;gt; viduje nėra jai priskirtos vertės. Kai funkcija iškviečiama naudojant &amp;lt;code&amp;gt; c_var = funkcija(b_var) &amp;lt;/code&amp;gt;, 15 priskiriama &amp;lt;code&amp;gt; a_var &amp;lt;/code&amp;gt;, nes tuo metu &amp;lt;code&amp;gt; b_var &amp;lt;/code&amp;gt; yra 15, kai kviečiama funkcija &amp;lt;code&amp;gt; funkcija(15) &amp;lt;/code&amp;gt;. Galiausiai &amp;lt;code&amp;gt; a_var &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;a_var&amp;lt;/code&amp;gt; ir &amp;lt;code&amp;gt;b_var&amp;lt;/code&amp;gt;, kurie buvo naudojami vietoj globalių kintamųjų dingo. Tada teiginys &amp;lt;code&amp;gt; print (&amp;quot;a_var =&amp;quot;, a_var) &amp;lt;/code&amp;gt; atspausdina reikšmę &amp;lt;code&amp;gt; 10 &amp;lt;/code&amp;gt;, o ne reikšmę &amp;lt;code&amp;gt; 15 &amp;lt;/code&amp;gt; kai dingo lokalus kintamasis, kuris slėpė globalaus kintamojo 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;d_var&amp;lt;/code&amp;gt; nebeegzistuoja nuo tada, kai baigėsi &amp;lt;code&amp;gt;funkcija()&amp;lt;/code&amp;gt;. Išjungus funkciją, visi lokalūs kintamieji ištrinami. Jeigu nori, ką nors gauti iš funkcijos, turėsi naudoti žodį &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;e_var&amp;lt;/code&amp;gt; vertė išlieka nepakitusi, nes tai nėra parametras ir jis niekada nerodomas kairėje funkcijos pusėje. &amp;lt;code&amp;gt; a_func &amp;lt;/code&amp;gt;. Kai funkcijos viduje pasiekiamas globalus kintamasis, tai yra išorinis kintamasis esantis 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;
'''temperatūra2.py'''&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; 'p' spausdinti pasirinkimus&amp;quot;)&lt;br /&gt;
    print(&amp;quot; 'c' konvertuoti iš Celsijaus&amp;quot;)&lt;br /&gt;
    print(&amp;quot; 'f' konvertuoti iš Farenheitų&amp;quot;)&lt;br /&gt;
    print(&amp;quot; 'q' 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;p&amp;quot;&lt;br /&gt;
while pasirinkimas != &amp;quot;q&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;option: &amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        pasirinkimas= &amp;quot;p&amp;quot;    #Arba pasirinkimas! = &amp;quot;q&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;
  'p' spausdinti pasirinkimus&lt;br /&gt;
  'c' konvertuoti iš Celsijaus&lt;br /&gt;
  'f' konvertuoti iš Farenheitų&lt;br /&gt;
  'q' išjungti programą&lt;br /&gt;
 pasirinkimas: '''c'''&lt;br /&gt;
 Celsijaus temperatūra: '''30''' &lt;br /&gt;
 Farenheitai: 86.0&lt;br /&gt;
 pasirinkimas: '''f'''&lt;br /&gt;
 Farenheitų temperatūra: '''60'''&lt;br /&gt;
 Celsijus: 15.5555555556&lt;br /&gt;
 pasirinkimas: '''q'''&lt;br /&gt;
&lt;br /&gt;
'''plotas2.py'''&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('Labas!')&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('Mano vardas yra,', 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('Privalo būti teigiamas skaičius')&lt;br /&gt;
        skaičius = float(input(sugalvotas_skaičius))&lt;br /&gt;
    return skaičius&lt;br /&gt;
 &lt;br /&gt;
vardas = input('Tavo vardas: ')&lt;br /&gt;
pasisveikinimas()&lt;br /&gt;
mano_vardas(name)&lt;br /&gt;
print()&lt;br /&gt;
print('Kad rastum stačiakampio plotą,')&lt;br /&gt;
print('įrašyk plotį ir aukštį')&lt;br /&gt;
print()&lt;br /&gt;
w = teigiama_įvestis('Plotis: ')&lt;br /&gt;
h = teigiama_įvestis('Aukštis: ')&lt;br /&gt;
 &lt;br /&gt;
print('Plotis =', w, ' Aukštis =', h, ' Plotas =', 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: '''Jonas'''&lt;br /&gt;
 Labas!&lt;br /&gt;
 Mano vardas yra Jonas&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: '''-4'''&lt;br /&gt;
 Privalo būti teigiamas skaičius&lt;br /&gt;
 Plotis: '''4'''&lt;br /&gt;
 Aukštis: '''3'''&lt;br /&gt;
 Plotis = 4  Aukštis = 3  Plotas = 12&lt;br /&gt;
&lt;br /&gt;
=== Užduotis ===&lt;br /&gt;
Perrašyk programą plotas2.py, kuri yra aukščiau pateiktame pavyzdyje, kad turėtum atskiras kvadrato, stačiakampio ir apskritimo ploto funkcijas ((&amp;lt;code&amp;gt;3.14 * spindulys**2&amp;lt;/code&amp;gt;). Taip pat šioje programoje turėtų būti sukurtas meniu:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Solution|title=Sprendimas|text=&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 opcijos():&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;
opcijos()&lt;br /&gt;
while pasirinkimas != &amp;quot;q&amp;quot;:&lt;br /&gt;
    choice = input(&amp;quot;Įrašykite jūsų 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;
        opcijos()&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;
        opcijos()&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;
        opcijos()&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;
        opcijos()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Debugging |next=Advanced Functions Example}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Autoriai&amp;diff=3596</id>
		<title>Python Vadovėlis/Autoriai</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Autoriai&amp;diff=3596"/>
		<updated>2021-12-07T10:59:53Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: /* Lietuviškas vertimas ir modifikacija */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Originalaus (angliško) vadovėlio autoriai&lt;br /&gt;
&lt;br /&gt;
; Josh Cogliati&lt;br /&gt;
: Jrincayc, jjcogliati-jan2007 AT yahoo.com&lt;br /&gt;
&lt;br /&gt;
=== Angliškos versijos bendraautoriai ===&lt;br /&gt;
* Mitchell Aikens, LGIT, WSIT, AAS &lt;br /&gt;
* Kiah Morante &lt;br /&gt;
*Elizabeth Cogliati&lt;br /&gt;
*James A. Brown&lt;br /&gt;
*Joe Oppegaard&lt;br /&gt;
*Benjamin Hell &lt;br /&gt;
&lt;br /&gt;
=== Lietuviškas vertimas ir modifikacija ===&lt;br /&gt;
* Mantas Urbonas, Visma Lietuva&lt;br /&gt;
* Povilas Jeremičius, Visma Lietuva&lt;br /&gt;
* Martynas Teleiša, Visma lietuva&lt;br /&gt;
* Artūras Nikončukas, Visma Lietuva&lt;br /&gt;
* Laura Kutovaja, Visma Lietuva&lt;br /&gt;
* Monika Bijeikytė, Visma Lietuva&lt;br /&gt;
* Rokas Cvirka, Visma Lietuva&lt;br /&gt;
* Modesta Jeremičienė, Visma Lietuva&lt;br /&gt;
* Mindaugas Pikelis, Visma Lietuva&lt;br /&gt;
* Živilė Bliūdžiūtė, Visma Lietuva&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=BEGINNING |next=Front matter}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Autoriai&amp;diff=3595</id>
		<title>Python Vadovėlis/Autoriai</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/Autoriai&amp;diff=3595"/>
		<updated>2021-12-07T10:57:40Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: /* Lietuviškas vertimas ir modifikacija */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Originalaus (angliško) vadovėlio autoriai&lt;br /&gt;
&lt;br /&gt;
; Josh Cogliati&lt;br /&gt;
: Jrincayc, jjcogliati-jan2007 AT yahoo.com&lt;br /&gt;
&lt;br /&gt;
=== Angliškos versijos bendraautoriai ===&lt;br /&gt;
* Mitchell Aikens, LGIT, WSIT, AAS &lt;br /&gt;
* Kiah Morante &lt;br /&gt;
*Elizabeth Cogliati&lt;br /&gt;
*James A. Brown&lt;br /&gt;
*Joe Oppegaard&lt;br /&gt;
*Benjamin Hell &lt;br /&gt;
&lt;br /&gt;
=== Lietuviškas vertimas ir modifikacija ===&lt;br /&gt;
* Mantas Urbonas, Visma Lietuva&lt;br /&gt;
* Povilas Jeremičius, Visma Lietuva&lt;br /&gt;
* Martynas Teleiša, Visma lietuva&lt;br /&gt;
* Artūras Nikončukas, Visma Lietuva&lt;br /&gt;
* Laura Kutovaja, Visma Lietuva&lt;br /&gt;
* Monika Bijeikytė, Visma Lietuva&lt;br /&gt;
* Rokas Cvirka, Visma Lietuva&lt;br /&gt;
* Modesta Jeremičienė, Visma Lietuva&lt;br /&gt;
* Mindaugas Pikelis, Visma Lietuva&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=BEGINNING |next=Front matter}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3555</id>
		<title>Python Vadovėlis/Įvadas į objektinį programavimą Python 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3555"/>
		<updated>2021-11-17T12:27:33Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: Paskutinės dvi eilutės&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objektinis programavimas==&lt;br /&gt;
&lt;br /&gt;
Iki šiol jūs rašėte kodą pagal procedūrinio programavimo taisykles. Tačiau, yra daug programų, kurios - parašytos pagal objektinio programavimo taisykles. Žinant abu programavimo tipus ir jų skirtumus yra labai svarbu. Informatikoje, daug svarbių kalbų kaip C++ ar Java dažnai naudoja objektinio programavimo taisykles.&lt;br /&gt;
&lt;br /&gt;
Pradedantiesiems ir mokiniams neturintiems programavimo žinių objektinis programavimas dažnai gali atrodyti painus ir tai yra visiškai normalu. Nesijauskite blogai jei iš pradžių suprasti nesiseka. Jei šis skyrius jums to suprasti nepadės, yra ir daugiau informatyvių šaltinių, kurie jums padės atsakyti į visus klausimus.&lt;br /&gt;
&lt;br /&gt;
Šis skyrius yra padalintas į keletą pamokų. Kiekviena pamoka - skirta paaiškinti skirtingas objektinio programavimo dalis. &amp;lt;b&amp;gt;LABAI SVARBU&amp;lt;/b&amp;gt; suprasti jas visas. Nepamirškite prieš kiekvieną pamoką perskaityti įžangą, kuri paaiškins pagrindines idėjas, sąvokas ir kitas objektinio programavimo sritis.&lt;br /&gt;
&lt;br /&gt;
==Įžanga==&lt;br /&gt;
&lt;br /&gt;
Galvokite apie procedūrą kaip apie funkciją. Funkcija turi konkrečią paskyrtį ir jų gali būti įvairių: rinkti įvestis, atlikti matematinius skaičiavimus, atvaizduoti ar manipuliuoti duomenis. Paprastai, procedūros manipuliuoja duomenis, kurie yra aprašyti atskirai. Šie duomenys yra dažnai perduodami iš vienos procedūros į kitą. Ir kai programa pasidaro per didelė, tai padaro duomenų perdavimą komplikuotą.&lt;br /&gt;
Pavyzdžiui, parašėte programą, kuri kintamuosiuose išsaugo produkto duomenis. Kai klientas paprašo informacijos apie produktą, kintamieji, kurie turi visą informaciją, yra perduodami įvairioms funkcijoms su skirtingomis paskirtimis. Laikui bėgant ir saugant vis daugiau duomenų apie turimus produktus, jūs sugalvojate išsaugoti turimą informaciją sąrašuose ar žodynuose. Norint, jog jūsų programa veiktų, jūs dabar turite redaguoti kiekvieną funkciją, kuri naudojo tuos kintamuosius, taip, kad dabar ji galėtų priimti ir manipuliuoti sąrašus ar žodynus. Įsivaizduokite kiek laiko jums reikėtų norint peržiūrėti ir pakeisti šimtus failų. Jūs išprotėtumėte! Nekalbant apie tai, jog klaidas daro net ir labiausiai patyrę programuotojai, tad taip pat reikėtų taisyti begalę klaidų. Toks programavimas yra pernelyg neoptimalus.&lt;br /&gt;
Procedūrinis programavimas yra paremtas procedūromis (funkcijomis). Objektinis programavimas yra paremtas objektais. Ar prisimenate kaip procedūrinė programa atskyrė duomenis nuo kodo? Ar prisimenate programą, kuri turėjo šimtus failų ir norint kažką pakeisti reikėdavo ilgai joje narpstytis? &lt;br /&gt;
Galvokite apie &amp;lt;i&amp;gt;objektą&amp;lt;/i&amp;gt; kaip apie minėtų failų ir duomenų &amp;quot;kombinaciją&amp;quot; į vieną esybę. Technine prasme, objektas yra esybė, kuri savyje turi duomenis ir procedūras (kodą, funkcijas, t.t.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Duomenis objekto viduje vadiname &amp;lt;i&amp;gt;atributais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Funkcijas ar procedūras objekto viduje vadiname &amp;lt;i&amp;gt;metodais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvokite apie &amp;lt;b&amp;gt;duomenų atributus&amp;lt;/b&amp;gt; kaip apie kintamuosius. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvokite apie &amp;lt;b&amp;gt;metodus&amp;lt;/b&amp;gt; kaip apie funkcijas ar procedūras. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į paprastą, kasdienį pavyzdį. Lemputė ir jungiklis tavo kambaryje.&lt;br /&gt;
Atributai bus štai tokie.&lt;br /&gt;
&lt;br /&gt;
* šviesa_įjungta (True False)&lt;br /&gt;
* jungiklio_pozicija (Viršuje arba Apačioje)&lt;br /&gt;
* elektros_tekėjimas (True arba False)&lt;br /&gt;
&lt;br /&gt;
Metodai būtų štai tokie.&lt;br /&gt;
&lt;br /&gt;
* pakeisti_jungiklio_poziciją&lt;br /&gt;
* pakeisti_elektros_tekėjimą&lt;br /&gt;
&lt;br /&gt;
Atributai gali būti matomi ir nematomi. Pavyzdžiui, mes negalime matyti elektros tekančios į lemputę. Mes tik žinome, kad elektra išties teka, nes ji tuo metu skleidžia šviesą. Nepaisant to, mes galime matyti jungiklio poziciją (jungiklio_pozicija) ir taip pat mes matome ar šviesa yra įjungta ar ne (šviesa_įjungta). Kai kurie metodai yra &amp;lt;i&amp;gt;privatūs&amp;lt;/i&amp;gt;. Tai reiškia, jog jų neišeina tiesiogiai pakeisti. Pavyzdžiui, nebent būtų nukerpami laidai (to nedarykite ir vardan šio pavyzdžio manykite, jog laidai neegzistuoja), jūs negalėtumėte pakeisti elektros tėkmės tiesiogiai. Jūs taip pat negalite tiesiogiai įtakoti lemputės šviesos (ne, jūs negalite atsukti lemputės ar jos sudaužyti!). Bet jūs visada galite šiuos atributus įtakoti netiesiogiai naudojant objekto &amp;lt;i&amp;gt;metodus&amp;lt;/i&amp;gt;. Jeigu nesumokėsite mokesčių, metodas pavadinimu &amp;lt;code&amp;gt;pakeisti_elektros_tekėjimą&amp;lt;/code&amp;gt; pakeis &amp;lt;code&amp;gt;elektros_tekėjimas&amp;lt;/code&amp;gt; reikšmę į FALSE. Jei jūs įjungsite jungiklį, &amp;lt;code&amp;gt;pakeisti_jungiklio_poziciją&amp;lt;/code&amp;gt; metodas pakeis &amp;lt;code&amp;gt;šviesa_įjungta&amp;lt;/code&amp;gt; atributo reikšmę.&lt;br /&gt;
&lt;br /&gt;
Dabar jau tikriausiai galvojate, &amp;quot;Ką tai turi bendro su Pitonu?&amp;quot; ar, &amp;quot;Aš nesuprantu, bet kaip man sukurti tą Objektą?&amp;quot;. Na, mes beveik priėjome prie atsakymų! Tik turiu paaiškinti dar vieną dalyką prieš neriant į kodą.&lt;br /&gt;
&lt;br /&gt;
Pitone objekto atributai ir metodai yra nurodomi &amp;lt;b&amp;gt;klasės&amp;lt;/b&amp;gt;. Galvokite apie klasė kaip apie objekto techninį piešinį. Pavyzdžiui, jūsų namai - objektas kuriame gyvenate - taip pat jį galite vadinti butu, vasarnamiu, prakartėle ar bet kuo kitu, buvo pastatytas naudojant techinius piešinius. Šie techniniai piešiniai būtų vadinami klasėmis, kurios buvo panaudotos projektuojant jūsų namus, butą, vasarnamį, na suprantate apie ką kalbu. &lt;br /&gt;
&lt;br /&gt;
Dar kartą, klasė mums pasako kaip sukurti objektą. Techniniais terminais tariant, ir tai yra labai svarbu, klasė nusako naudojamus duomenų atributus ir metodus objekte.&lt;br /&gt;
&lt;br /&gt;
Norint sukurti klasę, mes suprogramuojame &amp;lt;i&amp;gt;klasės apibrėžimą&amp;lt;/i&amp;gt;. Klasės apibrėžimas, tai grupė pareiškimų, kurie nusako objekto atributus ir metodus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Pirma pamoka&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apačioje yra procedūrinė programa, kuri atlieka paprastą matematinį veiksmą su vartotojo įvestu skaičiu.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Programa parašyta Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
&lt;br /&gt;
# Procedūra 1&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Pasiimame skaičių, kurį manipuliuosime.&lt;br /&gt;
        num = float(input(&amp;quot;Įrašykite skaičių.\n&amp;quot;))&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su pasiimtu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 2&lt;br /&gt;
        addednum = addfive(num)&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su ankščiau išsaugotu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 3&lt;br /&gt;
        multipliednum = multiply(addednum)&lt;br /&gt;
        # Paduodame skaičių procedūrai 4&lt;br /&gt;
        display(multipliednum)&lt;br /&gt;
    # Susidorojame su išimtimis, kurios gali atsirasti dėl netinkamo vartotojo skaičiaus įvedimo&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Privalote įvesti tinkamą skaičių.\n&amp;quot;)&lt;br /&gt;
        # Atstatome kintamojo num reikšmę, kad ištrintumėm netinkamą vartotojo įvestį.&lt;br /&gt;
        num = 0&lt;br /&gt;
        # Dar kartą iškviečiame main.&lt;br /&gt;
        main()&lt;br /&gt;
&lt;br /&gt;
# Procedūra 2&lt;br /&gt;
def addfive(num):&lt;br /&gt;
    return num + 5&lt;br /&gt;
&lt;br /&gt;
# Procedūra 3&lt;br /&gt;
def multiply(addednum):&lt;br /&gt;
    return addednum * 2.452&lt;br /&gt;
&lt;br /&gt;
# Procedūra 4&lt;br /&gt;
def display(multi):&lt;br /&gt;
    # Parodome galutinį rezultatą.&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra &amp;quot;, multi)&lt;br /&gt;
&lt;br /&gt;
# Kviečiame procedūrą 1&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime skaitemnį &amp;quot;5&amp;quot;, gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 5&lt;br /&gt;
 Galutinis rezultatas yra 24.52&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime reikšmę &amp;quot;g&amp;quot;, tada pasitaisysime ir įrašysime skaitmenį &amp;quot;8&amp;quot;, tada gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 g&lt;br /&gt;
 Privalote įvesti tinkamą skaičių.&lt;br /&gt;
 &lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 8&lt;br /&gt;
 Galutinis rezultatas yra 31.875999999999998&lt;br /&gt;
&lt;br /&gt;
Žemiau matome klasę ir programą, kuri naudoją nurodytą klasę. Ši objektinio programavimo programavimo būdu parašyta programa daro tą patį ką prieš tai darė procedūriniu programavimo būdu parašyta programa. Apžiūrėkime keletą svarbių objektinio programavimo būdo konceptų prieš neriant į ankščiau minėtą klasę ir programą.&lt;br /&gt;
Norint sukurti klasę, mes naudojame &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; raktažodį. Po raktažodžio jūs rašote pavadinimą kurį norėtumėte, jog turėtų jūsų klasė. Dažnai naudojama praktika kuriant klasių pavadinimus yra &amp;lt;i&amp;gt;NaujųŽodžiųRašymasIšDidžiosiosRaidės&amp;lt;/i&amp;gt;.&lt;br /&gt;
Jei norėčiau sukurti klasę pavadinimu dirtysocks, kodas atrodytų taip:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class DirtySocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Iš pradžių pažiūrėkime į klasę. Programa, kuri naudos šią klasę, bus parodyta paskui.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexample.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Class&lt;br /&gt;
&lt;br /&gt;
class NumChange:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.__number = 0&lt;br /&gt;
&lt;br /&gt;
    def addfive(self,num):&lt;br /&gt;
        self.__number = num&lt;br /&gt;
        return self.__number + 5&lt;br /&gt;
&lt;br /&gt;
    def multiply(self,added):&lt;br /&gt;
        self.__added = added&lt;br /&gt;
        return self.__added * 2.452&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Programa, kuri naudoja viršuje esančią klasę yra parašyta žemiau.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexampleprog.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstracija - Programa&lt;br /&gt;
&lt;br /&gt;
import oopexample&lt;br /&gt;
&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    num = float(input(&amp;quot;Įrašykite skaičių.\n&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    added = maths.addfive(num)&lt;br /&gt;
&lt;br /&gt;
    multip = maths.multiply(added)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra &amp;quot;, multip)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tikriausiai jūs dabar esate pasimetę. Tai visiškai suprantama. Pradžioje pasistenkime suprasti klasę.&lt;br /&gt;
Klasė yra pavadinta &amp;quot;NumChange&amp;quot;&lt;br /&gt;
Ši klasė turi tris metodus&lt;br /&gt;
* __init__&lt;br /&gt;
* addfive&lt;br /&gt;
* multiply&lt;br /&gt;
&lt;br /&gt;
Šie trys metodai savyje turi labai panašų kodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atkreipkite dėmesį į tai, jog kiekvienas metodas turi parametrą pavadinimu &amp;quot;self&amp;quot;. Kiekvienas klasės metodas turi būtinai turėti šį parametrą. Šis parametras nebūtinai turi būti su pavadinimu &amp;quot;self&amp;quot;, bet tai yra priimta kaip geriausia praktika, tad tikriausiai ir jūs turėtumėte jį taip vadinti. Šis parametras yra reikalingas kiekviename metode nes kai jis yra iškviečiamas, jis turi žinoti su kuriuo objekto atributu turėtų atlikti operacijas. Net kai turime tik vieną objektą, mes turime pasirūpinti, kad programa žinotų, jog mes norime naudoti atributus aprašytus būtent toje klasėje. Todėl mes turime būti saugūs ir naudoti &amp;quot;self&amp;quot; parametrą.&lt;br /&gt;
&lt;br /&gt;
Peržiūrėkime pirmą metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dauguma pitono klasių turi &amp;lt;code&amp;gt;__init__&amp;lt;/code&amp;gt;, kuris yra paleidžiamas automatiškai kiekvieną kartą, kai atmintyje yra sukuriama tos klasės instancija. (Kai sukuriame nuorodą į klasę, yra sukuriama tos klasės &amp;lt;i&amp;gt;instancija&amp;lt;/i&amp;gt; [objektas]). Šis metodas yra paprastai vadinamas &amp;lt;i&amp;gt;inicijavimo metodu&amp;lt;/i&amp;gt;. Kai šis metodas yra paleidžiamas, &amp;quot;self&amp;quot; parametras yra automatiškai priskiriamas tariamam objektui. __init__ metodas inicijuoja klasės atributus, dėl šios priežasties jis yra pavadintas inicijavimo metodu. ↵Po __init__ metodu, iš pradžių &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt; atributui mes priskiriame 0.&lt;br /&gt;
Mes sukuriame nuorodą į turimo objekto atributą panaudojant taškinį žymėjimą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.__number = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kodas &amp;lt;code&amp;gt;self.__number = 0&amp;lt;/code&amp;gt; reiškia, jog &amp;quot;objekte esančio &amp;quot;number&amp;quot; atributo reikšmė yra 0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į sekantį metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
    self.__number = num&lt;br /&gt;
    return self.__number + 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis metodas yra pavadintas &amp;quot;addfive&amp;quot;. Jis priima parametrą pavadinimu &amp;quot;num&amp;quot;. Metode esanti logika tada priskiria &amp;quot;num&amp;quot; reikšmę objekte esančiui atributui su pavadinimu &amp;quot;number&amp;quot;. Tada metodas prideda 5 prie &amp;quot;number&amp;quot; ir jį grąžina jį iššaukiančiui.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į trečiajį metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
    self.__added = added&lt;br /&gt;
    return self.__added * 2.453&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis metodas yra pavadintas &amp;quot;multiply&amp;quot;. Jis priima parametrą pavadinimu &amp;quot;added&amp;quot;. Metodas priskiria priimtą reikšmę objekte esančiui atributui su pavadinimu &amp;quot;added&amp;quot; ir grąžina &amp;quot;added&amp;quot; atributo ir 2.452 sandaugą jį iššaukiančiui.&lt;br /&gt;
&lt;br /&gt;
Ar atkreipėte dėmesį į tai, jog kiekvienas metodo pavadinimas prasideda su dviem pabraukimais? Pabandykime tai suprasti.&lt;br /&gt;
Prieš tai mes minėjome, jog objektas, su metodų pagalba, dirba su atributais apibrėžtais jame pačiame. Būtų idealu, jei tuos atributus mes galėtumėm pakeisti TIK SU METODAIS ESANČIAIS PAČIAME OBJEKTE. Įmanoma turėti iššorinį kodą, kuris galėtų manipuliuoti tais pačiais atributais. Norint &amp;quot;paslėpti&amp;quot; atributus, taip, kad juos matytų metodai aprašyti pačiame objekte, turime naudoti du pabraukimus prieš objekto pavadinima, taip kaip ir demonstravome. Ištrynus abu pabraukimus nuo atributo pavadinimo mes juo galėsime manipuliuoti kodu, kuris yra parašytas objekto išorėje.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į programą, kuri naudoja klasę, kurią aptarėme.&lt;br /&gt;
&lt;br /&gt;
Atkreipkite dėmesį į pirmą eilutę, kuri nėra komentaras.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import oopexample&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši kodo eilutė importuoją klasę, kurią išsaugojome atskirame faile (modulyje). Klasės nebūtinai turi būti talpinamos atskiruose failuose, bet tai yra priimta kaip gera praktika, tad yra verta jau nuo pat pradžių priprasti prie modulių importavimo.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši eilutė sukuria NumChange pavadinimu, &amp;quot;oopexample&amp;quot; modulyje patalpintos klasės instanciją, kuri yra priskiriama &amp;quot;maths&amp;quot; kintamajam.&lt;br /&gt;
Sintaksė atrodo taip:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;i&amp;gt;modulename.Classname()&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Apibrėžiame main funkciją.&lt;br /&gt;
Pasiimame skaičių iš vartotojo.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė &amp;lt;code&amp;gt;added = maths.addfive(num)&amp;lt;/code&amp;gt; nusiunčia &amp;quot;num&amp;quot; kintamojo reikšmę metodui pavadinimu &amp;quot;addfive&amp;quot;. Metodas yra aprašytas klasėje, kurios instanciją išsaugojome kintamajame pavadinimu &amp;quot;maths&amp;quot;. &amp;quot;addfive&amp;quot; metodas išsaugo gautą reikšmę į kintamajį pavadinimu &amp;quot;added&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė &amp;lt;code&amp;gt;multip = maths.multiply(added)&amp;lt;/code&amp;gt; nusiunčia &amp;quot;added&amp;quot; kintamojo reikšmę metodui pavadinimu &amp;quot;multiply&amp;quot;. Metodas yra aprašytas klasėje, kurios instanciją išsaugojome kintamajame pavadinimu &amp;quot;maths&amp;quot;. &amp;quot;multiply&amp;quot; metodas išsaugo gautą reikšmę į kintamajį pavadinimu &amp;quot;multip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė atspausdina &amp;quot;Galutinis rezultatas yra &amp;lt;multip reikšmė&amp;gt;&amp;quot;. Paskutinė eilutė iššaukia main funkciją, kuri įvykdo žingsnius nurodytus viršuje.&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Rekursija|next=Įvadas į importuotas bibliotekas ir kitas funkcijas}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3521</id>
		<title>Python Vadovėlis/Įvadas į objektinį programavimą Python 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3521"/>
		<updated>2021-11-15T20:45:34Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: Viso likusio teksto redagavimas apart paskutinių neišverstų eilučių.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objektinis programavimas==&lt;br /&gt;
&lt;br /&gt;
Iki šiol jūs rašėte kodą pagal procedūrinio programavimo taisykles. Tačiau, yra daug programų, kurios - parašytos pagal objektinio programavimo taisykles. Žinant abu programavimo tipus ir jų skirtumus yra labai svarbu. Informatikoje, daug svarbių kalbų kaip C++ ar Java dažnai naudoja objektinio programavimo taisykles.&lt;br /&gt;
&lt;br /&gt;
Pradedantiesiems ir mokiniams neturintiems programavimo žinių objektinis programavimas dažnai gali atrodyti painus ir tai yra visiškai normalu. Nesijauskite blogai jei iš pradžių suprasti nesiseka. Jei šis skyrius jums to suprasti nepadės, yra ir daugiau informatyvių šaltinių, kurie jums padės atsakyti į visus klausimus.&lt;br /&gt;
&lt;br /&gt;
Šis skyrius yra padalintas į keletą pamokų. Kiekviena pamoka - skirta paaiškinti skirtingas objektinio programavimo dalis. &amp;lt;b&amp;gt;LABAI SVARBU&amp;lt;/b&amp;gt; suprasti jas visas. Nepamirškite prieš kiekvieną pamoką perskaityti įžangą, kuri paaiškins pagrindines idėjas, sąvokas ir kitas objektinio programavimo sritis.&lt;br /&gt;
&lt;br /&gt;
==Įžanga==&lt;br /&gt;
&lt;br /&gt;
Galvokite apie procedūrą kaip apie funkciją. Funkcija turi konkrečią paskyrtį ir jų gali būti įvairių: rinkti įvestis, atlikti matematinius skaičiavimus, atvaizduoti ar manipuliuoti duomenis. Paprastai, procedūros manipuliuoja duomenis, kurie yra aprašyti atskirai. Šie duomenys yra dažnai perduodami iš vienos procedūros į kitą. Ir kai programa pasidaro per didelė, tai padaro duomenų perdavimą komplikuotą.&lt;br /&gt;
Pavyzdžiui, parašėte programą, kuri kintamuosiuose išsaugo produkto duomenis. Kai klientas paprašo informacijos apie produktą, kintamieji, kurie turi visą informaciją, yra perduodami įvairioms funkcijoms su skirtingomis paskirtimis. Laikui bėgant ir saugant vis daugiau duomenų apie turimus produktus, jūs sugalvojate išsaugoti turimą informaciją sąrašuose ar žodynuose. Norint, jog jūsų programa veiktų, jūs dabar turite redaguoti kiekvieną funkciją, kuri naudojo tuos kintamuosius, taip, kad dabar ji galėtų priimti ir manipuliuoti sąrašus ar žodynus. Įsivaizduokite kiek laiko jums reikėtų norint peržiūrėti ir pakeisti šimtus failų. Jūs išprotėtumėte! Nekalbant apie tai, jog klaidas daro net ir labiausiai patyrę programuotojai, tad taip pat reikėtų taisyti begalę klaidų. Toks programavimas yra pernelyg neoptimalus.&lt;br /&gt;
Procedūrinis programavimas yra paremtas procedūromis (funkcijomis). Objektinis programavimas yra paremtas objektais. Ar prisimenate kaip procedūrinė programa atskyrė duomenis nuo kodo? Ar prisimenate programą, kuri turėjo šimtus failų ir norint kažką pakeisti reikėdavo ilgai joje narpstytis? &lt;br /&gt;
Galvokite apie &amp;lt;i&amp;gt;objektą&amp;lt;/i&amp;gt; kaip apie minėtų failų ir duomenų &amp;quot;kombinaciją&amp;quot; į vieną esybę. Technine prasme, objektas yra esybė, kuri savyje turi duomenis ir procedūras (kodą, funkcijas, t.t.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Duomenis objekto viduje vadiname &amp;lt;i&amp;gt;atributais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Funkcijas ar procedūras objekto viduje vadiname &amp;lt;i&amp;gt;metodais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvokite apie &amp;lt;b&amp;gt;duomenų atributus&amp;lt;/b&amp;gt; kaip apie kintamuosius. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvokite apie &amp;lt;b&amp;gt;metodus&amp;lt;/b&amp;gt; kaip apie funkcijas ar procedūras. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į paprastą, kasdienį pavyzdį. Lemputė ir jungiklis tavo kambaryje.&lt;br /&gt;
Atributai bus štai tokie.&lt;br /&gt;
&lt;br /&gt;
* šviesa_įjungta (True False)&lt;br /&gt;
* jungiklio_pozicija (Viršuje arba Apačioje)&lt;br /&gt;
* elektros_tekėjimas (True arba False)&lt;br /&gt;
&lt;br /&gt;
Metodai būtų štai tokie.&lt;br /&gt;
&lt;br /&gt;
* pakeisti_jungiklio_poziciją&lt;br /&gt;
* pakeisti_elektros_tekėjimą&lt;br /&gt;
&lt;br /&gt;
Atributai gali būti matomi ir nematomi. Pavyzdžiui, mes negalime matyti elektros tekančios į lemputę. Mes tik žinome, kad elektra išties teka, nes ji tuo metu skleidžia šviesą. Nepaisant to, mes galime matyti jungiklio poziciją (jungiklio_pozicija) ir taip pat mes matome ar šviesa yra įjungta ar ne (šviesa_įjungta). Kai kurie metodai yra &amp;lt;i&amp;gt;privatūs&amp;lt;/i&amp;gt;. Tai reiškia, jog jų neišeina tiesiogiai pakeisti. Pavyzdžiui, nebent būtų nukerpami laidai (to nedarykite ir vardan šio pavyzdžio manykite, jog laidai neegzistuoja), jūs negalėtumėte pakeisti elektros tėkmės tiesiogiai. Jūs taip pat negalite tiesiogiai įtakoti lemputės šviesos (ne, jūs negalite atsukti lemputės ar jos sudaužyti!). Bet jūs visada galite šiuos atributus įtakoti netiesiogiai naudojant objekto &amp;lt;i&amp;gt;metodus&amp;lt;/i&amp;gt;. Jeigu nesumokėsite mokesčių, metodas pavadinimu &amp;lt;code&amp;gt;pakeisti_elektros_tekėjimą&amp;lt;/code&amp;gt; pakeis &amp;lt;code&amp;gt;elektros_tekėjimas&amp;lt;/code&amp;gt; reikšmę į FALSE. Jei jūs įjungsite jungiklį, &amp;lt;code&amp;gt;pakeisti_jungiklio_poziciją&amp;lt;/code&amp;gt; metodas pakeis &amp;lt;code&amp;gt;šviesa_įjungta&amp;lt;/code&amp;gt; atributo reikšmę.&lt;br /&gt;
&lt;br /&gt;
Dabar jau tikriausiai galvojate, &amp;quot;Ką tai turi bendro su Pitonu?&amp;quot; ar, &amp;quot;Aš nesuprantu, bet kaip man sukurti tą Objektą?&amp;quot;. Na, mes beveik priėjome prie atsakymų! Tik turiu paaiškinti dar vieną dalyką prieš neriant į kodą.&lt;br /&gt;
&lt;br /&gt;
Pitone objekto atributai ir metodai yra nurodomi &amp;lt;b&amp;gt;klasės&amp;lt;/b&amp;gt;. Galvokite apie klasė kaip apie objekto techninį piešinį. Pavyzdžiui, jūsų namai - objektas kuriame gyvenate - taip pat jį galite vadinti butu, vasarnamiu, prakartėle ar bet kuo kitu, buvo pastatytas naudojant techinius piešinius. Šie techniniai piešiniai būtų vadinami klasėmis, kurios buvo panaudotos projektuojant jūsų namus, butą, vasarnamį, na suprantate apie ką kalbu. &lt;br /&gt;
&lt;br /&gt;
Dar kartą, klasė mums pasako kaip sukurti objektą. Techniniais terminais tariant, ir tai yra labai svarbu, klasė nusako naudojamus duomenų atributus ir metodus objekte.&lt;br /&gt;
&lt;br /&gt;
Norint sukurti klasę, mes suprogramuojame &amp;lt;i&amp;gt;klasės apibrėžimą&amp;lt;/i&amp;gt;. Klasės apibrėžimas, tai grupė pareiškimų, kurie nusako objekto atributus ir metodus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Pirma pamoka&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apačioje yra procedūrinė programa, kuri atlieka paprastą matematinį veiksmą su vartotojo įvestu skaičiu.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Programa parašyta Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
&lt;br /&gt;
# Procedūra 1&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Pasiimame skaičių, kurį manipuliuosime.&lt;br /&gt;
        num = float(input(&amp;quot;Įrašykite skaičių.\n&amp;quot;))&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su pasiimtu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 2&lt;br /&gt;
        addednum = addfive(num)&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su ankščiau išsaugotu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 3&lt;br /&gt;
        multipliednum = multiply(addednum)&lt;br /&gt;
        # Paduodame skaičių procedūrai 4&lt;br /&gt;
        display(multipliednum)&lt;br /&gt;
    # Susidorojame su išimtimis, kurios gali atsirasti dėl netinkamo vartotojo skaičiaus įvedimo&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Privalote įvesti tinkamą skaičių.\n&amp;quot;)&lt;br /&gt;
        # Atstatome kintamojo num reikšmę, kad ištrintumėm netinkamą vartotojo įvestį.&lt;br /&gt;
        num = 0&lt;br /&gt;
        # Dar kartą iškviečiame main.&lt;br /&gt;
        main()&lt;br /&gt;
&lt;br /&gt;
# Procedūra 2&lt;br /&gt;
def addfive(num):&lt;br /&gt;
    return num + 5&lt;br /&gt;
&lt;br /&gt;
# Procedūra 3&lt;br /&gt;
def multiply(addednum):&lt;br /&gt;
    return addednum * 2.452&lt;br /&gt;
&lt;br /&gt;
# Procedūra 4&lt;br /&gt;
def display(multi):&lt;br /&gt;
    # Parodome galutinį rezultatą.&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra &amp;quot;, multi)&lt;br /&gt;
&lt;br /&gt;
# Kviečiame procedūrą 1&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime skaitemnį &amp;quot;5&amp;quot;, gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 5&lt;br /&gt;
 Galutinis rezultatas yra 24.52&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime reikšmę &amp;quot;g&amp;quot;, tada pasitaisysime ir įrašysime skaitmenį &amp;quot;8&amp;quot;, tada gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 g&lt;br /&gt;
 Privalote įvesti tinkamą skaičių.&lt;br /&gt;
 &lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 8&lt;br /&gt;
 Galutinis rezultatas yra 31.875999999999998&lt;br /&gt;
&lt;br /&gt;
Žemiau matome klasę ir programą, kuri naudoją nurodytą klasę. Ši objektinio programavimo programavimo būdu parašyta programa daro tą patį ką prieš tai darė procedūriniu programavimo būdu parašyta programa. Apžiūrėkime keletą svarbių objektinio programavimo būdo konceptų prieš neriant į ankščiau minėtą klasę ir programą.&lt;br /&gt;
Norint sukurti klasę, mes naudojame &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; raktažodį. Po raktažodžio jūs rašote pavadinimą kurį norėtumėte, jog turėtų jūsų klasė. Dažnai naudojama praktika kuriant klasių pavadinimus yra &amp;lt;i&amp;gt;NaujųŽodžiųRašymasIšDidžiosiosRaidės&amp;lt;/i&amp;gt;.&lt;br /&gt;
Jei norėčiau sukurti klasę pavadinimu dirtysocks, kodas atrodytų taip:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class DirtySocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Iš pradžių pažiūrėkime į klasę. Programa, kuri naudos šią klasę, bus parodyta paskui.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexample.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Class&lt;br /&gt;
&lt;br /&gt;
class NumChange:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.__number = 0&lt;br /&gt;
&lt;br /&gt;
    def addfive(self,num):&lt;br /&gt;
        self.__number = num&lt;br /&gt;
        return self.__number + 5&lt;br /&gt;
&lt;br /&gt;
    def multiply(self,added):&lt;br /&gt;
        self.__added = added&lt;br /&gt;
        return self.__added * 2.452&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Programa, kuri naudoja viršuje esančią klasę yra parašyta žemiau.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexampleprog.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstracija - Programa&lt;br /&gt;
&lt;br /&gt;
import oopexample&lt;br /&gt;
&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    num = float(input(&amp;quot;Įrašykite skaičių.\n&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    added = maths.addfive(num)&lt;br /&gt;
&lt;br /&gt;
    multip = maths.multiply(added)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra &amp;quot;, multip)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tikriausiai jūs dabar esate pasimetę. Tai visiškai suprantama. Pradžioje pasistenkime suprasti klasę.&lt;br /&gt;
Klasė yra pavadinta &amp;quot;NumChange&amp;quot;&lt;br /&gt;
Ši klasė turi tris metodus&lt;br /&gt;
* __init__&lt;br /&gt;
* addfive&lt;br /&gt;
* multiply&lt;br /&gt;
&lt;br /&gt;
Šie trys metodai savyje turi labai panašų kodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atkreipkite dėmesį į tai, jog kiekvienas metodas turi parametrą pavadinimu &amp;quot;self&amp;quot;. Kiekvienas klasės metodas turi būtinai turėti šį parametrą. Šis parametras nebūtinai turi būti su pavadinimu &amp;quot;self&amp;quot;, bet tai yra priimta kaip geriausia praktika, tad tikriausiai ir jūs turėtumėte jį taip vadinti. Šis parametras yra reikalingas kiekviename metode nes kai jis yra iškviečiamas, jis turi žinoti su kuriuo objekto atributu turėtų atlikti operacijas. Net kai turime tik vieną objektą, mes turime pasirūpinti, kad programa žinotų, jog mes norime naudoti atributus aprašytus būtent toje klasėje. Todėl mes turime būti saugūs ir naudoti &amp;quot;self&amp;quot; parametrą.&lt;br /&gt;
&lt;br /&gt;
Peržiūrėkime pirmą metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dauguma pitono klasių turi &amp;lt;code&amp;gt;__init__&amp;lt;/code&amp;gt;, kuris yra paleidžiamas automatiškai kiekvieną kartą, kai atmintyje yra sukuriama tos klasės instancija. (Kai sukuriame nuorodą į klasę, yra sukuriama tos klasės &amp;lt;i&amp;gt;instancija&amp;lt;/i&amp;gt; [objektas]). Šis metodas yra paprastai vadinamas &amp;lt;i&amp;gt;inicijavimo metodu&amp;lt;/i&amp;gt;. Kai šis metodas yra paleidžiamas, &amp;quot;self&amp;quot; parametras yra automatiškai priskiriamas tariamam objektui. __init__ metodas inicijuoja klasės atributus, dėl šios priežasties jis yra pavadintas inicijavimo metodu. ↵Po __init__ metodu, iš pradžių &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt; atributui mes priskiriame 0.&lt;br /&gt;
Mes sukuriame nuorodą į turimo objekto atributą panaudojant taškinį žymėjimą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.__number = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kodas &amp;lt;code&amp;gt;self.__number = 0&amp;lt;/code&amp;gt; reiškia, jog &amp;quot;objekte esančio &amp;quot;number&amp;quot; atributo reikšmė yra 0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į sekantį metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
    self.__number = num&lt;br /&gt;
    return self.__number + 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis metodas yra pavadintas &amp;quot;addfive&amp;quot;. Jis priima parametrą pavadinimu &amp;quot;num&amp;quot;. Metode esanti logika tada priskiria &amp;quot;num&amp;quot; reikšmę objekte esančiui atributui su pavadinimu &amp;quot;number&amp;quot;. Tada metodas prideda 5 prie &amp;quot;number&amp;quot; ir jį grąžina jį iššaukiančiui.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į trečiajį metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
    self.__added = added&lt;br /&gt;
    return self.__added * 2.453&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis metodas yra pavadintas &amp;quot;multiply&amp;quot;. Jis priima parametrą pavadinimu &amp;quot;added&amp;quot;. Metodas priskiria priimtą reikšmę objekte esančiui atributui su pavadinimu &amp;quot;added&amp;quot; ir grąžina &amp;quot;added&amp;quot; atributo ir 2.452 sandaugą jį iššaukiančiui.&lt;br /&gt;
&lt;br /&gt;
Ar atkreipėte dėmesį į tai, jog kiekvienas metodo pavadinimas prasideda su dviem pabraukimais? Pabandykime tai suprasti.&lt;br /&gt;
Prieš tai mes minėjome, jog objektas, su metodų pagalba, dirba su atributais apibrėžtais jame pačiame. Būtų idealu, jei tuos atributus mes galėtumėm pakeisti TIK SU METODAIS ESANČIAIS PAČIAME OBJEKTE. Įmanoma turėti iššorinį kodą, kuris galėtų manipuliuoti tais pačiais atributais. Norint &amp;quot;paslėpti&amp;quot; atributus, taip, kad juos matytų metodai aprašyti pačiame objekte, turime naudoti du pabraukimus prieš objekto pavadinima, taip kaip ir demonstravome. Ištrynus abu pabraukimus nuo atributo pavadinimo mes juo galėsime manipuliuoti kodu, kuris yra parašytas objekto išorėje.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į programą, kuri naudoja klasę, kurią aptarėme.&lt;br /&gt;
&lt;br /&gt;
Atkreipkite dėmesį į pirmą eilutę, kuri nėra komentaras.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import oopexample&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši kodo eilutė importuoją klasę, kurią išsaugojome atskirame faile (modulyje). Klasės nebūtinai turi būti talpinamos atskiruose failuose, bet tai yra priimta kaip gera praktika, tad yra verta jau nuo pat pradžių priprasti prie modulių importavimo.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši eilutė sukuria NumChange pavadinimu, &amp;quot;oopexample&amp;quot; modulyje patalpintos klasės instanciją, kuri yra priskiriama &amp;quot;maths&amp;quot; kintamajam.&lt;br /&gt;
Sintaksė atrodo taip:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;i&amp;gt;modulename.Classname()&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Apibrėžiame main funkciją.&lt;br /&gt;
Pasiimame skaičių iš vartotojo.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė &amp;lt;code&amp;gt;added = maths.addfive(num)&amp;lt;/code&amp;gt; nusiunčia &amp;quot;num&amp;quot; kintamojo reikšmę metodui pavadinimu &amp;quot;addfive&amp;quot;. Metodas yra aprašytas klasėje sends the value of the &amp;quot;num&amp;quot; variable to the method named &amp;quot;addfive&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;added&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė &amp;lt;code&amp;gt;multip = maths.multiply(added)&amp;lt;/code&amp;gt; sends the value of the variable &amp;quot;added&amp;quot;, to the method named &amp;quot;multiply&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;multip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė atspausdina &amp;quot;Galutinis rezultatas yra &amp;lt;multip reikšmė&amp;gt;&amp;quot;. Paskutinė eilutė iššaukia main funkciją, kuri įvykdo žingsnius nurodytus viršuje.&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Rekursija|next=Įvadas į importuotas bibliotekas ir kitas funkcijas}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3520</id>
		<title>Python Vadovėlis/Įvadas į objektinį programavimą Python 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3520"/>
		<updated>2021-11-15T19:33:59Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: Finalinis redagavimas iki pirmos pamokos.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objektinis programavimas==&lt;br /&gt;
&lt;br /&gt;
Iki šiol jūs rašėte kodą pagal procedūrinio programavimo taisykles. Tačiau, yra daug programų, kurios - parašytos pagal objektinio programavimo taisykles. Žinant abu programavimo tipus ir jų skirtumus yra labai svarbu. Informatikoje, daug svarbių kalbų kaip C++ ar Java dažnai naudoja objektinio programavimo taisykles.&lt;br /&gt;
&lt;br /&gt;
Pradedantiesiems ir mokiniams neturintiems programavimo žinių objektinis programavimas dažnai gali atrodyti painus ir tai yra visiškai normalu. Nesijauskite blogai jei iš pradžių suprasti nesiseka. Jei šis skyrius jums to suprasti nepadės, yra ir daugiau informatyvių šaltinių, kurie jums padės atsakyti į visus klausimus.&lt;br /&gt;
&lt;br /&gt;
Šis skyrius yra padalintas į keletą pamokų. Kiekviena pamoka - skirta paaiškinti skirtingas objektinio programavimo dalis. &amp;lt;b&amp;gt;LABAI SVARBU&amp;lt;/b&amp;gt; suprasti jas visas. Nepamirškite prieš kiekvieną pamoką perskaityti įžangą, kuri paaiškins pagrindines idėjas, sąvokas ir kitas objektinio programavimo sritis.&lt;br /&gt;
&lt;br /&gt;
==Įžanga==&lt;br /&gt;
&lt;br /&gt;
Galvokite apie procedūrą kaip apie funkciją. Funkcija turi konkrečią paskyrtį ir jų gali būti įvairių: rinkti įvestis, atlikti matematinius skaičiavimus, atvaizduoti ar manipuliuoti duomenis. Paprastai, procedūros manipuliuoja duomenis, kurie yra aprašyti atskirai. Šie duomenys yra dažnai perduodami iš vienos procedūros į kitą. Ir kai programa pasidaro per didelė, tai padaro duomenų perdavimą komplikuotą.&lt;br /&gt;
Pavyzdžiui, parašėte programą, kuri kintamuosiuose išsaugo produkto duomenis. Kai klientas paprašo informacijos apie produktą, kintamieji, kurie turi visą informaciją, yra perduodami įvairioms funkcijoms su skirtingomis paskirtimis. Laikui bėgant ir saugant vis daugiau duomenų apie turimus produktus, jūs sugalvojate išsaugoti turimą informaciją sąrašuose ar žodynuose. Norint, jog jūsų programa veiktų, jūs dabar turite redaguoti kiekvieną funkciją, kuri naudojo tuos kintamuosius, taip, kad dabar ji galėtų priimti ir manipuliuoti sąrašus ar žodynus. Įsivaizduokite kiek laiko jums reikėtų norint peržiūrėti ir pakeisti šimtus failų. Jūs išprotėtumėte! Nekalbant apie tai, jog klaidas daro net ir labiausiai patyrę programuotojai, tad taip pat reikėtų taisyti begalę klaidų. Toks programavimas yra pernelyg neoptimalus.&lt;br /&gt;
Procedūrinis programavimas yra paremtas procedūromis (funkcijomis). Objektinis programavimas yra paremtas objektais. Ar prisimenate kaip procedūrinė programa atskyrė duomenis nuo kodo? Ar prisimenate programą, kuri turėjo šimtus failų ir norint kažką pakeisti reikėdavo ilgai joje narpstytis? &lt;br /&gt;
Galvokite apie &amp;lt;i&amp;gt;objektą&amp;lt;/i&amp;gt; kaip apie minėtų failų ir duomenų &amp;quot;kombinaciją&amp;quot; į vieną esybę. Technine prasme, objektas yra esybė, kuri savyje turi duomenis ir procedūras (kodą, funkcijas, t.t.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Duomenis objekto viduje vadiname &amp;lt;i&amp;gt;atributais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Funkcijas ar procedūras objekto viduje vadiname &amp;lt;i&amp;gt;metodais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvokite apie &amp;lt;b&amp;gt;duomenų atributus&amp;lt;/b&amp;gt; kaip apie kintamuosius. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvokite apie &amp;lt;b&amp;gt;metodus&amp;lt;/b&amp;gt; kaip apie funkcijas ar procedūras. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į paprastą, kasdienį pavyzdį. Lemputė ir jungiklis tavo kambaryje.&lt;br /&gt;
Atributai bus štai tokie.&lt;br /&gt;
&lt;br /&gt;
* šviesa_įjungta (True False)&lt;br /&gt;
* jungiklio_pozicija (Viršuje arba Apačioje)&lt;br /&gt;
* elektros_tekėjimas (True arba False)&lt;br /&gt;
&lt;br /&gt;
Metodai būtų štai tokie.&lt;br /&gt;
&lt;br /&gt;
* pakeisti_jungiklio_poziciją&lt;br /&gt;
* pakeisti_elektros_tekėjimą&lt;br /&gt;
&lt;br /&gt;
Atributai gali būti matomi ir nematomi. Pavyzdžiui, mes negalime matyti elektros tekančios į lemputę. Mes tik žinome, kad elektra išties teka, nes ji tuo metu skleidžia šviesą. Nepaisant to, mes galime matyti jungiklio poziciją (jungiklio_pozicija) ir taip pat mes matome ar šviesa yra įjungta ar ne (šviesa_įjungta). Kai kurie metodai yra &amp;lt;i&amp;gt;privatūs&amp;lt;/i&amp;gt;. Tai reiškia, jog jų neišeina tiesiogiai pakeisti. Pavyzdžiui, nebent būtų nukerpami laidai (to nedarykite ir vardan šio pavyzdžio manykite, jog laidai neegzistuoja), jūs negalėtumėte pakeisti elektros tėkmės tiesiogiai. Jūs taip pat negalite tiesiogiai įtakoti lemputės šviesos (ne, jūs negalite atsukti lemputės ar jos sudaužyti!). Bet jūs visada galite šiuos atributus įtakoti netiesiogiai naudojant objekto &amp;lt;i&amp;gt;metodus&amp;lt;/i&amp;gt;. Jeigu nesumokėsite mokesčių, metodas pavadinimu &amp;lt;code&amp;gt;pakeisti_elektros_tekėjimą&amp;lt;/code&amp;gt; pakeis &amp;lt;code&amp;gt;elektros_tekėjimas&amp;lt;/code&amp;gt; reikšmę į FALSE. Jei jūs įjungsite jungiklį, &amp;lt;code&amp;gt;pakeisti_jungiklio_poziciją&amp;lt;/code&amp;gt; metodas pakeis &amp;lt;code&amp;gt;šviesa_įjungta&amp;lt;/code&amp;gt; atributo reikšmę.&lt;br /&gt;
&lt;br /&gt;
Dabar jau tikriausiai galvojate, &amp;quot;Ką tai turi bendro su Pitonu?&amp;quot; ar, &amp;quot;Aš nesuprantu, bet kaip man sukurti tą Objektą?&amp;quot;. Na, mes beveik priėjome prie atsakymų! Tik turiu paaiškinti dar vieną dalyką prieš neriant į kodą.&lt;br /&gt;
&lt;br /&gt;
Pitone objekto atributai ir metodai yra nurodomi &amp;lt;b&amp;gt;klasės&amp;lt;/b&amp;gt;. Galvokite apie klasė kaip apie objekto techninį piešinį. Pavyzdžiui, jūsų namai - objektas kuriame gyvenate - taip pat jį galite vadinti butu, vasarnamiu, prakartėle ar bet kuo kitu, buvo pastatytas naudojant techinius piešinius. Šie techniniai piešiniai būtų vadinami klasėmis, kurios buvo panaudotos projektuojant jūsų namus, butą, vasarnamį, na suprantate apie ką kalbu. &lt;br /&gt;
&lt;br /&gt;
Dar kartą, klasė mums pasako kaip sukurti objektą. Techniniais terminais tariant, ir tai yra labai svarbu, klasė nusako naudojamus duomenų atributus ir metodus objekte.&lt;br /&gt;
&lt;br /&gt;
Norint sukurti klasę, mes suprogramuojame &amp;lt;i&amp;gt;klasės apibrėžimą&amp;lt;/i&amp;gt;. Klasės apibrėžimas, tai grupė pareiškimų, kurie nusako objekto atributus ir metodus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Pirma pamoka&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apačioje yra procedūrinė programa, kuri atlieka paprastą matematinį veiksmą su vartotojo įvestu skaičiu.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Programa parašyta Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
&lt;br /&gt;
# Procedūra 1&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Pasiimame skaičių, kurį manipuliuosime.&lt;br /&gt;
        num = float(input(&amp;quot;Įrašykite skaičių.\n&amp;quot;))&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su pasiimtu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 2&lt;br /&gt;
        addednum = addfive(num)&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su ankščiau išsaugotu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 3&lt;br /&gt;
        multipliednum = multiply(addednum)&lt;br /&gt;
        # Paduodame skaičių procedūrai 4&lt;br /&gt;
        display(multipliednum)&lt;br /&gt;
    # Susidorojame su išimtimis, kurios gali atsirasti dėl netinkamo vartotojo skaičiaus įvedimo&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Privalote įvesti tinkamą skaičių.\n&amp;quot;)&lt;br /&gt;
        # Atstatome kintamojo num reikšmę, kad ištrintumėm netinkamą vartotojo įvestį.&lt;br /&gt;
        num = 0&lt;br /&gt;
        # Dar kartą iškviečiame main.&lt;br /&gt;
        main()&lt;br /&gt;
&lt;br /&gt;
# Procedūra 2&lt;br /&gt;
def addfive(num):&lt;br /&gt;
    return num + 5&lt;br /&gt;
&lt;br /&gt;
# Procedūra 3&lt;br /&gt;
def multiply(addednum):&lt;br /&gt;
    return addednum * 2.452&lt;br /&gt;
&lt;br /&gt;
# Procedūra 4&lt;br /&gt;
def display(multi):&lt;br /&gt;
    # Parodome galutinį rezultatą.&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra &amp;quot;, multi)&lt;br /&gt;
&lt;br /&gt;
# Kviečiame procedūrą 1&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime skaitemnį &amp;quot;5&amp;quot;, gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 5&lt;br /&gt;
 Galutinis rezultatas yra 24.52&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime reikšmę &amp;quot;g&amp;quot;, tada pasitaisysime ir įrašysime skaitmenį &amp;quot;8&amp;quot;, tada gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 g&lt;br /&gt;
 Privalote įvesti tinkamą skaičių.&lt;br /&gt;
 &lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 8&lt;br /&gt;
 Galutinis rezultatas yra 31.875999999999998&lt;br /&gt;
&lt;br /&gt;
Žemiau matome klasę ir programą, kuri naudoją nurodytą klasę. Ši objektiniu programavimo būdu parašyta programa daro tą patį ką prieš tai darė procedūriniu programavimo būdu parašyta programa. Apžiūrėkime keletą svarbių objektinio programavimo būdo konceptų prieš neriant į ankščiau minėtą klasę ir programą.&lt;br /&gt;
Norint sukurti klasę, mes naudojame &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; raktažodį. Po raktažodžio jūs rašote pavadinimą kurį norėtumėte, jog turėtų jūsų klasė. Dažnai naudojama praktika kuriant klasių pavadinimus yra &amp;lt;i&amp;gt;NaujųŽodžiųRašymasIšDidžiosiosRaidės&amp;lt;/i&amp;gt;.&lt;br /&gt;
Jei norėčiau sukurti klasę pavadinimu dirtysocks, kodas atrodytų taip:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class DirtySocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Iš pradžių pažiūrėkime į klasę. Programa, kuri naudos šią klasę, bus parodyta paskui.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexample.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Class&lt;br /&gt;
&lt;br /&gt;
class NumChange:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.__number = 0&lt;br /&gt;
&lt;br /&gt;
    def addfive(self,num):&lt;br /&gt;
        self.__number = num&lt;br /&gt;
        return self.__number + 5&lt;br /&gt;
&lt;br /&gt;
    def multiply(self,added):&lt;br /&gt;
        self.__added = added&lt;br /&gt;
        return self.__added * 2.452&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Programa, kuri naudoja viršuje esančią klasę yra parašyta žemiau.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexampleprog.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstracija - Programa&lt;br /&gt;
&lt;br /&gt;
import oopexample&lt;br /&gt;
&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    num = float(input(&amp;quot;Įrašykite skaičių.\n&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    added = maths.addfive(num)&lt;br /&gt;
&lt;br /&gt;
    multip = maths.multiply(added)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra &amp;quot;, multip)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tikriausiai jūs dabar esate pasimetę. Tai visiškai suprantama. Pradėkime nuo klasės supratimo.&lt;br /&gt;
Klasė yra pavadinta &amp;quot;NumChange&amp;quot;&lt;br /&gt;
Ši klasė turi tris metodus&lt;br /&gt;
* __init__&lt;br /&gt;
* addfive&lt;br /&gt;
* multiply&lt;br /&gt;
&lt;br /&gt;
Šie trys metodai savyje turi labai panašų kodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį į tai, jog kiekvienas metodas turi parametrą pavadinimu &amp;quot;self&amp;quot;. Kiekvienas klasės metodas turi būtinai turėti šį parametrą. Šis parametras nebūtinai turi būti su pavadinimu &amp;quot;self&amp;quot;, bet tai yra priimta geriausia praktika, tad tikriausiai ir jūs turėtumėte jį taip vadinti. Šis parametras yra reikalingas kiekviename metode nes kai jis yra iškviečiamas, jis turi žinoti which object's attributes to operate on. Net kai turime tik vieną objektą, mes turime pasirūpinti, kad programa žinotų, jog mes norime naudoti atributus aprašytus būtent toje klasėje. Todėl mes turime būti saugūs ir naudoti &amp;quot;self&amp;quot; parametrą.&lt;br /&gt;
&lt;br /&gt;
Peržiūrėkime pirmą metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dauguma pitono klasių turi &amp;lt;code&amp;gt;__init__&amp;lt;/code&amp;gt;, kuris yra paleidžiamas automatiškai kiekvieną kartą, kai atmintyje yra sukuriama tos klasės instancija. (Kai sukuriame nuorodą į klasę, yra sukuriama tos klasės &amp;lt;i&amp;gt;instancija&amp;lt;/i&amp;gt; [objektas]). Šis metodas yra paprastai vadinamas &amp;lt;i&amp;gt;inicijavimo metodu&amp;lt;/i&amp;gt;. Kai šis metodas yra paleidžiamas, &amp;quot;self&amp;quot; parametras yra automatiškai priskiriamas tariamam objektui. __init__ metodas inicijuoja klasės atributus, dėl šios priežasties jis yra pavadintas inicijavimo metodu. ↵Po __init__ metodu, iš pradžių &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt; atributui mes priskiriame 0.&lt;br /&gt;
Mes sukuriame nuorodą į turimo objekto atributą panaudojant taškinį žymėjimą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.__number = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kodas &amp;lt;code&amp;gt;self.__number = 0&amp;lt;/code&amp;gt; reiškia, jog &amp;quot;objekte esančio &amp;quot;number&amp;quot; atributo reikšmė yra 0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į sekantį metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
    self.__number = num&lt;br /&gt;
    return self.__number + 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis metodas yra pavadintas &amp;quot;addfive&amp;quot;. Jis priima parametrą pavadinimu &amp;quot;num&amp;quot;. Metode esanti logika tada priskiria &amp;quot;num&amp;quot; reikšmę objekte esančiui atributui su pavadinimu &amp;quot;number&amp;quot;. This method is named &amp;quot;addfive&amp;quot;. Tada metodas prideda 5 prie &amp;quot;number&amp;quot; ir jį grąžina jį iššaukiančiui.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į trečiajį metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
    self.__added = added&lt;br /&gt;
    return self.__added * 2.453&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis metodas yra pavadintas &amp;quot;multiply&amp;quot;. Jis priima parametrą pavadinimu &amp;quot;added&amp;quot;. Metodas priskiria priimtą reikšmę objekte esančiui atributui su pavadinimu &amp;quot;added&amp;quot; ir grąžina &amp;quot;added&amp;quot; atributo ir 2.452 sandaugą jį iššaukiančiui.&lt;br /&gt;
&lt;br /&gt;
Ar atkreipėte dėmesį į tai, jog kiekvienas metodo pavadinimas prasideda su dviem pabraukimais? Pabandykime tai suprasti.&lt;br /&gt;
Prieš tai mes minėjome, jog objektas, su metodų pagalba, dirba su atributais apibrėžtais jame pačiame. Būtų idealu, jei tuos atributus mes galėtumėm pakeisti TIK SU METODAIS ESANČIAIS PAČIAME OBJEKTE. Įmanoma turėti iššorinį kodą, kuris galėtų manipuliuoti tais pačiais atributais. Norint &amp;quot;paslėpti&amp;quot; atributus, taip, kad juos matytų metodai aprašyti pačiame objekte, turime naudoti du pabraukimus prieš objekto pavadinima, taip kaip ir demonstravome. Ištrynus abu pabraukimus nuo atributo pavadinimo mes juo galėsime manipuliuoti kodu, kuris yra parašytas objekto išorėje.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į programą, kuri naudoja klasę, kurią aptarėme.&lt;br /&gt;
&lt;br /&gt;
Atkreipkite dėmesį į pirmą eilutę, kuri nėra komentaras.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import oopexample&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši kodo eilutė importuoją klasę, kurią išsaugojome atskirame faile (modulyje). Klasės nebūtinai turi būti talpinamos atskiruose failuose, bet tai yra priimta kaip gera praktika, tad yra verta jau nuo pat pradžių priprasti prie modulių importavimo.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši eilutė sukuria NumChange pavadinimu, &amp;quot;oopexample&amp;quot; modulyje patalpintos klasės instanciją, kuri yra priskiriama &amp;quot;maths&amp;quot; kintamajam.&lt;br /&gt;
Sintaksė atrodo taip:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;i&amp;gt;modulename.Classname()&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Apibrėžiame main funkciją.&lt;br /&gt;
Pasiimame skaičių iš vartotojo.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė &amp;lt;code&amp;gt;added = maths.addfive(num)&amp;lt;/code&amp;gt; nusiunčia &amp;quot;num&amp;quot; kintamojo reikšmę metodui pavadinimu &amp;quot;addfive&amp;quot;. Metodas yra aprašytas klasėje sends the value of the &amp;quot;num&amp;quot; variable to the method named &amp;quot;addfive&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;added&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė &amp;lt;code&amp;gt;multip = maths.multiply(added)&amp;lt;/code&amp;gt; sends the value of the variable &amp;quot;added&amp;quot;, to the method named &amp;quot;multiply&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;multip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė atspausdina &amp;quot;Galutinis rezultatas yra &amp;lt;multip reikšmė&amp;gt;&amp;quot;. Paskutinė eilutė iššaukia main funkciją, kuri įvykdo žingsnius nurodytus viršuje.&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Rekursija|next=Įvadas į importuotas bibliotekas ir kitas funkcijas}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3519</id>
		<title>Python Vadovėlis/Įvadas į objektinį programavimą Python 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3519"/>
		<updated>2021-11-15T19:00:59Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: Įžangos finalinė korekcija&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objektinis programavimas==&lt;br /&gt;
&lt;br /&gt;
Iki šiol jūs rašėte kodą pagal procedūrinio programavimo taisykles. Tačiau, yra daug programų, kurios - parašytos pagal objektinio programavimo taisykles. Žinant abu programavimo tipus ir jų skirtumus yra labai svarbu. Informatikoje, daug svarbių kalbų kaip C++ ar Java dažnai naudoja objektinio programavimo taisykles.&lt;br /&gt;
&lt;br /&gt;
Pradedantiesiems ir mokiniams neturintiems programavimo žinių objektinis programavimas dažnai gali atrodyti painus ir tai yra visiškai normalu. Nesijauskite blogai jei iš pradžių suprasti nesiseka. Jei šis skyrius jums to suprasti nepadės, yra ir daugiau informatyvių šaltinių, kurie jums padės atsakyti į visus klausimus.&lt;br /&gt;
&lt;br /&gt;
Šis skyrius yra padalintas į keletą pamokų. Kiekviena pamoka - skirta paaiškinti skirtingas objektinio programavimo dalis. &amp;lt;b&amp;gt;LABAI SVARBU&amp;lt;/b&amp;gt; suprasti jas visas. Nepamirškite prieš kiekvieną pamoką perskaityti įžangą, kuri paaiškins pagrindines idėjas, sąvokas ir kitas objektinio programavimo sritis.&lt;br /&gt;
&lt;br /&gt;
==Įžanga==&lt;br /&gt;
&lt;br /&gt;
Galvokite apie procedūrą kaip apie funkciją. Funkcija turi konkrečią paskyrtį ir jų gali būti įvairių: rikti įvestis, atlikti matematinius skaičiavimus, atvaizduoti ar manipuliuoti duomenis. Typically, procedures use data which is separate from code for manipulation. This data is often passed between procedures. When a program becomes much larger and complex, this can cause problems.&lt;br /&gt;
Pavyzdžiui, suprogramavai programą, kuri kintamuosiuose išsaugo produkto duomenis. Kai klientas paprašo informacijos apie produktą, kintamieji, kurie turi visą informaciją, yra perduodami įvairioms funkcijoms su skirtingomis paskirtimis. Laikui bėgant ir saugant vis daugiau duomenų apie turimus produktus, tu sugalvoji išsaugoti turimą informaciją sąrašuose ar žodynuose. Norint, jog tavo programa veiktų, tu dabar turi redaguoti kiekvieną funkciją, kuri naudojo tuos kintamuosius, taip, kad dabar ji galėtų priimti ir manipuliuoti sąrašus ar žodynus. Imagine the time that would take for a program that was hundreds of megabytes, and hundreds of files in size! It would drive you insane! not to mention, errors in your code, are almost guaranteed, just because of the large volume of work and possibilities to make a typo or other error. This is less than optimal.&lt;br /&gt;
Procedūrinis programavimas yra paremtas procedūromis ar funkcijomis. Objektinis programavimas yra paremtas objektais. Ar prisimeni kaip procedūrinė programa atskyrė duomenis nuo kodo? Ar prisimeni tą programą, kuri turėjo šimtus failų ir norint kažką pakeisti reikėdavo ilgai narpstytis? &lt;br /&gt;
Galvokite apie &amp;lt;i&amp;gt;objektą&amp;lt;/i&amp;gt; kaip apie minėtų failų ir duomenų &amp;quot;kombinaciją&amp;quot; į vieną esybę. Technine prasme, objektas yra esybė, kuri savyje turi duomenis ir procedūras (kodą, funkcijas, t.t.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Duomenis objekto viduje vadiname &amp;lt;i&amp;gt;atributais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Funkcijas ar procedūras objekto viduje vadiname &amp;lt;i&amp;gt;metodais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;duomenų atributus&amp;lt;/b&amp;gt; kaip apie kintamuosius. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;metodus&amp;lt;/b&amp;gt; kaip apie funkcijas ar procedūras. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į paprastą, kasdienį pavyzdį. Lemputė ir jungiklis tavo kambaryje.&lt;br /&gt;
Atributai bus štai tokie.&lt;br /&gt;
&lt;br /&gt;
//Mindaugo komentaras: ar verčiame True/False?&lt;br /&gt;
* šviesa_įjungta ((True)Taip arba (False)Ne)&lt;br /&gt;
* jungiklio_pozicija (Viršuje arba Apačioje)&lt;br /&gt;
* elektros_tekėjimas (Taip arba Ne)&lt;br /&gt;
&lt;br /&gt;
Metodai būtų štai tokie.&lt;br /&gt;
&lt;br /&gt;
* pakeisti_jungiklio_poziciją&lt;br /&gt;
* pakeisti_elektros_tekėjimą&lt;br /&gt;
&lt;br /&gt;
Atributai gali būti matomi ir nematomi. Pavyzdžiui, mes negalime matyti elektros tekančios į lemputę. Mes tik žinome, kad elektra išties teka, nes ji tuo metu skleidžia šviesą. Nepaisant to, mes galime matyti jungiklio poziciją (jungiklio_pozicija) ir taip pat mes matome ar šviesa yra įjungta ar ne (šviesa_įjungta). Kai kurie metodai yra &amp;lt;i&amp;gt;privatūs&amp;lt;/i&amp;gt;. Tai reiškia, jog jų neišeina tiesiogiai pakeisti. Pavyzdžiui, nebent būtų nukerpami laidai (to nedarykite ir vardan šio pavyzdžio manykite, jog laidai neegzistuoja), jūs negalėtumėte pakeisti elektros tėkmės tiesiogiai. Jūs taip pat negalite tiesiogiai įtakoti lemputės šviesos (ne, jūs negalite atsukti lemputės ar jos sudaužyti!). Bet, jūs visada galite šiuos atributus įtakoti netiesiogiai naudojant objekto &amp;lt;i&amp;gt;metodus&amp;lt;/i&amp;gt;. Jeigu nesumokėsite mokesčių, metodas pavadinimu &amp;lt;code&amp;gt;pakeisti_elektros_tekėjimą&amp;lt;/code&amp;gt; pakeis &amp;lt;code&amp;gt;elektros_tekėjimas&amp;lt;/code&amp;gt; reikšmę į NE(FALSE). Jei jūs įjungsite jungiklį, &amp;lt;code&amp;gt;pakeisti_jungiklio_poziciją&amp;lt;/code&amp;gt; metodas pakeis &amp;lt;code&amp;gt;šviesa_įjungta&amp;lt;/code&amp;gt; atributo reikšmę.&lt;br /&gt;
&lt;br /&gt;
Dabar jau tikriausiai galvoji, &amp;quot;Ką tai turi bendro su Pitonu?&amp;quot; ar, &amp;quot;Aš nesuprantu, bet kaip man sukurti tą Objektą?&amp;quot;. Na, mes beveik priėjome prie atsakymų! Tik turiu paaiškinti dar vieną idėją prieš neriant į kodą.&lt;br /&gt;
&lt;br /&gt;
Pitone objekto atributai ir metodai yra nurodomi &amp;lt;b&amp;gt;klasės&amp;lt;/b&amp;gt;. Galvokite apie klasė kaip apie objekto techninį piešinį. Pavyzdžiui, jūsų namai - objektas kuriame gyvenate - taip pat jį galite vadinti butu, vasarnamiu, prakartėle ar bet kuo kitu, buvo pastatytas naudojant techinius piešinius; šie techniniai piešiniai būtų vadinami klasėmis, kurios buvo panaudotos projektuojant jūsų namus, butą, vasarnamį, na suprantat apie ką kalbu. &lt;br /&gt;
&lt;br /&gt;
Dar kartą, klasė mums pasako kaip sukurti objektą. Techniniais terminais tariant, ir tai yra labai svarbu, klasė nusako naudojamus duomenų atributus ir metodus objekte.&lt;br /&gt;
&lt;br /&gt;
Norint sukurti klasę, mes suprogramuojame &amp;lt;i&amp;gt;klasės apibrėžimą&amp;lt;/i&amp;gt;. Klasės apibrėžimas, tai grupė pareiškimų, kurie nusako objekto atributus ir metodus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Pirma pamoka&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apačioje yra procedūrinė programa, kuri atlieka paprastą matematinį veiksmą su vartotojo įvestu skaičiu.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Programa parašyta Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
&lt;br /&gt;
# Procedūra 1&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Pasiimame skaičių, kurį manipuliuosime.&lt;br /&gt;
        num = float(input(&amp;quot;Įrašykite skaičių.\n&amp;quot;))&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su pasiimtu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 2&lt;br /&gt;
        addednum = addfive(num)&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su ankščiau išsaugotu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 3&lt;br /&gt;
        multipliednum = multiply(addednum)&lt;br /&gt;
        # Paduodame skaičių procedūrai 4&lt;br /&gt;
        display(multipliednum)&lt;br /&gt;
    # Susidorojame su išimtimis, kurios gali atsirasti dėl netinkamo vartotojo skaičiaus įvedimo&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Privalote įvesti tinkamą skaičių.\n&amp;quot;)&lt;br /&gt;
        # Atstatome kintamojo num reikšmę, kad ištrintumėm netinkamą vartotojo įvestį.&lt;br /&gt;
        num = 0&lt;br /&gt;
        # Dar kartą iškviečiame main.&lt;br /&gt;
        main()&lt;br /&gt;
&lt;br /&gt;
# Procedūra 2&lt;br /&gt;
def addfive(num):&lt;br /&gt;
    return num + 5&lt;br /&gt;
&lt;br /&gt;
# Procedūra 3&lt;br /&gt;
def multiply(addednum):&lt;br /&gt;
    return addednum * 2.452&lt;br /&gt;
&lt;br /&gt;
# Procedūra 4&lt;br /&gt;
def display(multi):&lt;br /&gt;
    # Parodome galutinį rezultatą.&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra &amp;quot;, multi)&lt;br /&gt;
&lt;br /&gt;
# Kviečiame procedūrą 1&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime skaitemnį &amp;quot;5&amp;quot;, gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 5&lt;br /&gt;
 Galutinis rezultatas yra 24.52&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime reikšmę &amp;quot;g&amp;quot;, tada pasitaisysime ir įrašysime skaitmenį &amp;quot;8&amp;quot;, tada gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 g&lt;br /&gt;
 Privalote įvesti tinkamą skaičių.&lt;br /&gt;
 &lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 8&lt;br /&gt;
 Galutinis rezultatas yra 31.875999999999998&lt;br /&gt;
&lt;br /&gt;
Žemiau matome klasę ir programą, kuri naudoją nurodytą klasę. Ši objektiniu programavimo būdu parašyta programa daro tą patį ką prieš tai darė procedūriniu programavimo būdu parašyta programa. Apžiūrėkime keletą svarbių objektinio programavimo būdo konceptų prieš neriant į ankščiau minėtą klasę ir programą.&lt;br /&gt;
Norint sukurti klasę, mes naudojame &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; raktažodį. Po raktažodžio jūs rašote pavadinimą kurį norėtumėte, jog turėtų jūsų klasė. Dažnai naudojama praktika kuriant klasių pavadinimus yra &amp;lt;i&amp;gt;NaujųŽodžiųRašymasIšDidžiosiosRaidės&amp;lt;/i&amp;gt;.&lt;br /&gt;
Jei norėčiau sukurti klasę pavadinimu dirtysocks, kodas atrodytų taip:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class DirtySocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Iš pradžių pažiūrėkime į klasę. Programa, kuri naudos šią klasę, bus parodyta paskui.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexample.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Class&lt;br /&gt;
&lt;br /&gt;
class NumChange:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.__number = 0&lt;br /&gt;
&lt;br /&gt;
    def addfive(self,num):&lt;br /&gt;
        self.__number = num&lt;br /&gt;
        return self.__number + 5&lt;br /&gt;
&lt;br /&gt;
    def multiply(self,added):&lt;br /&gt;
        self.__added = added&lt;br /&gt;
        return self.__added * 2.452&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Programa, kuri naudoja viršuje esančią klasę yra parašyta žemiau.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexampleprog.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstracija - Programa&lt;br /&gt;
&lt;br /&gt;
import oopexample&lt;br /&gt;
&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    num = float(input(&amp;quot;Įrašykite skaičių.\n&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    added = maths.addfive(num)&lt;br /&gt;
&lt;br /&gt;
    multip = maths.multiply(added)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra &amp;quot;, multip)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tikriausiai jūs dabar esate pasimetę. Tai visiškai suprantama. Pradėkime nuo klasės supratimo.&lt;br /&gt;
Klasė yra pavadinta &amp;quot;NumChange&amp;quot;&lt;br /&gt;
Ši klasė turi tris metodus&lt;br /&gt;
* __init__&lt;br /&gt;
* addfive&lt;br /&gt;
* multiply&lt;br /&gt;
&lt;br /&gt;
Šie trys metodai savyje turi labai panašų kodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį į tai, jog kiekvienas metodas turi parametrą pavadinimu &amp;quot;self&amp;quot;. Kiekvienas klasės metodas turi būtinai turėti šį parametrą. Šis parametras nebūtinai turi būti su pavadinimu &amp;quot;self&amp;quot;, bet tai yra priimta geriausia praktika, tad tikriausiai ir jūs turėtumėte jį taip vadinti. Šis parametras yra reikalingas kiekviename metode nes kai jis yra iškviečiamas, jis turi žinoti which object's attributes to operate on. Net kai turime tik vieną objektą, mes turime pasirūpinti, kad programa žinotų, jog mes norime naudoti atributus aprašytus būtent toje klasėje. Todėl mes turime būti saugūs ir naudoti &amp;quot;self&amp;quot; parametrą.&lt;br /&gt;
&lt;br /&gt;
Peržiūrėkime pirmą metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dauguma pitono klasių turi &amp;lt;code&amp;gt;__init__&amp;lt;/code&amp;gt;, kuris yra paleidžiamas automatiškai kiekvieną kartą, kai atmintyje yra sukuriama tos klasės instancija. (Kai sukuriame nuorodą į klasę, yra sukuriama tos klasės &amp;lt;i&amp;gt;instancija&amp;lt;/i&amp;gt; [objektas]). Šis metodas yra paprastai vadinamas &amp;lt;i&amp;gt;inicijavimo metodu&amp;lt;/i&amp;gt;. Kai šis metodas yra paleidžiamas, &amp;quot;self&amp;quot; parametras yra automatiškai priskiriamas tariamam objektui. __init__ metodas inicijuoja klasės atributus, dėl šios priežasties jis yra pavadintas inicijavimo metodu. ↵Po __init__ metodu, iš pradžių &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt; atributui mes priskiriame 0.&lt;br /&gt;
Mes sukuriame nuorodą į turimo objekto atributą panaudojant taškinį žymėjimą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.__number = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kodas &amp;lt;code&amp;gt;self.__number = 0&amp;lt;/code&amp;gt; reiškia, jog &amp;quot;objekte esančio &amp;quot;number&amp;quot; atributo reikšmė yra 0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į sekantį metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
    self.__number = num&lt;br /&gt;
    return self.__number + 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis metodas yra pavadintas &amp;quot;addfive&amp;quot;. Jis priima parametrą pavadinimu &amp;quot;num&amp;quot;. Metode esanti logika tada priskiria &amp;quot;num&amp;quot; reikšmę objekte esančiui atributui su pavadinimu &amp;quot;number&amp;quot;. This method is named &amp;quot;addfive&amp;quot;. Tada metodas prideda 5 prie &amp;quot;number&amp;quot; ir jį grąžina jį iššaukiančiui.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į trečiajį metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
    self.__added = added&lt;br /&gt;
    return self.__added * 2.453&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis metodas yra pavadintas &amp;quot;multiply&amp;quot;. Jis priima parametrą pavadinimu &amp;quot;added&amp;quot;. Metodas priskiria priimtą reikšmę objekte esančiui atributui su pavadinimu &amp;quot;added&amp;quot; ir grąžina &amp;quot;added&amp;quot; atributo ir 2.452 sandaugą jį iššaukiančiui.&lt;br /&gt;
&lt;br /&gt;
Ar atkreipėte dėmesį į tai, jog kiekvienas metodo pavadinimas prasideda su dviem pabraukimais? Pabandykime tai suprasti.&lt;br /&gt;
Prieš tai mes minėjome, jog objektas, su metodų pagalba, dirba su atributais apibrėžtais jame pačiame. Būtų idealu, jei tuos atributus mes galėtumėm pakeisti TIK SU METODAIS ESANČIAIS PAČIAME OBJEKTE. Įmanoma turėti iššorinį kodą, kuris galėtų manipuliuoti tais pačiais atributais. Norint &amp;quot;paslėpti&amp;quot; atributus, taip, kad juos matytų metodai aprašyti pačiame objekte, turime naudoti du pabraukimus prieš objekto pavadinima, taip kaip ir demonstravome. Ištrynus abu pabraukimus nuo atributo pavadinimo mes juo galėsime manipuliuoti kodu, kuris yra parašytas objekto išorėje.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į programą, kuri naudoja klasę, kurią aptarėme.&lt;br /&gt;
&lt;br /&gt;
Atkreipkite dėmesį į pirmą eilutę, kuri nėra komentaras.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import oopexample&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši kodo eilutė importuoją klasę, kurią išsaugojome atskirame faile (modulyje). Klasės nebūtinai turi būti talpinamos atskiruose failuose, bet tai yra priimta kaip gera praktika, tad yra verta jau nuo pat pradžių priprasti prie modulių importavimo.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši eilutė sukuria NumChange pavadinimu, &amp;quot;oopexample&amp;quot; modulyje patalpintos klasės instanciją, kuri yra priskiriama &amp;quot;maths&amp;quot; kintamajam.&lt;br /&gt;
Sintaksė atrodo taip:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;i&amp;gt;modulename.Classname()&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Apibrėžiame main funkciją.&lt;br /&gt;
Pasiimame skaičių iš vartotojo.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė &amp;lt;code&amp;gt;added = maths.addfive(num)&amp;lt;/code&amp;gt; nusiunčia &amp;quot;num&amp;quot; kintamojo reikšmę metodui pavadinimu &amp;quot;addfive&amp;quot;. Metodas yra aprašytas klasėje sends the value of the &amp;quot;num&amp;quot; variable to the method named &amp;quot;addfive&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;added&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė &amp;lt;code&amp;gt;multip = maths.multiply(added)&amp;lt;/code&amp;gt; sends the value of the variable &amp;quot;added&amp;quot;, to the method named &amp;quot;multiply&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;multip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė atspausdina &amp;quot;Galutinis rezultatas yra &amp;lt;multip reikšmė&amp;gt;&amp;quot;. Paskutinė eilutė iššaukia main funkciją, kuri įvykdo žingsnius nurodytus viršuje.&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Rekursija|next=Įvadas į importuotas bibliotekas ir kitas funkcijas}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3507</id>
		<title>Python Vadovėlis/Įvadas į objektinį programavimą Python 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3507"/>
		<updated>2021-11-09T12:15:43Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: next teksto pavadinimo korekcija&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objektinis programavimas==&lt;br /&gt;
&lt;br /&gt;
Iki šiol tu naudojai procedūrinį programavimo būdą. Tačiau, yra daug programų, kurios - parašytos naudojant objektinį programavimo būdą. Žinant abu būdus ir jų skirtumus yra labai svarbu. Informatikoje, daug svarbių kalbų kaip C++ ar Java dažnai naudoja objektinį programavimo būdą.&lt;br /&gt;
&lt;br /&gt;
Pradedantiesiems ir mokiniams neturintiems programavimo žinių objektinis programavimas dažnai gali atrodyti painus ir tai yra visiškai normalu. Nesijausk blogai jei iš pradžių suprasti nesiseka. Jei šis skyrius tau to suprasti nepadės, yra ir daugiau gerų šaltinių, kurie tau padės atsakyti į visus klausimus.&lt;br /&gt;
&lt;br /&gt;
Šis skyrius yra padalintas į keletą pamokų. Kiekviena pamoka yra skirta paaiškinti skirtingas objektinio programavimo dalis. &amp;lt;b&amp;gt;LABAI SVARBU&amp;lt;/b&amp;gt; suprasti visas objektinio programavimo dalis. Prieš kiekvieną pamoką, bus parašyta įžanga, kuri paaiškins pagrindines idėjas, sąvokas ir kitas objektinio programavimo sritis, kurios yra reikalingos suprasti kiekvieną pamoką.&lt;br /&gt;
&lt;br /&gt;
==Įžanga==&lt;br /&gt;
&lt;br /&gt;
Galvokite apie procedūrą kaip apie funkciją. Funkcija turi konkrečią paskyrtį ir jų gali būti įvairių: rikti įvestis, atlikti matematinius skaičiavimus, atvaizduoti ar manipuliuoti duomenis. Typically, procedures use data which is separate from code for manipulation. This data is often passed between procedures. When a program becomes much larger and complex, this can cause problems.&lt;br /&gt;
Pavyzdžiui, suprogramavai programą, kuri kintamuosiuose išsaugo produkto duomenis. Kai klientas paprašo informacijos apie produktą, kintamieji, kurie turi visą informaciją, yra perduodami įvairioms funkcijoms su skirtingomis paskirtimis. Laikui bėgant ir saugant vis daugiau duomenų apie turimus produktus, tu sugalvoji išsaugoti turimą informaciją sąrašuose ar žodynuose. Norint, jog tavo programa veiktų, tu dabar turi redaguoti kiekvieną funkciją, kuri naudojo tuos kintamuosius, taip, kad dabar ji galėtų priimti ir manipuliuoti sąrašus ar žodynus. Imagine the time that would take for a program that was hundreds of megabytes, and hundreds of files in size! It would drive you insane! not to mention, errors in your code, are almost guaranteed, just because of the large volume of work and possibilities to make a typo or other error. This is less than optimal.&lt;br /&gt;
Procedūrinis programavimas yra paremtas procedūromis ar funkcijomis. Objektinis programavimas yra paremtas objektais. Ar prisimeni kaip procedūrinė programa atskyrė duomenis nuo kodo? Ar prisimeni tą programą, kuri turėjo šimtus failų ir norint kažką pakeisti reikėdavo ilgai narpstytis? &lt;br /&gt;
Galvokite apie &amp;lt;i&amp;gt;objektą&amp;lt;/i&amp;gt; kaip apie minėtų failų ir duomenų &amp;quot;kombinaciją&amp;quot; į vieną esybę. Technine prasme, objektas yra esybė, kuri savyje turi duomenis ir procedūras (kodą, funkcijas, t.t.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Duomenis objekto viduje vadiname &amp;lt;i&amp;gt;atributais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Funkcijas ar procedūras objekto viduje vadiname &amp;lt;i&amp;gt;metodais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;duomenų atributus&amp;lt;/b&amp;gt; kaip apie kintamuosius. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;metodus&amp;lt;/b&amp;gt; kaip apie funkcijas ar procedūras. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į paprastą, kasdienį pavyzdį. Lemputė ir jungiklis tavo kambaryje.&lt;br /&gt;
Atributai bus štai tokie.&lt;br /&gt;
&lt;br /&gt;
//Mindaugo komentaras: ar verčiame True/False?&lt;br /&gt;
* šviesa_įjungta ((True)Taip arba (False)Ne)&lt;br /&gt;
* jungiklio_pozicija (Viršuje arba Apačioje)&lt;br /&gt;
* elektros_tekėjimas (Taip arba Ne)&lt;br /&gt;
&lt;br /&gt;
Metodai būtų štai tokie.&lt;br /&gt;
&lt;br /&gt;
* pakeisti_jungiklio_poziciją&lt;br /&gt;
* pakeisti_elektros_tekėjimą&lt;br /&gt;
&lt;br /&gt;
Atributai gali būti matomi ir nematomi. Pavyzdžiui, mes negalime matyti elektros tekančios į lemputę. Mes tik žinome, kad elektra išties teka, nes ji tuo metu skleidžia šviesą. Nepaisant to, mes galime matyti jungiklio poziciją (jungiklio_pozicija) ir taip pat mes matome ar šviesa yra įjungta ar ne (šviesa_įjungta). Kai kurie metodai yra &amp;lt;i&amp;gt;privatūs&amp;lt;/i&amp;gt;. Tai reiškia, jog jų neišeina tiesiogiai pakeisti. Pavyzdžiui, nebent būtų nukerpami laidai (to nedarykite ir vardan šio pavyzdžio manykite, jog laidai neegzistuoja), jūs negalėtumėte pakeisti elektros tėkmės tiesiogiai. Jūs taip pat negalite tiesiogiai įtakoti lemputės šviesos (ne, jūs negalite atsukti lemputės ar jos sudaužyti!). Bet, jūs visada galite šiuos atributus įtakoti netiesiogiai naudojant objekto &amp;lt;i&amp;gt;metodus&amp;lt;/i&amp;gt;. Jeigu nesumokėsite mokesčių, metodas pavadinimu &amp;lt;code&amp;gt;pakeisti_elektros_tekėjimą&amp;lt;/code&amp;gt; pakeis &amp;lt;code&amp;gt;elektros_tekėjimas&amp;lt;/code&amp;gt; reikšmę į NE(FALSE). Jei jūs įjungsite jungiklį, &amp;lt;code&amp;gt;pakeisti_jungiklio_poziciją&amp;lt;/code&amp;gt; metodas pakeis &amp;lt;code&amp;gt;šviesa_įjungta&amp;lt;/code&amp;gt; atributo reikšmę.&lt;br /&gt;
&lt;br /&gt;
Dabar jau tikriausiai galvoji, &amp;quot;Ką tai turi bendro su Pitonu?&amp;quot; ar, &amp;quot;Aš nesuprantu, bet kaip man sukurti tą Objektą?&amp;quot;. Na, mes beveik priėjome prie atsakymų! Tik turiu paaiškinti dar vieną idėją prieš neriant į kodą.&lt;br /&gt;
&lt;br /&gt;
Pitone objekto atributai ir metodai yra nurodomi &amp;lt;b&amp;gt;klasės&amp;lt;/b&amp;gt;. Galvokite apie klasė kaip apie objekto techninį piešinį. Pavyzdžiui, jūsų namai - objektas kuriame gyvenate - taip pat jį galite vadinti butu, vasarnamiu, prakartėle ar bet kuo kitu, buvo pastatytas naudojant techinius piešinius; šie techniniai piešiniai būtų vadinami klasėmis, kurios buvo panaudotos projektuojant jūsų namus, butą, vasarnamį, na suprantat apie ką kalbu. &lt;br /&gt;
&lt;br /&gt;
Dar kartą, klasė mums pasako kaip sukurti objektą. Techniniais terminais tariant, ir tai yra labai svarbu, klasė nusako naudojamus duomenų atributus ir metodus objekte.&lt;br /&gt;
&lt;br /&gt;
Norint sukurti klasę, mes suprogramuojame &amp;lt;i&amp;gt;klasės apibrėžimą&amp;lt;/i&amp;gt;. Klasės apibrėžimas, tai grupė pareiškimų, kurie nusako objekto atributus ir metodus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Pirma pamoka&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apačioje yra procedūrinė programa, kuri atlieka paprastą matematinį veiksmą su vartotojo įvestu skaičiu.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Programa parašyta Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
&lt;br /&gt;
# Procedūra 1&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Pasiimame skaičių, kurį manipuliuosime.&lt;br /&gt;
        num = float(input(&amp;quot;Įrašykite skaičių.\n&amp;quot;))&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su pasiimtu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 2&lt;br /&gt;
        addednum = addfive(num)&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su ankščiau išsaugotu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 3&lt;br /&gt;
        multipliednum = multiply(addednum)&lt;br /&gt;
        # Paduodame skaičių procedūrai 4&lt;br /&gt;
        display(multipliednum)&lt;br /&gt;
    # Susidorojame su išimtimis, kurios gali atsirasti dėl netinkamo vartotojo skaičiaus įvedimo&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Privalote įvesti tinkamą skaičių.\n&amp;quot;)&lt;br /&gt;
        # Atstatome kintamojo num reikšmę, kad ištrintumėm netinkamą vartotojo įvestį.&lt;br /&gt;
        num = 0&lt;br /&gt;
        # Dar kartą iškviečiame main.&lt;br /&gt;
        main()&lt;br /&gt;
&lt;br /&gt;
# Procedūra 2&lt;br /&gt;
def addfive(num):&lt;br /&gt;
    return num + 5&lt;br /&gt;
&lt;br /&gt;
# Procedūra 3&lt;br /&gt;
def multiply(addednum):&lt;br /&gt;
    return addednum * 2.452&lt;br /&gt;
&lt;br /&gt;
# Procedūra 4&lt;br /&gt;
def display(multi):&lt;br /&gt;
    # Parodome galutinį rezultatą.&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra &amp;quot;, multi)&lt;br /&gt;
&lt;br /&gt;
# Kviečiame procedūrą 1&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime skaitemnį &amp;quot;5&amp;quot;, gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 5&lt;br /&gt;
 Galutinis rezultatas yra 24.52&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime reikšmę &amp;quot;g&amp;quot;, tada pasitaisysime ir įrašysime skaitmenį &amp;quot;8&amp;quot;, tada gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 g&lt;br /&gt;
 Privalote įvesti tinkamą skaičių.&lt;br /&gt;
 &lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 8&lt;br /&gt;
 Galutinis rezultatas yra 31.875999999999998&lt;br /&gt;
&lt;br /&gt;
Žemiau matome klasę ir programą, kuri naudoją nurodytą klasę. Ši objektiniu programavimo būdu parašyta programa daro tą patį ką prieš tai darė procedūriniu programavimo būdu parašyta programa. Apžiūrėkime keletą svarbių objektinio programavimo būdo konceptų prieš neriant į ankščiau minėtą klasę ir programą.&lt;br /&gt;
Norint sukurti klasę, mes naudojame &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; raktažodį. Po raktažodžio jūs rašote pavadinimą kurį norėtumėte, jog turėtų jūsų klasė. Dažnai naudojama praktika kuriant klasių pavadinimus yra &amp;lt;i&amp;gt;NaujųŽodžiųRašymasIšDidžiosiosRaidės&amp;lt;/i&amp;gt;.&lt;br /&gt;
Jei norėčiau sukurti klasę pavadinimu dirtysocks, kodas atrodytų taip:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class DirtySocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Iš pradžių pažiūrėkime į klasę. Programa, kuri naudos šią klasę, bus parodyta paskui.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexample.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Class&lt;br /&gt;
&lt;br /&gt;
class NumChange:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.__number = 0&lt;br /&gt;
&lt;br /&gt;
    def addfive(self,num):&lt;br /&gt;
        self.__number = num&lt;br /&gt;
        return self.__number + 5&lt;br /&gt;
&lt;br /&gt;
    def multiply(self,added):&lt;br /&gt;
        self.__added = added&lt;br /&gt;
        return self.__added * 2.452&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Programa, kuri naudoja viršuje esančią klasę yra parašyta žemiau.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexampleprog.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstracija - Programa&lt;br /&gt;
&lt;br /&gt;
import oopexample&lt;br /&gt;
&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    num = float(input(&amp;quot;Įrašykite skaičių.\n&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    added = maths.addfive(num)&lt;br /&gt;
&lt;br /&gt;
    multip = maths.multiply(added)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra &amp;quot;, multip)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tikriausiai jūs dabar esate pasimetę. Tai visiškai suprantama. Pradėkime nuo klasės supratimo.&lt;br /&gt;
Klasė yra pavadinta &amp;quot;NumChange&amp;quot;&lt;br /&gt;
Ši klasė turi tris metodus&lt;br /&gt;
* __init__&lt;br /&gt;
* addfive&lt;br /&gt;
* multiply&lt;br /&gt;
&lt;br /&gt;
Šie trys metodai savyje turi labai panašų kodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį į tai, jog kiekvienas metodas turi parametrą pavadinimu &amp;quot;self&amp;quot;. Kiekvienas klasės metodas turi būtinai turėti šį parametrą. Šis parametras nebūtinai turi būti su pavadinimu &amp;quot;self&amp;quot;, bet tai yra priimta geriausia praktika, tad tikriausiai ir jūs turėtumėte jį taip vadinti. Šis parametras yra reikalingas kiekviename metode nes kai jis yra iškviečiamas, jis turi žinoti which object's attributes to operate on. Net kai turime tik vieną objektą, mes turime pasirūpinti, kad programa žinotų, jog mes norime naudoti atributus aprašytus būtent toje klasėje. Todėl mes turime būti saugūs ir naudoti &amp;quot;self&amp;quot; parametrą.&lt;br /&gt;
&lt;br /&gt;
Peržiūrėkime pirmą metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dauguma pitono klasių turi &amp;lt;code&amp;gt;__init__&amp;lt;/code&amp;gt;, kuris yra paleidžiamas automatiškai kiekvieną kartą, kai atmintyje yra sukuriama tos klasės instancija. (Kai sukuriame nuorodą į klasę, yra sukuriama tos klasės &amp;lt;i&amp;gt;instancija&amp;lt;/i&amp;gt; [objektas]). Šis metodas yra paprastai vadinamas &amp;lt;i&amp;gt;inicijavimo metodu&amp;lt;/i&amp;gt;. Kai šis metodas yra paleidžiamas, &amp;quot;self&amp;quot; parametras yra automatiškai priskiriamas tariamam objektui. __init__ metodas inicijuoja klasės atributus, dėl šios priežasties jis yra pavadintas inicijavimo metodu. ↵Po __init__ metodu, iš pradžių &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt; atributui mes priskiriame 0.&lt;br /&gt;
Mes sukuriame nuorodą į turimo objekto atributą panaudojant taškinį žymėjimą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.__number = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kodas &amp;lt;code&amp;gt;self.__number = 0&amp;lt;/code&amp;gt; reiškia, jog &amp;quot;objekte esančio &amp;quot;number&amp;quot; atributo reikšmė yra 0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į sekantį metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
    self.__number = num&lt;br /&gt;
    return self.__number + 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis metodas yra pavadintas &amp;quot;addfive&amp;quot;. Jis priima parametrą pavadinimu &amp;quot;num&amp;quot;. Metode esanti logika tada priskiria &amp;quot;num&amp;quot; reikšmę objekte esančiui atributui su pavadinimu &amp;quot;number&amp;quot;. This method is named &amp;quot;addfive&amp;quot;. Tada metodas prideda 5 prie &amp;quot;number&amp;quot; ir jį grąžina jį iššaukiančiui.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į trečiajį metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
    self.__added = added&lt;br /&gt;
    return self.__added * 2.453&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis metodas yra pavadintas &amp;quot;multiply&amp;quot;. Jis priima parametrą pavadinimu &amp;quot;added&amp;quot;. Metodas priskiria priimtą reikšmę objekte esančiui atributui su pavadinimu &amp;quot;added&amp;quot; ir grąžina &amp;quot;added&amp;quot; atributo ir 2.452 sandaugą jį iššaukiančiui.&lt;br /&gt;
&lt;br /&gt;
Ar atkreipėte dėmesį į tai, jog kiekvienas metodo pavadinimas prasideda su dviem pabraukimais? Pabandykime tai suprasti.&lt;br /&gt;
Prieš tai mes minėjome, jog objektas, su metodų pagalba, dirba su atributais apibrėžtais jame pačiame. Būtų idealu, jei tuos atributus mes galėtumėm pakeisti TIK SU METODAIS ESANČIAIS PAČIAME OBJEKTE. Įmanoma turėti iššorinį kodą, kuris galėtų manipuliuoti tais pačiais atributais. Norint &amp;quot;paslėpti&amp;quot; atributus, taip, kad juos matytų metodai aprašyti pačiame objekte, turime naudoti du pabraukimus prieš objekto pavadinima, taip kaip ir demonstravome. Ištrynus abu pabraukimus nuo atributo pavadinimo mes juo galėsime manipuliuoti kodu, kuris yra parašytas objekto išorėje.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į programą, kuri naudoja klasę, kurią aptarėme.&lt;br /&gt;
&lt;br /&gt;
Atkreipkite dėmesį į pirmą eilutę, kuri nėra komentaras.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import oopexample&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši kodo eilutė importuoją klasę, kurią išsaugojome atskirame faile (modulyje). Klasės nebūtinai turi būti talpinamos atskiruose failuose, bet tai yra priimta kaip gera praktika, tad yra verta jau nuo pat pradžių priprasti prie modulių importavimo.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši eilutė sukuria NumChange pavadinimu, &amp;quot;oopexample&amp;quot; modulyje patalpintos klasės instanciją, kuri yra priskiriama &amp;quot;maths&amp;quot; kintamajam.&lt;br /&gt;
Sintaksė atrodo taip:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;i&amp;gt;modulename.Classname()&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Apibrėžiame main funkciją.&lt;br /&gt;
Pasiimame skaičių iš vartotojo.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė &amp;lt;code&amp;gt;added = maths.addfive(num)&amp;lt;/code&amp;gt; nusiunčia &amp;quot;num&amp;quot; kintamojo reikšmę metodui pavadinimu &amp;quot;addfive&amp;quot;. Metodas yra aprašytas klasėje sends the value of the &amp;quot;num&amp;quot; variable to the method named &amp;quot;addfive&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;added&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė &amp;lt;code&amp;gt;multip = maths.multiply(added)&amp;lt;/code&amp;gt; sends the value of the variable &amp;quot;added&amp;quot;, to the method named &amp;quot;multiply&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;multip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė atspausdina &amp;quot;Galutinis rezultatas yra &amp;lt;multip reikšmė&amp;gt;&amp;quot;. Paskutinė eilutė iššaukia main funkciją, kuri įvykdo žingsnius nurodytus viršuje.&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Rekursija|next=Įvadas į importuotas bibliotekas ir kitas funkcijas}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3506</id>
		<title>Python Vadovėlis/Įvadas į objektinį programavimą Python 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3506"/>
		<updated>2021-11-09T12:14:53Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: Nebaigtas teksto galas&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objektinis programavimas==&lt;br /&gt;
&lt;br /&gt;
Iki šiol tu naudojai procedūrinį programavimo būdą. Tačiau, yra daug programų, kurios - parašytos naudojant objektinį programavimo būdą. Žinant abu būdus ir jų skirtumus yra labai svarbu. Informatikoje, daug svarbių kalbų kaip C++ ar Java dažnai naudoja objektinį programavimo būdą.&lt;br /&gt;
&lt;br /&gt;
Pradedantiesiems ir mokiniams neturintiems programavimo žinių objektinis programavimas dažnai gali atrodyti painus ir tai yra visiškai normalu. Nesijausk blogai jei iš pradžių suprasti nesiseka. Jei šis skyrius tau to suprasti nepadės, yra ir daugiau gerų šaltinių, kurie tau padės atsakyti į visus klausimus.&lt;br /&gt;
&lt;br /&gt;
Šis skyrius yra padalintas į keletą pamokų. Kiekviena pamoka yra skirta paaiškinti skirtingas objektinio programavimo dalis. &amp;lt;b&amp;gt;LABAI SVARBU&amp;lt;/b&amp;gt; suprasti visas objektinio programavimo dalis. Prieš kiekvieną pamoką, bus parašyta įžanga, kuri paaiškins pagrindines idėjas, sąvokas ir kitas objektinio programavimo sritis, kurios yra reikalingos suprasti kiekvieną pamoką.&lt;br /&gt;
&lt;br /&gt;
==Įžanga==&lt;br /&gt;
&lt;br /&gt;
Galvokite apie procedūrą kaip apie funkciją. Funkcija turi konkrečią paskyrtį ir jų gali būti įvairių: rikti įvestis, atlikti matematinius skaičiavimus, atvaizduoti ar manipuliuoti duomenis. Typically, procedures use data which is separate from code for manipulation. This data is often passed between procedures. When a program becomes much larger and complex, this can cause problems.&lt;br /&gt;
Pavyzdžiui, suprogramavai programą, kuri kintamuosiuose išsaugo produkto duomenis. Kai klientas paprašo informacijos apie produktą, kintamieji, kurie turi visą informaciją, yra perduodami įvairioms funkcijoms su skirtingomis paskirtimis. Laikui bėgant ir saugant vis daugiau duomenų apie turimus produktus, tu sugalvoji išsaugoti turimą informaciją sąrašuose ar žodynuose. Norint, jog tavo programa veiktų, tu dabar turi redaguoti kiekvieną funkciją, kuri naudojo tuos kintamuosius, taip, kad dabar ji galėtų priimti ir manipuliuoti sąrašus ar žodynus. Imagine the time that would take for a program that was hundreds of megabytes, and hundreds of files in size! It would drive you insane! not to mention, errors in your code, are almost guaranteed, just because of the large volume of work and possibilities to make a typo or other error. This is less than optimal.&lt;br /&gt;
Procedūrinis programavimas yra paremtas procedūromis ar funkcijomis. Objektinis programavimas yra paremtas objektais. Ar prisimeni kaip procedūrinė programa atskyrė duomenis nuo kodo? Ar prisimeni tą programą, kuri turėjo šimtus failų ir norint kažką pakeisti reikėdavo ilgai narpstytis? &lt;br /&gt;
Galvokite apie &amp;lt;i&amp;gt;objektą&amp;lt;/i&amp;gt; kaip apie minėtų failų ir duomenų &amp;quot;kombinaciją&amp;quot; į vieną esybę. Technine prasme, objektas yra esybė, kuri savyje turi duomenis ir procedūras (kodą, funkcijas, t.t.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Duomenis objekto viduje vadiname &amp;lt;i&amp;gt;atributais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Funkcijas ar procedūras objekto viduje vadiname &amp;lt;i&amp;gt;metodais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;duomenų atributus&amp;lt;/b&amp;gt; kaip apie kintamuosius. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;metodus&amp;lt;/b&amp;gt; kaip apie funkcijas ar procedūras. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į paprastą, kasdienį pavyzdį. Lemputė ir jungiklis tavo kambaryje.&lt;br /&gt;
Atributai bus štai tokie.&lt;br /&gt;
&lt;br /&gt;
//Mindaugo komentaras: ar verčiame True/False?&lt;br /&gt;
* šviesa_įjungta ((True)Taip arba (False)Ne)&lt;br /&gt;
* jungiklio_pozicija (Viršuje arba Apačioje)&lt;br /&gt;
* elektros_tekėjimas (Taip arba Ne)&lt;br /&gt;
&lt;br /&gt;
Metodai būtų štai tokie.&lt;br /&gt;
&lt;br /&gt;
* pakeisti_jungiklio_poziciją&lt;br /&gt;
* pakeisti_elektros_tekėjimą&lt;br /&gt;
&lt;br /&gt;
Atributai gali būti matomi ir nematomi. Pavyzdžiui, mes negalime matyti elektros tekančios į lemputę. Mes tik žinome, kad elektra išties teka, nes ji tuo metu skleidžia šviesą. Nepaisant to, mes galime matyti jungiklio poziciją (jungiklio_pozicija) ir taip pat mes matome ar šviesa yra įjungta ar ne (šviesa_įjungta). Kai kurie metodai yra &amp;lt;i&amp;gt;privatūs&amp;lt;/i&amp;gt;. Tai reiškia, jog jų neišeina tiesiogiai pakeisti. Pavyzdžiui, nebent būtų nukerpami laidai (to nedarykite ir vardan šio pavyzdžio manykite, jog laidai neegzistuoja), jūs negalėtumėte pakeisti elektros tėkmės tiesiogiai. Jūs taip pat negalite tiesiogiai įtakoti lemputės šviesos (ne, jūs negalite atsukti lemputės ar jos sudaužyti!). Bet, jūs visada galite šiuos atributus įtakoti netiesiogiai naudojant objekto &amp;lt;i&amp;gt;metodus&amp;lt;/i&amp;gt;. Jeigu nesumokėsite mokesčių, metodas pavadinimu &amp;lt;code&amp;gt;pakeisti_elektros_tekėjimą&amp;lt;/code&amp;gt; pakeis &amp;lt;code&amp;gt;elektros_tekėjimas&amp;lt;/code&amp;gt; reikšmę į NE(FALSE). Jei jūs įjungsite jungiklį, &amp;lt;code&amp;gt;pakeisti_jungiklio_poziciją&amp;lt;/code&amp;gt; metodas pakeis &amp;lt;code&amp;gt;šviesa_įjungta&amp;lt;/code&amp;gt; atributo reikšmę.&lt;br /&gt;
&lt;br /&gt;
Dabar jau tikriausiai galvoji, &amp;quot;Ką tai turi bendro su Pitonu?&amp;quot; ar, &amp;quot;Aš nesuprantu, bet kaip man sukurti tą Objektą?&amp;quot;. Na, mes beveik priėjome prie atsakymų! Tik turiu paaiškinti dar vieną idėją prieš neriant į kodą.&lt;br /&gt;
&lt;br /&gt;
Pitone objekto atributai ir metodai yra nurodomi &amp;lt;b&amp;gt;klasės&amp;lt;/b&amp;gt;. Galvokite apie klasė kaip apie objekto techninį piešinį. Pavyzdžiui, jūsų namai - objektas kuriame gyvenate - taip pat jį galite vadinti butu, vasarnamiu, prakartėle ar bet kuo kitu, buvo pastatytas naudojant techinius piešinius; šie techniniai piešiniai būtų vadinami klasėmis, kurios buvo panaudotos projektuojant jūsų namus, butą, vasarnamį, na suprantat apie ką kalbu. &lt;br /&gt;
&lt;br /&gt;
Dar kartą, klasė mums pasako kaip sukurti objektą. Techniniais terminais tariant, ir tai yra labai svarbu, klasė nusako naudojamus duomenų atributus ir metodus objekte.&lt;br /&gt;
&lt;br /&gt;
Norint sukurti klasę, mes suprogramuojame &amp;lt;i&amp;gt;klasės apibrėžimą&amp;lt;/i&amp;gt;. Klasės apibrėžimas, tai grupė pareiškimų, kurie nusako objekto atributus ir metodus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Pirma pamoka&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apačioje yra procedūrinė programa, kuri atlieka paprastą matematinį veiksmą su vartotojo įvestu skaičiu.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Programa parašyta Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
&lt;br /&gt;
# Procedūra 1&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Pasiimame skaičių, kurį manipuliuosime.&lt;br /&gt;
        num = float(input(&amp;quot;Įrašykite skaičių.\n&amp;quot;))&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su pasiimtu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 2&lt;br /&gt;
        addednum = addfive(num)&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su ankščiau išsaugotu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 3&lt;br /&gt;
        multipliednum = multiply(addednum)&lt;br /&gt;
        # Paduodame skaičių procedūrai 4&lt;br /&gt;
        display(multipliednum)&lt;br /&gt;
    # Susidorojame su išimtimis, kurios gali atsirasti dėl netinkamo vartotojo skaičiaus įvedimo&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Privalote įvesti tinkamą skaičių.\n&amp;quot;)&lt;br /&gt;
        # Atstatome kintamojo num reikšmę, kad ištrintumėm netinkamą vartotojo įvestį.&lt;br /&gt;
        num = 0&lt;br /&gt;
        # Dar kartą iškviečiame main.&lt;br /&gt;
        main()&lt;br /&gt;
&lt;br /&gt;
# Procedūra 2&lt;br /&gt;
def addfive(num):&lt;br /&gt;
    return num + 5&lt;br /&gt;
&lt;br /&gt;
# Procedūra 3&lt;br /&gt;
def multiply(addednum):&lt;br /&gt;
    return addednum * 2.452&lt;br /&gt;
&lt;br /&gt;
# Procedūra 4&lt;br /&gt;
def display(multi):&lt;br /&gt;
    # Parodome galutinį rezultatą.&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra &amp;quot;, multi)&lt;br /&gt;
&lt;br /&gt;
# Kviečiame procedūrą 1&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime skaitemnį &amp;quot;5&amp;quot;, gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 5&lt;br /&gt;
 Galutinis rezultatas yra 24.52&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime reikšmę &amp;quot;g&amp;quot;, tada pasitaisysime ir įrašysime skaitmenį &amp;quot;8&amp;quot;, tada gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 g&lt;br /&gt;
 Privalote įvesti tinkamą skaičių.&lt;br /&gt;
 &lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 8&lt;br /&gt;
 Galutinis rezultatas yra 31.875999999999998&lt;br /&gt;
&lt;br /&gt;
Žemiau matome klasę ir programą, kuri naudoją nurodytą klasę. Ši objektiniu programavimo būdu parašyta programa daro tą patį ką prieš tai darė procedūriniu programavimo būdu parašyta programa. Apžiūrėkime keletą svarbių objektinio programavimo būdo konceptų prieš neriant į ankščiau minėtą klasę ir programą.&lt;br /&gt;
Norint sukurti klasę, mes naudojame &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; raktažodį. Po raktažodžio jūs rašote pavadinimą kurį norėtumėte, jog turėtų jūsų klasė. Dažnai naudojama praktika kuriant klasių pavadinimus yra &amp;lt;i&amp;gt;NaujųŽodžiųRašymasIšDidžiosiosRaidės&amp;lt;/i&amp;gt;.&lt;br /&gt;
Jei norėčiau sukurti klasę pavadinimu dirtysocks, kodas atrodytų taip:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class DirtySocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Iš pradžių pažiūrėkime į klasę. Programa, kuri naudos šią klasę, bus parodyta paskui.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexample.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Class&lt;br /&gt;
&lt;br /&gt;
class NumChange:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.__number = 0&lt;br /&gt;
&lt;br /&gt;
    def addfive(self,num):&lt;br /&gt;
        self.__number = num&lt;br /&gt;
        return self.__number + 5&lt;br /&gt;
&lt;br /&gt;
    def multiply(self,added):&lt;br /&gt;
        self.__added = added&lt;br /&gt;
        return self.__added * 2.452&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Programa, kuri naudoja viršuje esančią klasę yra parašyta žemiau.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexampleprog.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstracija - Programa&lt;br /&gt;
&lt;br /&gt;
import oopexample&lt;br /&gt;
&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    num = float(input(&amp;quot;Įrašykite skaičių.\n&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    added = maths.addfive(num)&lt;br /&gt;
&lt;br /&gt;
    multip = maths.multiply(added)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra &amp;quot;, multip)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tikriausiai jūs dabar esate pasimetę. Tai visiškai suprantama. Pradėkime nuo klasės supratimo.&lt;br /&gt;
Klasė yra pavadinta &amp;quot;NumChange&amp;quot;&lt;br /&gt;
Ši klasė turi tris metodus&lt;br /&gt;
* __init__&lt;br /&gt;
* addfive&lt;br /&gt;
* multiply&lt;br /&gt;
&lt;br /&gt;
Šie trys metodai savyje turi labai panašų kodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį į tai, jog kiekvienas metodas turi parametrą pavadinimu &amp;quot;self&amp;quot;. Kiekvienas klasės metodas turi būtinai turėti šį parametrą. Šis parametras nebūtinai turi būti su pavadinimu &amp;quot;self&amp;quot;, bet tai yra priimta geriausia praktika, tad tikriausiai ir jūs turėtumėte jį taip vadinti. Šis parametras yra reikalingas kiekviename metode nes kai jis yra iškviečiamas, jis turi žinoti which object's attributes to operate on. Net kai turime tik vieną objektą, mes turime pasirūpinti, kad programa žinotų, jog mes norime naudoti atributus aprašytus būtent toje klasėje. Todėl mes turime būti saugūs ir naudoti &amp;quot;self&amp;quot; parametrą.&lt;br /&gt;
&lt;br /&gt;
Peržiūrėkime pirmą metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dauguma pitono klasių turi &amp;lt;code&amp;gt;__init__&amp;lt;/code&amp;gt;, kuris yra paleidžiamas automatiškai kiekvieną kartą, kai atmintyje yra sukuriama tos klasės instancija. (Kai sukuriame nuorodą į klasę, yra sukuriama tos klasės &amp;lt;i&amp;gt;instancija&amp;lt;/i&amp;gt; [objektas]). Šis metodas yra paprastai vadinamas &amp;lt;i&amp;gt;inicijavimo metodu&amp;lt;/i&amp;gt;. Kai šis metodas yra paleidžiamas, &amp;quot;self&amp;quot; parametras yra automatiškai priskiriamas tariamam objektui. __init__ metodas inicijuoja klasės atributus, dėl šios priežasties jis yra pavadintas inicijavimo metodu. ↵Po __init__ metodu, iš pradžių &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt; atributui mes priskiriame 0.&lt;br /&gt;
Mes sukuriame nuorodą į turimo objekto atributą panaudojant taškinį žymėjimą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.__number = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kodas &amp;lt;code&amp;gt;self.__number = 0&amp;lt;/code&amp;gt; reiškia, jog &amp;quot;objekte esančio &amp;quot;number&amp;quot; atributo reikšmė yra 0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į sekantį metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
    self.__number = num&lt;br /&gt;
    return self.__number + 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis metodas yra pavadintas &amp;quot;addfive&amp;quot;. Jis priima parametrą pavadinimu &amp;quot;num&amp;quot;. Metode esanti logika tada priskiria &amp;quot;num&amp;quot; reikšmę objekte esančiui atributui su pavadinimu &amp;quot;number&amp;quot;. This method is named &amp;quot;addfive&amp;quot;. Tada metodas prideda 5 prie &amp;quot;number&amp;quot; ir jį grąžina jį iššaukiančiui.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į trečiajį metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
    self.__added = added&lt;br /&gt;
    return self.__added * 2.453&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis metodas yra pavadintas &amp;quot;multiply&amp;quot;. Jis priima parametrą pavadinimu &amp;quot;added&amp;quot;. Metodas priskiria priimtą reikšmę objekte esančiui atributui su pavadinimu &amp;quot;added&amp;quot; ir grąžina &amp;quot;added&amp;quot; atributo ir 2.452 sandaugą jį iššaukiančiui.&lt;br /&gt;
&lt;br /&gt;
Ar atkreipėte dėmesį į tai, jog kiekvienas metodo pavadinimas prasideda su dviem pabraukimais? Pabandykime tai suprasti.&lt;br /&gt;
Prieš tai mes minėjome, jog objektas, su metodų pagalba, dirba su atributais apibrėžtais jame pačiame. Būtų idealu, jei tuos atributus mes galėtumėm pakeisti TIK SU METODAIS ESANČIAIS PAČIAME OBJEKTE. Įmanoma turėti iššorinį kodą, kuris galėtų manipuliuoti tais pačiais atributais. Norint &amp;quot;paslėpti&amp;quot; atributus, taip, kad juos matytų metodai aprašyti pačiame objekte, turime naudoti du pabraukimus prieš objekto pavadinima, taip kaip ir demonstravome. Ištrynus abu pabraukimus nuo atributo pavadinimo mes juo galėsime manipuliuoti kodu, kuris yra parašytas objekto išorėje.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į programą, kuri naudoja klasę, kurią aptarėme.&lt;br /&gt;
&lt;br /&gt;
Atkreipkite dėmesį į pirmą eilutę, kuri nėra komentaras.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import oopexample&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši kodo eilutė importuoją klasę, kurią išsaugojome atskirame faile (modulyje). Klasės nebūtinai turi būti talpinamos atskiruose failuose, bet tai yra priimta kaip gera praktika, tad yra verta jau nuo pat pradžių priprasti prie modulių importavimo.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ši eilutė sukuria NumChange pavadinimu, &amp;quot;oopexample&amp;quot; modulyje patalpintos klasės instanciją, kuri yra priskiriama &amp;quot;maths&amp;quot; kintamajam.&lt;br /&gt;
Sintaksė atrodo taip:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;i&amp;gt;modulename.Classname()&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Apibrėžiame main funkciją.&lt;br /&gt;
Pasiimame skaičių iš vartotojo.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė &amp;lt;code&amp;gt;added = maths.addfive(num)&amp;lt;/code&amp;gt; nusiunčia &amp;quot;num&amp;quot; kintamojo reikšmę metodui pavadinimu &amp;quot;addfive&amp;quot;. Metodas yra aprašytas klasėje sends the value of the &amp;quot;num&amp;quot; variable to the method named &amp;quot;addfive&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;added&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė &amp;lt;code&amp;gt;multip = maths.multiply(added)&amp;lt;/code&amp;gt; sends the value of the variable &amp;quot;added&amp;quot;, to the method named &amp;quot;multiply&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;multip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Kita eilutė atspausdina &amp;quot;Galutinis rezultatas yra &amp;lt;multip reikšmė&amp;gt;&amp;quot;. Paskutinė eilutė iššaukia main funkciją, kuri įvykdo žingsnius nurodytus viršuje.&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Rekursija|next=Intro to Imported Libraries and other Functions}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3505</id>
		<title>Python Vadovėlis/Įvadas į objektinį programavimą Python 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3505"/>
		<updated>2021-11-09T10:52:36Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: antras ir trečias metodai&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objektinis programavimas==&lt;br /&gt;
&lt;br /&gt;
Iki šiol tu naudojai procedūrinį programavimo būdą. Tačiau, yra daug programų, kurios - parašytos naudojant objektinį programavimo būdą. Žinant abu būdus ir jų skirtumus yra labai svarbu. Informatikoje, daug svarbių kalbų kaip C++ ar Java dažnai naudoja objektinį programavimo būdą.&lt;br /&gt;
&lt;br /&gt;
Pradedantiesiems ir mokiniams neturintiems programavimo žinių objektinis programavimas dažnai gali atrodyti painus ir tai yra visiškai normalu. Nesijausk blogai jei iš pradžių suprasti nesiseka. Jei šis skyrius tau to suprasti nepadės, yra ir daugiau gerų šaltinių, kurie tau padės atsakyti į visus klausimus.&lt;br /&gt;
&lt;br /&gt;
Šis skyrius yra padalintas į keletą pamokų. Kiekviena pamoka yra skirta paaiškinti skirtingas objektinio programavimo dalis. &amp;lt;b&amp;gt;LABAI SVARBU&amp;lt;/b&amp;gt; suprasti visas objektinio programavimo dalis. Prieš kiekvieną pamoką, bus parašyta įžanga, kuri paaiškins pagrindines idėjas, sąvokas ir kitas objektinio programavimo sritis, kurios yra reikalingos suprasti kiekvieną pamoką.&lt;br /&gt;
&lt;br /&gt;
==Įžanga==&lt;br /&gt;
&lt;br /&gt;
Galvokite apie procedūrą kaip apie funkciją. Funkcija turi konkrečią paskyrtį ir jų gali būti įvairių: rikti įvestis, atlikti matematinius skaičiavimus, atvaizduoti ar manipuliuoti duomenis. Typically, procedures use data which is separate from code for manipulation. This data is often passed between procedures. When a program becomes much larger and complex, this can cause problems.&lt;br /&gt;
Pavyzdžiui, suprogramavai programą, kuri kintamuosiuose išsaugo produkto duomenis. Kai klientas paprašo informacijos apie produktą, kintamieji, kurie turi visą informaciją, yra perduodami įvairioms funkcijoms su skirtingomis paskirtimis. Laikui bėgant ir saugant vis daugiau duomenų apie turimus produktus, tu sugalvoji išsaugoti turimą informaciją sąrašuose ar žodynuose. Norint, jog tavo programa veiktų, tu dabar turi redaguoti kiekvieną funkciją, kuri naudojo tuos kintamuosius, taip, kad dabar ji galėtų priimti ir manipuliuoti sąrašus ar žodynus. Imagine the time that would take for a program that was hundreds of megabytes, and hundreds of files in size! It would drive you insane! not to mention, errors in your code, are almost guaranteed, just because of the large volume of work and possibilities to make a typo or other error. This is less than optimal.&lt;br /&gt;
Procedūrinis programavimas yra paremtas procedūromis ar funkcijomis. Objektinis programavimas yra paremtas objektais. Ar prisimeni kaip procedūrinė programa atskyrė duomenis nuo kodo? Ar prisimeni tą programą, kuri turėjo šimtus failų ir norint kažką pakeisti reikėdavo ilgai narpstytis? &lt;br /&gt;
Galvokite apie &amp;lt;i&amp;gt;objektą&amp;lt;/i&amp;gt; kaip apie minėtų failų ir duomenų &amp;quot;kombinaciją&amp;quot; į vieną esybę. Technine prasme, objektas yra esybė, kuri savyje turi duomenis ir procedūras (kodą, funkcijas, t.t.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Duomenis objekto viduje vadiname &amp;lt;i&amp;gt;atributais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Funkcijas ar procedūras objekto viduje vadiname &amp;lt;i&amp;gt;metodais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;duomenų atributus&amp;lt;/b&amp;gt; kaip apie kintamuosius. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;metodus&amp;lt;/b&amp;gt; kaip apie funkcijas ar procedūras. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į paprastą, kasdienį pavyzdį. Lemputė ir jungiklis tavo kambaryje.&lt;br /&gt;
Atributai bus štai tokie.&lt;br /&gt;
&lt;br /&gt;
//Mindaugo komentaras: ar verčiame True/False?&lt;br /&gt;
* šviesa_įjungta ((True)Taip arba (False)Ne)&lt;br /&gt;
* jungiklio_pozicija (Viršuje arba Apačioje)&lt;br /&gt;
* elektros_tekėjimas (Taip arba Ne)&lt;br /&gt;
&lt;br /&gt;
Metodai būtų štai tokie.&lt;br /&gt;
&lt;br /&gt;
* pakeisti_jungiklio_poziciją&lt;br /&gt;
* pakeisti_elektros_tekėjimą&lt;br /&gt;
&lt;br /&gt;
Atributai gali būti matomi ir nematomi. Pavyzdžiui, mes negalime matyti elektros tekančios į lemputę. Mes tik žinome, kad elektra išties teka, nes ji tuo metu skleidžia šviesą. Nepaisant to, mes galime matyti jungiklio poziciją (jungiklio_pozicija) ir taip pat mes matome ar šviesa yra įjungta ar ne (šviesa_įjungta). Kai kurie metodai yra &amp;lt;i&amp;gt;privatūs&amp;lt;/i&amp;gt;. Tai reiškia, jog jų neišeina tiesiogiai pakeisti. Pavyzdžiui, nebent būtų nukerpami laidai (to nedarykite ir vardan šio pavyzdžio manykite, jog laidai neegzistuoja), jūs negalėtumėte pakeisti elektros tėkmės tiesiogiai. Jūs taip pat negalite tiesiogiai įtakoti lemputės šviesos (ne, jūs negalite atsukti lemputės ar jos sudaužyti!). Bet, jūs visada galite šiuos atributus įtakoti netiesiogiai naudojant objekto &amp;lt;i&amp;gt;metodus&amp;lt;/i&amp;gt;. Jeigu nesumokėsite mokesčių, metodas pavadinimu &amp;lt;code&amp;gt;pakeisti_elektros_tekėjimą&amp;lt;/code&amp;gt; pakeis &amp;lt;code&amp;gt;elektros_tekėjimas&amp;lt;/code&amp;gt; reikšmę į NE(FALSE). Jei jūs įjungsite jungiklį, &amp;lt;code&amp;gt;pakeisti_jungiklio_poziciją&amp;lt;/code&amp;gt; metodas pakeis &amp;lt;code&amp;gt;šviesa_įjungta&amp;lt;/code&amp;gt; atributo reikšmę.&lt;br /&gt;
&lt;br /&gt;
Dabar jau tikriausiai galvoji, &amp;quot;Ką tai turi bendro su Pitonu?&amp;quot; ar, &amp;quot;Aš nesuprantu, bet kaip man sukurti tą Objektą?&amp;quot;. Na, mes beveik priėjome prie atsakymų! Tik turiu paaiškinti dar vieną idėją prieš neriant į kodą.&lt;br /&gt;
&lt;br /&gt;
Pitone objekto atributai ir metodai yra nurodomi &amp;lt;b&amp;gt;klasės&amp;lt;/b&amp;gt;. Galvokite apie klasė kaip apie objekto techninį piešinį. Pavyzdžiui, jūsų namai - objektas kuriame gyvenate - taip pat jį galite vadinti butu, vasarnamiu, prakartėle ar bet kuo kitu, buvo pastatytas naudojant techinius piešinius; šie techniniai piešiniai būtų vadinami klasėmis, kurios buvo panaudotos projektuojant jūsų namus, butą, vasarnamį, na suprantat apie ką kalbu. &lt;br /&gt;
&lt;br /&gt;
Dar kartą, klasė mums pasako kaip sukurti objektą. Techniniais terminais tariant, ir tai yra labai svarbu, klasė nusako naudojamus duomenų atributus ir metodus objekte.&lt;br /&gt;
&lt;br /&gt;
Norint sukurti klasę, mes suprogramuojame &amp;lt;i&amp;gt;klasės apibrėžimą&amp;lt;/i&amp;gt;. Klasės apibrėžimas, tai grupė pareiškimų, kurie nusako objekto atributus ir metodus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Pirma pamoka&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apačioje yra procedūrinė programa, kuri atlieka paprastą matematinį veiksmą su vartotojo įvestu skaičiu.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Programa parašyta Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
&lt;br /&gt;
# Procedūra 1&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Pasiimame skaičių, kurį manipuliuosime.&lt;br /&gt;
        num = float(input(&amp;quot;Įrašykite skaičių.\n&amp;quot;))&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su pasiimtu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 2&lt;br /&gt;
        addednum = addfive(num)&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su ankščiau išsaugotu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 3&lt;br /&gt;
        multipliednum = multiply(addednum)&lt;br /&gt;
        # Paduodame skaičių procedūrai 4&lt;br /&gt;
        display(multipliednum)&lt;br /&gt;
    # Susidorojame su išimtimis, kurios gali atsirasti dėl netinkamo vartotojo skaičiaus įvedimo&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Privalote įvesti tinkamą skaičių.\n&amp;quot;)&lt;br /&gt;
        # Atstatome kintamojo num reikšmę, kad ištrintumėm netinkamą vartotojo įvestį.&lt;br /&gt;
        num = 0&lt;br /&gt;
        # Dar kartą iškviečiame main.&lt;br /&gt;
        main()&lt;br /&gt;
&lt;br /&gt;
# Procedūra 2&lt;br /&gt;
def addfive(num):&lt;br /&gt;
    return num + 5&lt;br /&gt;
&lt;br /&gt;
# Procedūra 3&lt;br /&gt;
def multiply(addednum):&lt;br /&gt;
    return addednum * 2.452&lt;br /&gt;
&lt;br /&gt;
# Procedūra 4&lt;br /&gt;
def display(multi):&lt;br /&gt;
    # Parodome galutinį rezultatą.&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra &amp;quot;, multi)&lt;br /&gt;
&lt;br /&gt;
# Kviečiame procedūrą 1&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime skaitemnį &amp;quot;5&amp;quot;, gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 5&lt;br /&gt;
 Galutinis rezultatas yra 24.52&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime reikšmę &amp;quot;g&amp;quot;, tada pasitaisysime ir įrašysime skaitmenį &amp;quot;8&amp;quot;, tada gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 g&lt;br /&gt;
 Privalote įvesti tinkamą skaičių.&lt;br /&gt;
 &lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 8&lt;br /&gt;
 Galutinis rezultatas yra 31.875999999999998&lt;br /&gt;
&lt;br /&gt;
Žemiau matome klasę ir programą, kuri naudoją nurodytą klasę. Ši objektiniu programavimo būdu parašyta programa daro tą patį ką prieš tai darė procedūriniu programavimo būdu parašyta programa. Apžiūrėkime keletą svarbių objektinio programavimo būdo konceptų prieš neriant į ankščiau minėtą klasę ir programą.&lt;br /&gt;
Norint sukurti klasę, mes naudojame &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; raktažodį. Po raktažodžio jūs rašote pavadinimą kurį norėtumėte, jog turėtų jūsų klasė. Dažnai naudojama praktika kuriant klasių pavadinimus yra &amp;lt;i&amp;gt;NaujųŽodžiųRašymasIšDidžiosiosRaidės&amp;lt;/i&amp;gt;.&lt;br /&gt;
Jei norėčiau sukurti klasę pavadinimu dirtysocks, kodas atrodytų taip:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class DirtySocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Iš pradžių pažiūrėkime į klasę. Programa, kuri naudos šią klasę, bus parodyta paskui.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexample.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Class&lt;br /&gt;
&lt;br /&gt;
class NumChange:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.__number = 0&lt;br /&gt;
&lt;br /&gt;
    def addfive(self,num):&lt;br /&gt;
        self.__number = num&lt;br /&gt;
        return self.__number + 5&lt;br /&gt;
&lt;br /&gt;
    def multiply(self,added):&lt;br /&gt;
        self.__added = added&lt;br /&gt;
        return self.__added * 2.452&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Programa, kuri naudoja viršuje esančią klasę yra parašyta žemiau.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexampleprog.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstracija - Programa&lt;br /&gt;
&lt;br /&gt;
import oopexample&lt;br /&gt;
&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    num = float(input(&amp;quot;Įrašykite skaičių.\n&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    added = maths.addfive(num)&lt;br /&gt;
&lt;br /&gt;
    multip = maths.multiply(added)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra &amp;quot;, multip)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tikriausiai jūs dabar esate pasimetę. Tai visiškai suprantama. Pradėkime nuo klasės supratimo.&lt;br /&gt;
Klasė yra pavadinta &amp;quot;NumChange&amp;quot;&lt;br /&gt;
Ši klasė turi tris metodus&lt;br /&gt;
* __init__&lt;br /&gt;
* addfive&lt;br /&gt;
* multiply&lt;br /&gt;
&lt;br /&gt;
Šie trys metodai savyje turi labai panašų kodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį į tai, jog kiekvienas metodas turi parametrą pavadinimu &amp;quot;self&amp;quot;. Kiekvienas klasės metodas turi būtinai turėti šį parametrą. Šis parametras nebūtinai turi būti su pavadinimu &amp;quot;self&amp;quot;, bet tai yra priimta geriausia praktika, tad tikriausiai ir jūs turėtumėte jį taip vadinti. Šis parametras yra reikalingas kiekviename metode nes kai jis yra iškviečiamas, jis turi žinoti which object's attributes to operate on. Net kai turime tik vieną objektą, mes turime pasirūpinti, kad programa žinotų, jog mes norime naudoti atributus aprašytus būtent toje klasėje. Todėl mes turime būti saugūs ir naudoti &amp;quot;self&amp;quot; parametrą.&lt;br /&gt;
&lt;br /&gt;
Peržiūrėkime pirmą metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dauguma pitono klasių turi &amp;lt;code&amp;gt;__init__&amp;lt;/code&amp;gt;, kuris yra paleidžiamas automatiškai kiekvieną kartą, kai atmintyje yra sukuriama tos klasės instancija. (Kai sukuriame nuorodą į klasę, yra sukuriama tos klasės &amp;lt;i&amp;gt;instancija&amp;lt;/i&amp;gt; [objektas]). Šis metodas yra paprastai vadinamas &amp;lt;i&amp;gt;inicijavimo metodu&amp;lt;/i&amp;gt;. Kai šis metodas yra paleidžiamas, &amp;quot;self&amp;quot; parametras yra automatiškai priskiriamas tariamam objektui. __init__ metodas inicijuoja klasės atributus, dėl šios priežasties jis yra pavadintas inicijavimo metodu. ↵Po __init__ metodu, iš pradžių &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt; atributui mes priskiriame 0.&lt;br /&gt;
Mes sukuriame nuorodą į turimo objekto atributą panaudojant taškinį žymėjimą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.__number = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kodas &amp;lt;code&amp;gt;self.__number = 0&amp;lt;/code&amp;gt; reiškia, jog &amp;quot;objekte esančio &amp;quot;number&amp;quot; atributo reikšmė yra 0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į sekantį metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
    self.__number = num&lt;br /&gt;
    return self.__number + 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis metodas yra pavadintas &amp;quot;addfive&amp;quot;. Jis priima parametrą pavadinimu &amp;quot;num&amp;quot;. Metode esanti logika tada priskiria &amp;quot;num&amp;quot; reikšmę objekte esančiui atributui su pavadinimu &amp;quot;number&amp;quot;. This method is named &amp;quot;addfive&amp;quot;. Tada metodas prideda 5 prie &amp;quot;number&amp;quot; ir jį grąžina jį iššaukiančiui.&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į trečiajį metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
    self.__added = added&lt;br /&gt;
    return self.__added * 2.453&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šis metodas yra pavadintas &amp;quot;multiply&amp;quot;. Jis priima parametrą pavadinimu &amp;quot;added&amp;quot;. Metodas priskiria priimtą reikšmę objekte esančiui atributui su pavadinimu &amp;quot;added&amp;quot; ir grąžina &amp;quot;added&amp;quot; atributo ir 2.452 sandaugą jį iššaukiančiui.&lt;br /&gt;
&lt;br /&gt;
Notice how the name of each method begins with two underscores? Let's explain that.&lt;br /&gt;
Earlier we mentioned that an object operates on data attributes inside itself using methods. Ideally, these data attributes should be able to be manipulated ONLY BY METHODS IN THE OBJECT. It is possible to have outside code manipulate data attributes. To &amp;quot;hide&amp;quot; attributes, so only methods in the object can manipulate them, you use two underscores before the object name, as we have been demonstrating. Omitting those two underscores in the attribute name, allows for the possibility of manipulation from code outside the object.&lt;br /&gt;
&lt;br /&gt;
Let's look at the program which uses the class we just dissected.&lt;br /&gt;
&lt;br /&gt;
Notice the first line of non comment code.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import oopexample&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line of code imports the class, which we have saved in a separate file (module). Classes do not have to be in a separate file, but it is almost always the case, and thus is good practice to get used to importing the module now.&lt;br /&gt;
&lt;br /&gt;
The next line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line creates an instance of the NumChange class, stored in the module named &amp;quot;oopexample&amp;quot;, and stores the instance in the variable named &amp;quot;maths&amp;quot;.&lt;br /&gt;
The syntax is:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;i&amp;gt;modulename.Classname()&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Next we define the main function.&lt;br /&gt;
Then, we get a number from the user.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;added = maths.addfive(num)&amp;lt;/code&amp;gt; sends the value of the &amp;quot;num&amp;quot; variable to the method named &amp;quot;addfive&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;added&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;multip = maths.multiply(added)&amp;lt;/code&amp;gt; sends the value of the variable &amp;quot;added&amp;quot;, to the method named &amp;quot;multiply&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;multip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line prints &amp;quot;The manipulated value is &amp;lt;value of multip&amp;gt;&amp;quot;. The last line calls the main function which executes the steps outlined above.&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Recursion |next=Intro to Imported Libraries and other Functions}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3502</id>
		<title>Python Vadovėlis/Įvadas į objektinį programavimą Python 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3502"/>
		<updated>2021-11-09T07:57:54Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: demonstracinės programos pradžia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objektinis programavimas==&lt;br /&gt;
&lt;br /&gt;
Iki šiol tu naudojai procedūrinį programavimo būdą. Tačiau, yra daug programų, kurios - parašytos naudojant objektinį programavimo būdą. Žinant abu būdus ir jų skirtumus yra labai svarbu. Informatikoje, daug svarbių kalbų kaip C++ ar Java dažnai naudoja objektinį programavimo būdą.&lt;br /&gt;
&lt;br /&gt;
Pradedantiesiems ir mokiniams neturintiems programavimo žinių objektinis programavimas dažnai gali atrodyti painus ir tai yra visiškai normalu. Nesijausk blogai jei iš pradžių suprasti nesiseka. Jei šis skyrius tau to suprasti nepadės, yra ir daugiau gerų šaltinių, kurie tau padės atsakyti į visus klausimus.&lt;br /&gt;
&lt;br /&gt;
Šis skyrius yra padalintas į keletą pamokų. Kiekviena pamoka yra skirta paaiškinti skirtingas objektinio programavimo dalis. &amp;lt;b&amp;gt;LABAI SVARBU&amp;lt;/b&amp;gt; suprasti visas objektinio programavimo dalis. Prieš kiekvieną pamoką, bus parašyta įžanga, kuri paaiškins pagrindines idėjas, sąvokas ir kitas objektinio programavimo sritis, kurios yra reikalingos suprasti kiekvieną pamoką.&lt;br /&gt;
&lt;br /&gt;
==Įžanga==&lt;br /&gt;
&lt;br /&gt;
Galvokite apie procedūrą kaip apie funkciją. Funkcija turi konkrečią paskyrtį ir jų gali būti įvairių: rikti įvestis, atlikti matematinius skaičiavimus, atvaizduoti ar manipuliuoti duomenis. Typically, procedures use data which is separate from code for manipulation. This data is often passed between procedures. When a program becomes much larger and complex, this can cause problems.&lt;br /&gt;
Pavyzdžiui, suprogramavai programą, kuri kintamuosiuose išsaugo produkto duomenis. Kai klientas paprašo informacijos apie produktą, kintamieji, kurie turi visą informaciją, yra perduodami įvairioms funkcijoms su skirtingomis paskirtimis. Laikui bėgant ir saugant vis daugiau duomenų apie turimus produktus, tu sugalvoji išsaugoti turimą informaciją sąrašuose ar žodynuose. Norint, jog tavo programa veiktų, tu dabar turi redaguoti kiekvieną funkciją, kuri naudojo tuos kintamuosius, taip, kad dabar ji galėtų priimti ir manipuliuoti sąrašus ar žodynus. Imagine the time that would take for a program that was hundreds of megabytes, and hundreds of files in size! It would drive you insane! not to mention, errors in your code, are almost guaranteed, just because of the large volume of work and possibilities to make a typo or other error. This is less than optimal.&lt;br /&gt;
Procedūrinis programavimas yra paremtas procedūromis ar funkcijomis. Objektinis programavimas yra paremtas objektais. Ar prisimeni kaip procedūrinė programa atskyrė duomenis nuo kodo? Ar prisimeni tą programą, kuri turėjo šimtus failų ir norint kažką pakeisti reikėdavo ilgai narpstytis? &lt;br /&gt;
Galvokite apie &amp;lt;i&amp;gt;objektą&amp;lt;/i&amp;gt; kaip apie minėtų failų ir duomenų &amp;quot;kombinaciją&amp;quot; į vieną esybę. Technine prasme, objektas yra esybė, kuri savyje turi duomenis ir procedūras (kodą, funkcijas, t.t.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Duomenis objekto viduje vadiname &amp;lt;i&amp;gt;atributais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Funkcijas ar procedūras objekto viduje vadiname &amp;lt;i&amp;gt;metodais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;duomenų atributus&amp;lt;/b&amp;gt; kaip apie kintamuosius. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;metodus&amp;lt;/b&amp;gt; kaip apie funkcijas ar procedūras. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į paprastą, kasdienį pavyzdį. Lemputė ir jungiklis tavo kambaryje.&lt;br /&gt;
Atributai bus štai tokie.&lt;br /&gt;
&lt;br /&gt;
//Mindaugo komentaras: ar verčiame True/False?&lt;br /&gt;
* šviesa_įjungta ((True)Taip arba (False)Ne)&lt;br /&gt;
* jungiklio_pozicija (Viršuje arba Apačioje)&lt;br /&gt;
* elektros_tekėjimas (Taip arba Ne)&lt;br /&gt;
&lt;br /&gt;
Metodai būtų štai tokie.&lt;br /&gt;
&lt;br /&gt;
* pakeisti_jungiklio_poziciją&lt;br /&gt;
* pakeisti_elektros_tekėjimą&lt;br /&gt;
&lt;br /&gt;
Atributai gali būti matomi ir nematomi. Pavyzdžiui, mes negalime matyti elektros tekančios į lemputę. Mes tik žinome, kad elektra išties teka, nes ji tuo metu skleidžia šviesą. Nepaisant to, mes galime matyti jungiklio poziciją (jungiklio_pozicija) ir taip pat mes matome ar šviesa yra įjungta ar ne (šviesa_įjungta). Kai kurie metodai yra &amp;lt;i&amp;gt;privatūs&amp;lt;/i&amp;gt;. Tai reiškia, jog jų neišeina tiesiogiai pakeisti. Pavyzdžiui, nebent būtų nukerpami laidai (to nedarykite ir vardan šio pavyzdžio manykite, jog laidai neegzistuoja), jūs negalėtumėte pakeisti elektros tėkmės tiesiogiai. Jūs taip pat negalite tiesiogiai įtakoti lemputės šviesos (ne, jūs negalite atsukti lemputės ar jos sudaužyti!). Bet, jūs visada galite šiuos atributus įtakoti netiesiogiai naudojant objekto &amp;lt;i&amp;gt;metodus&amp;lt;/i&amp;gt;. Jeigu nesumokėsite mokesčių, metodas pavadinimu &amp;lt;code&amp;gt;pakeisti_elektros_tekėjimą&amp;lt;/code&amp;gt; pakeis &amp;lt;code&amp;gt;elektros_tekėjimas&amp;lt;/code&amp;gt; reikšmę į NE(FALSE). Jei jūs įjungsite jungiklį, &amp;lt;code&amp;gt;pakeisti_jungiklio_poziciją&amp;lt;/code&amp;gt; metodas pakeis &amp;lt;code&amp;gt;šviesa_įjungta&amp;lt;/code&amp;gt; atributo reikšmę.&lt;br /&gt;
&lt;br /&gt;
Dabar jau tikriausiai galvoji, &amp;quot;Ką tai turi bendro su Pitonu?&amp;quot; ar, &amp;quot;Aš nesuprantu, bet kaip man sukurti tą Objektą?&amp;quot;. Na, mes beveik priėjome prie atsakymų! Tik turiu paaiškinti dar vieną idėją prieš neriant į kodą.&lt;br /&gt;
&lt;br /&gt;
Pitone objekto atributai ir metodai yra nurodomi &amp;lt;b&amp;gt;klasės&amp;lt;/b&amp;gt;. Galvokite apie klasė kaip apie objekto techninį piešinį. Pavyzdžiui, jūsų namai - objektas kuriame gyvenate - taip pat jį galite vadinti butu, vasarnamiu, prakartėle ar bet kuo kitu, buvo pastatytas naudojant techinius piešinius; šie techniniai piešiniai būtų vadinami klasėmis, kurios buvo panaudotos projektuojant jūsų namus, butą, vasarnamį, na suprantat apie ką kalbu. &lt;br /&gt;
&lt;br /&gt;
Dar kartą, klasė mums pasako kaip sukurti objektą. Techniniais terminais tariant, ir tai yra labai svarbu, klasė nusako naudojamus duomenų atributus ir metodus objekte.&lt;br /&gt;
&lt;br /&gt;
Norint sukurti klasę, mes suprogramuojame &amp;lt;i&amp;gt;klasės apibrėžimą&amp;lt;/i&amp;gt;. Klasės apibrėžimas, tai grupė pareiškimų, kurie nusako objekto atributus ir metodus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Pirma pamoka&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apačioje yra procedūrinė programa, kuri atlieka paprastą matematinį veiksmą su vartotojo įvestu skaičiu.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Programa parašyta Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
&lt;br /&gt;
# Procedūra 1&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Pasiimame skaičių, kurį manipuliuosime.&lt;br /&gt;
        num = float(input(&amp;quot;Įrašykite skaičių.\n&amp;quot;))&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su pasiimtu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 2&lt;br /&gt;
        addednum = addfive(num)&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su ankščiau išsaugotu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 3&lt;br /&gt;
        multipliednum = multiply(addednum)&lt;br /&gt;
        # Paduodame skaičių procedūrai 4&lt;br /&gt;
        display(multipliednum)&lt;br /&gt;
    # Susidorojame su išimtimis, kurios gali atsirasti dėl netinkamo vartotojo skaičiaus įvedimo&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Privalote įvesti tinkamą skaičių.\n&amp;quot;)&lt;br /&gt;
        # Atstatome kintamojo num reikšmę, kad ištrintumėm netinkamą vartotojo įvestį.&lt;br /&gt;
        num = 0&lt;br /&gt;
        # Dar kartą iškviečiame main.&lt;br /&gt;
        main()&lt;br /&gt;
&lt;br /&gt;
# Procedūra 2&lt;br /&gt;
def addfive(num):&lt;br /&gt;
    return num + 5&lt;br /&gt;
&lt;br /&gt;
# Procedūra 3&lt;br /&gt;
def multiply(addednum):&lt;br /&gt;
    return addednum * 2.452&lt;br /&gt;
&lt;br /&gt;
# Procedūra 4&lt;br /&gt;
def display(multi):&lt;br /&gt;
    # Parodome galutinį rezultatą.&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra &amp;quot;, multi)&lt;br /&gt;
&lt;br /&gt;
# Kviečiame procedūrą 1&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime skaitemnį &amp;quot;5&amp;quot;, gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 5&lt;br /&gt;
 Galutinis rezultatas yra 24.52&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime reikšmę &amp;quot;g&amp;quot;, tada pasitaisysime ir įrašysime skaitmenį &amp;quot;8&amp;quot;, tada gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 g&lt;br /&gt;
 Privalote įvesti tinkamą skaičių.&lt;br /&gt;
 &lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 8&lt;br /&gt;
 Galutinis rezultatas yra 31.875999999999998&lt;br /&gt;
&lt;br /&gt;
Žemiau matome klasę ir programą, kuri naudoją nurodytą klasę. Ši objektiniu programavimo būdu parašyta programa daro tą patį ką prieš tai darė procedūriniu programavimo būdu parašyta programa. Apžiūrėkime keletą svarbių objektinio programavimo būdo konceptų prieš neriant į ankščiau minėtą klasę ir programą.&lt;br /&gt;
Norint sukurti klasę, mes naudojame &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; raktažodį. Po raktažodžio jūs rašote pavadinimą kurį norėtumėte, jog turėtų jūsų klasė. Dažnai naudojama praktika kuriant klasių pavadinimus yra &amp;lt;i&amp;gt;NaujųŽodžiųRašymasIšDidžiosiosRaidės&amp;lt;/i&amp;gt;.&lt;br /&gt;
Jei norėčiau sukurti klasę pavadinimu dirtysocks, kodas atrodytų taip:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class DirtySocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Iš pradžių pažiūrėkime į klasę. Programa, kuri naudos šią klasę, bus parodyta paskui.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexample.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Class&lt;br /&gt;
&lt;br /&gt;
class NumChange:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.__number = 0&lt;br /&gt;
&lt;br /&gt;
    def addfive(self,num):&lt;br /&gt;
        self.__number = num&lt;br /&gt;
        return self.__number + 5&lt;br /&gt;
&lt;br /&gt;
    def multiply(self,added):&lt;br /&gt;
        self.__added = added&lt;br /&gt;
        return self.__added * 2.452&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program which uses the class above, is below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexampleprog.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstracija - Programa&lt;br /&gt;
&lt;br /&gt;
import oopexample&lt;br /&gt;
&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    num = float(input(&amp;quot;Įrašykite skaičių.\n&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    added = maths.addfive(num)&lt;br /&gt;
&lt;br /&gt;
    multip = maths.multiply(added)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra &amp;quot;, multip)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tikriausiai jūs dabar esate pasimetę. Tai visiškai suprantama. Pradėkime nuo klasės supratimo.&lt;br /&gt;
Klasė yra pavadinta &amp;quot;NumChange&amp;quot;&lt;br /&gt;
Ši klasė turi tris metodus&lt;br /&gt;
* __init__&lt;br /&gt;
* addfive&lt;br /&gt;
* multiply&lt;br /&gt;
&lt;br /&gt;
Šie trys metodai savyje turi labai panašų kodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį į tai, jog kiekvienas metodas turi parametrą pavadinimu &amp;quot;self&amp;quot;. Kiekvienas klasės metodas turi būtinai turėti šį parametrą. Šis parametras nebūtinai turi būti su pavadinimu &amp;quot;self&amp;quot;, bet tai yra priimta geriausia praktika, tad tikriausiai ir jūs turėtumėte jį taip vadinti. Šis parametras yra reikalingas kiekviename metode nes kai jis yra iškviečiamas, jis turi žinoti which object's attributes to operate on. Net kai turime tik vieną objektą, mes turime pasirūpinti, kad programa žinotų, jog mes norime naudoti atributus aprašytus būtent toje klasėje. Todėl mes turime būti saugūs ir naudoti &amp;quot;self&amp;quot; parametrą.&lt;br /&gt;
&lt;br /&gt;
Peržiūrėkime pirmą metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dauguma pitono klasių turi &amp;lt;code&amp;gt;__init__&amp;lt;/code&amp;gt;, kuris yra paleidžiamas automatiškai kiekvieną kartą, kai atmintyje yra sukuriama tos klasės instancija. (Kai sukuriame nuorodą į klasę, yra sukuriama tos klasės &amp;lt;i&amp;gt;instancija&amp;lt;/i&amp;gt; [objektas]). Šis metodas yra paprastai vadinamas &amp;lt;i&amp;gt;inicijavimo metodu&amp;lt;/i&amp;gt;. Kai šis metodas yra paleidžiamas, &amp;quot;self&amp;quot; parametras yra automatiškai priskiriamas tariamam objektui. __init__ metodas inicijuoja klasės atributus, dėl šios priežasties jis yra pavadintas inicijavimo metodu. ↵Po __init__ metodu, iš pradžių &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt; atributui mes priskiriame 0.&lt;br /&gt;
Mes sukuriame nuorodą į turimo objekto atributą panaudojant taškinį žymėjimą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.__number = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;self.__number = 0&amp;lt;/code&amp;gt; line simply means &amp;quot;&amp;quot;the value of the attribute &amp;quot;number&amp;quot;, in the object, is 0&amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Let's look at the next method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
    self.__number = num&lt;br /&gt;
    return self.__number + 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;addfive&amp;quot;. It accepts a parameter called &amp;quot;num&amp;quot;, from the program using the class. The method then assigns the value of that parameter to the &amp;quot;number&amp;quot; attribute inside the object. The method then returns the value of &amp;quot;number&amp;quot;, with 5 added to it, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Let's look at the third method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
    self.__added = added&lt;br /&gt;
    return self.__added * 2.453&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;multiply&amp;quot;. It accepts a parameter named &amp;quot;added&amp;quot;. It assigns the value of the parameter to the &amp;quot;added&amp;quot; attribute, and returns the value of the &amp;quot;added&amp;quot; attribute multiplied by 2.452, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Notice how the name of each method begins with two underscores? Let's explain that.&lt;br /&gt;
Earlier we mentioned that an object operates on data attributes inside itself using methods. Ideally, these data attributes should be able to be manipulated ONLY BY METHODS IN THE OBJECT. It is possible to have outside code manipulate data attributes. To &amp;quot;hide&amp;quot; attributes, so only methods in the object can manipulate them, you use two underscores before the object name, as we have been demonstrating. Omitting those two underscores in the attribute name, allows for the possibility of manipulation from code outside the object.&lt;br /&gt;
&lt;br /&gt;
Let's look at the program which uses the class we just dissected.&lt;br /&gt;
&lt;br /&gt;
Notice the first line of non comment code.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import oopexample&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line of code imports the class, which we have saved in a separate file (module). Classes do not have to be in a separate file, but it is almost always the case, and thus is good practice to get used to importing the module now.&lt;br /&gt;
&lt;br /&gt;
The next line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line creates an instance of the NumChange class, stored in the module named &amp;quot;oopexample&amp;quot;, and stores the instance in the variable named &amp;quot;maths&amp;quot;.&lt;br /&gt;
The syntax is:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;i&amp;gt;modulename.Classname()&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Next we define the main function.&lt;br /&gt;
Then, we get a number from the user.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;added = maths.addfive(num)&amp;lt;/code&amp;gt; sends the value of the &amp;quot;num&amp;quot; variable to the method named &amp;quot;addfive&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;added&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;multip = maths.multiply(added)&amp;lt;/code&amp;gt; sends the value of the variable &amp;quot;added&amp;quot;, to the method named &amp;quot;multiply&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;multip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line prints &amp;quot;The manipulated value is &amp;lt;value of multip&amp;gt;&amp;quot;. The last line calls the main function which executes the steps outlined above.&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Recursion |next=Intro to Imported Libraries and other Functions}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3500</id>
		<title>Python Vadovėlis/Įvadas į objektinį programavimą Python 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3500"/>
		<updated>2021-11-08T15:52:03Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: Antros programos dalis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objektinis programavimas==&lt;br /&gt;
&lt;br /&gt;
Iki šiol tu naudojai procedūrinį programavimo būdą. Tačiau, yra daug programų, kurios - parašytos naudojant objektinį programavimo būdą. Žinant abu būdus ir jų skirtumus yra labai svarbu. Informatikoje, daug svarbių kalbų kaip C++ ar Java dažnai naudoja objektinį programavimo būdą.&lt;br /&gt;
&lt;br /&gt;
Pradedantiesiems ir mokiniams neturintiems programavimo žinių objektinis programavimas dažnai gali atrodyti painus ir tai yra visiškai normalu. Nesijausk blogai jei iš pradžių suprasti nesiseka. Jei šis skyrius tau to suprasti nepadės, yra ir daugiau gerų šaltinių, kurie tau padės atsakyti į visus klausimus.&lt;br /&gt;
&lt;br /&gt;
Šis skyrius yra padalintas į keletą pamokų. Kiekviena pamoka yra skirta paaiškinti skirtingas objektinio programavimo dalis. &amp;lt;b&amp;gt;LABAI SVARBU&amp;lt;/b&amp;gt; suprasti visas objektinio programavimo dalis. Prieš kiekvieną pamoką, bus parašyta įžanga, kuri paaiškins pagrindines idėjas, sąvokas ir kitas objektinio programavimo sritis, kurios yra reikalingos suprasti kiekvieną pamoką.&lt;br /&gt;
&lt;br /&gt;
==Įžanga==&lt;br /&gt;
&lt;br /&gt;
Galvokite apie procedūrą kaip apie funkciją. Funkcija turi konkrečią paskyrtį ir jų gali būti įvairių: rikti įvestis, atlikti matematinius skaičiavimus, atvaizduoti ar manipuliuoti duomenis. Typically, procedures use data which is separate from code for manipulation. This data is often passed between procedures. When a program becomes much larger and complex, this can cause problems.&lt;br /&gt;
Pavyzdžiui, suprogramavai programą, kuri kintamuosiuose išsaugo produkto duomenis. Kai klientas paprašo informacijos apie produktą, kintamieji, kurie turi visą informaciją, yra perduodami įvairioms funkcijoms su skirtingomis paskirtimis. Laikui bėgant ir saugant vis daugiau duomenų apie turimus produktus, tu sugalvoji išsaugoti turimą informaciją sąrašuose ar žodynuose. Norint, jog tavo programa veiktų, tu dabar turi redaguoti kiekvieną funkciją, kuri naudojo tuos kintamuosius, taip, kad dabar ji galėtų priimti ir manipuliuoti sąrašus ar žodynus. Imagine the time that would take for a program that was hundreds of megabytes, and hundreds of files in size! It would drive you insane! not to mention, errors in your code, are almost guaranteed, just because of the large volume of work and possibilities to make a typo or other error. This is less than optimal.&lt;br /&gt;
Procedūrinis programavimas yra paremtas procedūromis ar funkcijomis. Objektinis programavimas yra paremtas objektais. Ar prisimeni kaip procedūrinė programa atskyrė duomenis nuo kodo? Ar prisimeni tą programą, kuri turėjo šimtus failų ir norint kažką pakeisti reikėdavo ilgai narpstytis? &lt;br /&gt;
Galvokite apie &amp;lt;i&amp;gt;objektą&amp;lt;/i&amp;gt; kaip apie minėtų failų ir duomenų &amp;quot;kombinaciją&amp;quot; į vieną esybę. Technine prasme, objektas yra esybė, kuri savyje turi duomenis ir procedūras (kodą, funkcijas, t.t.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Duomenis objekto viduje vadiname &amp;lt;i&amp;gt;atributais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Funkcijas ar procedūras objekto viduje vadiname &amp;lt;i&amp;gt;metodais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;duomenų atributus&amp;lt;/b&amp;gt; kaip apie kintamuosius. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;metodus&amp;lt;/b&amp;gt; kaip apie funkcijas ar procedūras. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į paprastą, kasdienį pavyzdį. Lemputė ir jungiklis tavo kambaryje.&lt;br /&gt;
Atributai bus štai tokie.&lt;br /&gt;
&lt;br /&gt;
//Mindaugo komentaras: ar verčiame True/False?&lt;br /&gt;
* šviesa_įjungta ((True)Taip arba (False)Ne)&lt;br /&gt;
* jungiklio_pozicija (Viršuje arba Apačioje)&lt;br /&gt;
* elektros_tekėjimas (Taip arba Ne)&lt;br /&gt;
&lt;br /&gt;
Metodai būtų štai tokie.&lt;br /&gt;
&lt;br /&gt;
* pakeisti_jungiklio_poziciją&lt;br /&gt;
* pakeisti_elektros_tekėjimą&lt;br /&gt;
&lt;br /&gt;
Atributai gali būti matomi ir nematomi. Pavyzdžiui, mes negalime matyti elektros tekančios į lemputę. Mes tik žinome, kad elektra išties teka, nes ji tuo metu skleidžia šviesą. Nepaisant to, mes galime matyti jungiklio poziciją (jungiklio_pozicija) ir taip pat mes matome ar šviesa yra įjungta ar ne (šviesa_įjungta). Kai kurie metodai yra &amp;lt;i&amp;gt;privatūs&amp;lt;/i&amp;gt;. Tai reiškia, jog jų neišeina tiesiogiai pakeisti. Pavyzdžiui, nebent būtų nukerpami laidai (to nedarykite ir vardan šio pavyzdžio manykite, jog laidai neegzistuoja), jūs negalėtumėte pakeisti elektros tėkmės tiesiogiai. Jūs taip pat negalite tiesiogiai įtakoti lemputės šviesos (ne, jūs negalite atsukti lemputės ar jos sudaužyti!). Bet, jūs visada galite šiuos atributus įtakoti netiesiogiai naudojant objekto &amp;lt;i&amp;gt;metodus&amp;lt;/i&amp;gt;. Jeigu nesumokėsite mokesčių, metodas pavadinimu &amp;lt;code&amp;gt;pakeisti_elektros_tekėjimą&amp;lt;/code&amp;gt; pakeis &amp;lt;code&amp;gt;elektros_tekėjimas&amp;lt;/code&amp;gt; reikšmę į NE(FALSE). Jei jūs įjungsite jungiklį, &amp;lt;code&amp;gt;pakeisti_jungiklio_poziciją&amp;lt;/code&amp;gt; metodas pakeis &amp;lt;code&amp;gt;šviesa_įjungta&amp;lt;/code&amp;gt; atributo reikšmę.&lt;br /&gt;
&lt;br /&gt;
Dabar jau tikriausiai galvoji, &amp;quot;Ką tai turi bendro su Pitonu?&amp;quot; ar, &amp;quot;Aš nesuprantu, bet kaip man sukurti tą Objektą?&amp;quot;. Na, mes beveik priėjome prie atsakymų! Tik turiu paaiškinti dar vieną idėją prieš neriant į kodą.&lt;br /&gt;
&lt;br /&gt;
Pitone objekto atributai ir metodai yra nurodomi &amp;lt;b&amp;gt;klasės&amp;lt;/b&amp;gt;. Galvokite apie klasė kaip apie objekto techninį piešinį. Pavyzdžiui, jūsų namai - objektas kuriame gyvenate - taip pat jį galite vadinti butu, vasarnamiu, prakartėle ar bet kuo kitu, buvo pastatytas naudojant techinius piešinius; šie techniniai piešiniai būtų vadinami klasėmis, kurios buvo panaudotos projektuojant jūsų namus, butą, vasarnamį, na suprantat apie ką kalbu. &lt;br /&gt;
&lt;br /&gt;
Dar kartą, klasė mums pasako kaip sukurti objektą. Techniniais terminais tariant, ir tai yra labai svarbu, klasė nusako naudojamus duomenų atributus ir metodus objekte.&lt;br /&gt;
&lt;br /&gt;
Norint sukurti klasę, mes suprogramuojame &amp;lt;i&amp;gt;klasės apibrėžimą&amp;lt;/i&amp;gt;. Klasės apibrėžimas, tai grupė pareiškimų, kurie nusako objekto atributus ir metodus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Pirma pamoka&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apačioje yra procedūrinė programa, kuri atlieka paprastą matematinį veiksmą su vartotojo įvestu skaičiu.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Programa parašyta Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
&lt;br /&gt;
# Procedūra 1&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Pasiimame skaičių, kurį manipuliuosime.&lt;br /&gt;
        num = float(input(&amp;quot;Įrašykite skaičių.\n&amp;quot;))&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su pasiimtu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 2&lt;br /&gt;
        addednum = addfive(num)&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su ankščiau išsaugotu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 3&lt;br /&gt;
        multipliednum = multiply(addednum)&lt;br /&gt;
        # Paduodame skaičių procedūrai 4&lt;br /&gt;
        display(multipliednum)&lt;br /&gt;
    # Susidorojame su išimtimis, kurios gali atsirasti dėl netinkamo vartotojo skaičiaus įvedimo&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Privalote įvesti tinkamą skaičių.\n&amp;quot;)&lt;br /&gt;
        # Atstatome kintamojo num reikšmę, kad ištrintumėm netinkamą vartotojo įvestį.&lt;br /&gt;
        num = 0&lt;br /&gt;
        # Dar kartą iškviečiame main.&lt;br /&gt;
        main()&lt;br /&gt;
&lt;br /&gt;
# Procedūra 2&lt;br /&gt;
def addfive(num):&lt;br /&gt;
    return num + 5&lt;br /&gt;
&lt;br /&gt;
# Procedūra 3&lt;br /&gt;
def multiply(addednum):&lt;br /&gt;
    return addednum * 2.452&lt;br /&gt;
&lt;br /&gt;
# Procedūra 4&lt;br /&gt;
def display(multi):&lt;br /&gt;
    # Parodome galutinį rezultatą.&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra &amp;quot;, multi)&lt;br /&gt;
&lt;br /&gt;
# Kviečiame procedūrą 1&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime skaitemnį &amp;quot;5&amp;quot;, gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 5&lt;br /&gt;
 Galutinis rezultatas yra 24.52&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime reikšmę &amp;quot;g&amp;quot;, tada pasitaisysime ir įrašysime skaitmenį &amp;quot;8&amp;quot;, tada gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 g&lt;br /&gt;
 Privalote įvesti tinkamą skaičių.&lt;br /&gt;
 &lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 8&lt;br /&gt;
 Galutinis rezultatas yra 31.875999999999998&lt;br /&gt;
&lt;br /&gt;
Žemiau matome klasę ir programą, kuri naudoją nurodytą klasę. Ši objektiniu programavimo būdu parašyta programa daro tą patį ką prieš tai darė procedūriniu programavimo būdu parašyta programa. Apžiūrėkime keletą svarbių objektinio programavimo būdo konceptų prieš neriant į ankščiau minėtą klasę ir programą.&lt;br /&gt;
Norint sukurti klasę, mes naudojame &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; raktažodį. Po raktažodžio jūs rašote pavadinimą kurį norėtumėte, jog turėtų jūsų klasė. Dažnai naudojama praktika kuriant klasių pavadinimus yra &amp;lt;i&amp;gt;NaujųŽodžiųRašymasIšDidžiosiosRaidės&amp;lt;/i&amp;gt;.&lt;br /&gt;
Jei norėčiau sukurti klasę pavadinimu dirtysocks, kodas atrodytų taip:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class DirtySocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Iš pradžių pažiūrėkime į klasę. Programa, kuri naudos šią klasę, bus parodyta paskui.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexample.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Class&lt;br /&gt;
&lt;br /&gt;
class NumChange:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.__number = 0&lt;br /&gt;
&lt;br /&gt;
    def addfive(self,num):&lt;br /&gt;
        self.__number = num&lt;br /&gt;
        return self.__number + 5&lt;br /&gt;
&lt;br /&gt;
    def multiply(self,added):&lt;br /&gt;
        self.__added = added&lt;br /&gt;
        return self.__added * 2.452&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program which uses the class above, is below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexampleprog.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstratica - Programa&lt;br /&gt;
&lt;br /&gt;
import oopexample&lt;br /&gt;
&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    num = float(input(&amp;quot;Įrašykite skaičių.\n&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    added = maths.addfive(num)&lt;br /&gt;
&lt;br /&gt;
    multip = maths.multiply(added)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra &amp;quot;, multip)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tikriausiai jūs dabar esate pasimetę. Tai visiškai suprantama. Pradėkime nuo klasės supratimo.&lt;br /&gt;
Klasė yra pavadinta &amp;quot;NumChange&amp;quot;&lt;br /&gt;
Ši klasė turi tris metodus&lt;br /&gt;
* __init__&lt;br /&gt;
* addfive&lt;br /&gt;
* multiply&lt;br /&gt;
&lt;br /&gt;
Šie trys metodai savyje turi labai panašų kodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atkreipk dėmesį į tai, jog kiekvienas metodas turi parametrą pavadinimu &amp;quot;self&amp;quot;. Kiekvienas klasės metodas turi būtinai turėti šį parametrą. Šis parametras nebūtinai turi būti su pavadinimu &amp;quot;self&amp;quot;, bet tai yra priimta geriausia praktika, tad tikriausiai ir jūs turėtumėte jį taip vadinti. Šis parametras yra reikalingas kiekviename metode nes kai jis yra iškviečiamas, jis turi žinoti which object's attributes to operate on. Net kai turime tik vieną objektą, mes turime pasirūpinti, kad programa žinotų, jog mes norime naudoti atributus aprašytus būtent toje klasėje. Todėl mes turime būti saugūs ir naudoti &amp;quot;self&amp;quot; parametrą.&lt;br /&gt;
&lt;br /&gt;
Peržiūrėkime pirmą metodą.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most Classes in Python have an &amp;lt;code&amp;gt;__init__&amp;lt;/code&amp;gt; which executes automatically when an instance of a class is created in memory. (When we reference a class, an &amp;lt;i&amp;gt;instance&amp;lt;/i&amp;gt; [or object] of that class is created.) This method is commonly referred to as the &amp;lt;i&amp;gt;initializer method&amp;lt;/i&amp;gt;. When the method executes, the &amp;quot;self&amp;quot; parameter is automatically assigned to the object. This method is called the initializer method because is &amp;quot;initializes&amp;quot; the data attributes. ↵Under the __init__ method, we set the value of the &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt; attribute to 0 initially.&lt;br /&gt;
We reference the object attribute using dot notation. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.__number = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;self.__number = 0&amp;lt;/code&amp;gt; line simply means &amp;quot;&amp;quot;the value of the attribute &amp;quot;number&amp;quot;, in the object, is 0&amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Let's look at the next method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
    self.__number = num&lt;br /&gt;
    return self.__number + 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;addfive&amp;quot;. It accepts a parameter called &amp;quot;num&amp;quot;, from the program using the class. The method then assigns the value of that parameter to the &amp;quot;number&amp;quot; attribute inside the object. The method then returns the value of &amp;quot;number&amp;quot;, with 5 added to it, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Let's look at the third method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
    self.__added = added&lt;br /&gt;
    return self.__added * 2.453&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;multiply&amp;quot;. It accepts a parameter named &amp;quot;added&amp;quot;. It assigns the value of the parameter to the &amp;quot;added&amp;quot; attribute, and returns the value of the &amp;quot;added&amp;quot; attribute multiplied by 2.452, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Notice how the name of each method begins with two underscores? Let's explain that.&lt;br /&gt;
Earlier we mentioned that an object operates on data attributes inside itself using methods. Ideally, these data attributes should be able to be manipulated ONLY BY METHODS IN THE OBJECT. It is possible to have outside code manipulate data attributes. To &amp;quot;hide&amp;quot; attributes, so only methods in the object can manipulate them, you use two underscores before the object name, as we have been demonstrating. Omitting those two underscores in the attribute name, allows for the possibility of manipulation from code outside the object.&lt;br /&gt;
&lt;br /&gt;
Let's look at the program which uses the class we just dissected.&lt;br /&gt;
&lt;br /&gt;
Notice the first line of non comment code.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import oopexample&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line of code imports the class, which we have saved in a separate file (module). Classes do not have to be in a separate file, but it is almost always the case, and thus is good practice to get used to importing the module now.&lt;br /&gt;
&lt;br /&gt;
The next line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line creates an instance of the NumChange class, stored in the module named &amp;quot;oopexample&amp;quot;, and stores the instance in the variable named &amp;quot;maths&amp;quot;.&lt;br /&gt;
The syntax is:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;i&amp;gt;modulename.Classname()&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Next we define the main function.&lt;br /&gt;
Then, we get a number from the user.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;added = maths.addfive(num)&amp;lt;/code&amp;gt; sends the value of the &amp;quot;num&amp;quot; variable to the method named &amp;quot;addfive&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;added&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;multip = maths.multiply(added)&amp;lt;/code&amp;gt; sends the value of the variable &amp;quot;added&amp;quot;, to the method named &amp;quot;multiply&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;multip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line prints &amp;quot;The manipulated value is &amp;lt;value of multip&amp;gt;&amp;quot;. The last line calls the main function which executes the steps outlined above.&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Recursion |next=Intro to Imported Libraries and other Functions}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3499</id>
		<title>Python Vadovėlis/Įvadas į objektinį programavimą Python 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3499"/>
		<updated>2021-11-08T13:41:50Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: Antros programos įžanga&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objektinis programavimas==&lt;br /&gt;
&lt;br /&gt;
Iki šiol tu naudojai procedūrinį programavimo būdą. Tačiau, yra daug programų, kurios - parašytos naudojant objektinį programavimo būdą. Žinant abu būdus ir jų skirtumus yra labai svarbu. Informatikoje, daug svarbių kalbų kaip C++ ar Java dažnai naudoja objektinį programavimo būdą.&lt;br /&gt;
&lt;br /&gt;
Pradedantiesiems ir mokiniams neturintiems programavimo žinių objektinis programavimas dažnai gali atrodyti painus ir tai yra visiškai normalu. Nesijausk blogai jei iš pradžių suprasti nesiseka. Jei šis skyrius tau to suprasti nepadės, yra ir daugiau gerų šaltinių, kurie tau padės atsakyti į visus klausimus.&lt;br /&gt;
&lt;br /&gt;
Šis skyrius yra padalintas į keletą pamokų. Kiekviena pamoka yra skirta paaiškinti skirtingas objektinio programavimo dalis. &amp;lt;b&amp;gt;LABAI SVARBU&amp;lt;/b&amp;gt; suprasti visas objektinio programavimo dalis. Prieš kiekvieną pamoką, bus parašyta įžanga, kuri paaiškins pagrindines idėjas, sąvokas ir kitas objektinio programavimo sritis, kurios yra reikalingos suprasti kiekvieną pamoką.&lt;br /&gt;
&lt;br /&gt;
==Įžanga==&lt;br /&gt;
&lt;br /&gt;
Galvokite apie procedūrą kaip apie funkciją. Funkcija turi konkrečią paskyrtį ir jų gali būti įvairių: rikti įvestis, atlikti matematinius skaičiavimus, atvaizduoti ar manipuliuoti duomenis. Typically, procedures use data which is separate from code for manipulation. This data is often passed between procedures. When a program becomes much larger and complex, this can cause problems.&lt;br /&gt;
Pavyzdžiui, suprogramavai programą, kuri kintamuosiuose išsaugo produkto duomenis. Kai klientas paprašo informacijos apie produktą, kintamieji, kurie turi visą informaciją, yra perduodami įvairioms funkcijoms su skirtingomis paskirtimis. Laikui bėgant ir saugant vis daugiau duomenų apie turimus produktus, tu sugalvoji išsaugoti turimą informaciją sąrašuose ar žodynuose. Norint, jog tavo programa veiktų, tu dabar turi redaguoti kiekvieną funkciją, kuri naudojo tuos kintamuosius, taip, kad dabar ji galėtų priimti ir manipuliuoti sąrašus ar žodynus. Imagine the time that would take for a program that was hundreds of megabytes, and hundreds of files in size! It would drive you insane! not to mention, errors in your code, are almost guaranteed, just because of the large volume of work and possibilities to make a typo or other error. This is less than optimal.&lt;br /&gt;
Procedūrinis programavimas yra paremtas procedūromis ar funkcijomis. Objektinis programavimas yra paremtas objektais. Ar prisimeni kaip procedūrinė programa atskyrė duomenis nuo kodo? Ar prisimeni tą programą, kuri turėjo šimtus failų ir norint kažką pakeisti reikėdavo ilgai narpstytis? &lt;br /&gt;
Galvokite apie &amp;lt;i&amp;gt;objektą&amp;lt;/i&amp;gt; kaip apie minėtų failų ir duomenų &amp;quot;kombinaciją&amp;quot; į vieną esybę. Technine prasme, objektas yra esybė, kuri savyje turi duomenis ir procedūras (kodą, funkcijas, t.t.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Duomenis objekto viduje vadiname &amp;lt;i&amp;gt;atributais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Funkcijas ar procedūras objekto viduje vadiname &amp;lt;i&amp;gt;metodais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;duomenų atributus&amp;lt;/b&amp;gt; kaip apie kintamuosius. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;metodus&amp;lt;/b&amp;gt; kaip apie funkcijas ar procedūras. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į paprastą, kasdienį pavyzdį. Lemputė ir jungiklis tavo kambaryje.&lt;br /&gt;
Atributai bus štai tokie.&lt;br /&gt;
&lt;br /&gt;
//Mindaugo komentaras: ar verčiame True/False?&lt;br /&gt;
* šviesa_įjungta ((True)Taip arba (False)Ne)&lt;br /&gt;
* jungiklio_pozicija (Viršuje arba Apačioje)&lt;br /&gt;
* elektros_tekėjimas (Taip arba Ne)&lt;br /&gt;
&lt;br /&gt;
Metodai būtų štai tokie.&lt;br /&gt;
&lt;br /&gt;
* pakeisti_jungiklio_poziciją&lt;br /&gt;
* pakeisti_elektros_tekėjimą&lt;br /&gt;
&lt;br /&gt;
Atributai gali būti matomi ir nematomi. Pavyzdžiui, mes negalime matyti elektros tekančios į lemputę. Mes tik žinome, kad elektra išties teka, nes ji tuo metu skleidžia šviesą. Nepaisant to, mes galime matyti jungiklio poziciją (jungiklio_pozicija) ir taip pat mes matome ar šviesa yra įjungta ar ne (šviesa_įjungta). Kai kurie metodai yra &amp;lt;i&amp;gt;privatūs&amp;lt;/i&amp;gt;. Tai reiškia, jog jų neišeina tiesiogiai pakeisti. Pavyzdžiui, nebent būtų nukerpami laidai (to nedarykite ir vardan šio pavyzdžio manykite, jog laidai neegzistuoja), jūs negalėtumėte pakeisti elektros tėkmės tiesiogiai. Jūs taip pat negalite tiesiogiai įtakoti lemputės šviesos (ne, jūs negalite atsukti lemputės ar jos sudaužyti!). Bet, jūs visada galite šiuos atributus įtakoti netiesiogiai naudojant objekto &amp;lt;i&amp;gt;metodus&amp;lt;/i&amp;gt;. Jeigu nesumokėsite mokesčių, metodas pavadinimu &amp;lt;code&amp;gt;pakeisti_elektros_tekėjimą&amp;lt;/code&amp;gt; pakeis &amp;lt;code&amp;gt;elektros_tekėjimas&amp;lt;/code&amp;gt; reikšmę į NE(FALSE). Jei jūs įjungsite jungiklį, &amp;lt;code&amp;gt;pakeisti_jungiklio_poziciją&amp;lt;/code&amp;gt; metodas pakeis &amp;lt;code&amp;gt;šviesa_įjungta&amp;lt;/code&amp;gt; atributo reikšmę.&lt;br /&gt;
&lt;br /&gt;
Dabar jau tikriausiai galvoji, &amp;quot;Ką tai turi bendro su Pitonu?&amp;quot; ar, &amp;quot;Aš nesuprantu, bet kaip man sukurti tą Objektą?&amp;quot;. Na, mes beveik priėjome prie atsakymų! Tik turiu paaiškinti dar vieną idėją prieš neriant į kodą.&lt;br /&gt;
&lt;br /&gt;
Pitone objekto atributai ir metodai yra nurodomi &amp;lt;b&amp;gt;klasės&amp;lt;/b&amp;gt;. Galvokite apie klasė kaip apie objekto techninį piešinį. Pavyzdžiui, jūsų namai - objektas kuriame gyvenate - taip pat jį galite vadinti butu, vasarnamiu, prakartėle ar bet kuo kitu, buvo pastatytas naudojant techinius piešinius; šie techniniai piešiniai būtų vadinami klasėmis, kurios buvo panaudotos projektuojant jūsų namus, butą, vasarnamį, na suprantat apie ką kalbu. &lt;br /&gt;
&lt;br /&gt;
Dar kartą, klasė mums pasako kaip sukurti objektą. Techniniais terminais tariant, ir tai yra labai svarbu, klasė nusako naudojamus duomenų atributus ir metodus objekte.&lt;br /&gt;
&lt;br /&gt;
Norint sukurti klasę, mes suprogramuojame &amp;lt;i&amp;gt;klasės apibrėžimą&amp;lt;/i&amp;gt;. Klasės apibrėžimas, tai grupė pareiškimų, kurie nusako objekto atributus ir metodus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Pirma pamoka&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apačioje yra procedūrinė programa, kuri atlieka paprastą matematinį veiksmą su vartotojo įvestu skaičiu.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Programa parašyta Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
&lt;br /&gt;
# Procedūra 1&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Pasiimame skaičių, kurį manipuliuosime.&lt;br /&gt;
        num = float(input(&amp;quot;Įrašykite skaičių.\n&amp;quot;))&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su pasiimtu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 2&lt;br /&gt;
        addednum = addfive(num)&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su ankščiau išsaugotu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 3&lt;br /&gt;
        multipliednum = multiply(addednum)&lt;br /&gt;
        # Paduodame skaičių procedūrai 4&lt;br /&gt;
        display(multipliednum)&lt;br /&gt;
    # Susidorojame su išimtimis, kurios gali atsirasti dėl netinkamo vartotojo skaičiaus įvedimo&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Privalote įvesti tinkamą skaičių.\n&amp;quot;)&lt;br /&gt;
        # Atstatome kintamojo num reikšmę, kad ištrintumėm netinkamą vartotojo įvestį.&lt;br /&gt;
        num = 0&lt;br /&gt;
        # Dar kartą iškviečiame main.&lt;br /&gt;
        main()&lt;br /&gt;
&lt;br /&gt;
# Procedūra 2&lt;br /&gt;
def addfive(num):&lt;br /&gt;
    return num + 5&lt;br /&gt;
&lt;br /&gt;
# Procedūra 3&lt;br /&gt;
def multiply(addednum):&lt;br /&gt;
    return addednum * 2.452&lt;br /&gt;
&lt;br /&gt;
# Procedūra 4&lt;br /&gt;
def display(multi):&lt;br /&gt;
    # Parodome galutinį rezultatą.&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra &amp;quot;, multi)&lt;br /&gt;
&lt;br /&gt;
# Kviečiame procedūrą 1&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime skaitemnį &amp;quot;5&amp;quot;, gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 5&lt;br /&gt;
 Galutinis rezultatas yra 24.52&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime reikšmę &amp;quot;g&amp;quot;, tada pasitaisysime ir įrašysime skaitmenį &amp;quot;8&amp;quot;, tada gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 g&lt;br /&gt;
 Privalote įvesti tinkamą skaičių.&lt;br /&gt;
 &lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 8&lt;br /&gt;
 Galutinis rezultatas yra 31.875999999999998&lt;br /&gt;
&lt;br /&gt;
Žemiau matome klasę ir programą, kuri naudoją nurodytą klasę. Ši objektiniu programavimo būdu parašyta programa daro tą patį ką prieš tai darė procedūriniu programavimo būdu parašyta programa. Apžiūrėkime keletą svarbių objektinio programavimo būdo konceptų prieš neriant į ankščiau minėtą klasę ir programą.&lt;br /&gt;
Norint sukurti klasę, mes naudojame &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; raktažodį. Po raktažodžio jūs rašote pavadinimą kurį norėtumėte, jog turėtų jūsų klasė. Dažnai naudojama praktika kuriant klasių pavadinimus yra &amp;lt;i&amp;gt;NaujųŽodžiųRašymasIšDidžiosiosRaidės&amp;lt;/i&amp;gt;.&lt;br /&gt;
Jei norėčiau sukurti klasę pavadinimu dirtysocks, kodas atrodytų taip:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class DirtySocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Iš pradžių pažiūrėkime į klasę. Programa, kuri naudos šią klasę, bus parodyta paskui.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexample.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Class&lt;br /&gt;
&lt;br /&gt;
class NumChange:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.__number = 0&lt;br /&gt;
&lt;br /&gt;
    def addfive(self,num):&lt;br /&gt;
        self.__number = num&lt;br /&gt;
        return self.__number + 5&lt;br /&gt;
&lt;br /&gt;
    def multiply(self,added):&lt;br /&gt;
        self.__added = added&lt;br /&gt;
        return self.__added * 2.452&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program which uses the class above, is below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexampleprog.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Program&lt;br /&gt;
&lt;br /&gt;
import oopexample&lt;br /&gt;
&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    num = float(input(&amp;quot;Please enter a number.\n&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    added = maths.addfive(num)&lt;br /&gt;
&lt;br /&gt;
    multip = maths.multiply(added)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;The manipulated value is &amp;quot;,multip)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After looking at that program, you are probably a bit lost. That's OK. Let's start off by dissecting the class.&lt;br /&gt;
The class is named &amp;quot;NumChange&amp;quot;&lt;br /&gt;
There are three methods to this class:&lt;br /&gt;
* __init__&lt;br /&gt;
* addfive&lt;br /&gt;
* multiply&lt;br /&gt;
&lt;br /&gt;
These three methods each have a similar code.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice how each method has a parameter named &amp;quot;self&amp;quot;. This parameter must be present in each method of the class. This parameter doesn't HAVE TO be called &amp;quot;self&amp;quot;, but it is standard practice, which means you should probably stick with it. This parameter is required in each method because when a method executes, it has to know which object's attributes to operate on. Even though there is only one Object, we still need to make sure the interpreter knows that we want to use the data attributes in that class. So we play it safe...and use the &amp;quot;self&amp;quot; parameter.&lt;br /&gt;
&lt;br /&gt;
Let's look at the first method. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most Classes in Python have an &amp;lt;code&amp;gt;__init__&amp;lt;/code&amp;gt; which executes automatically when an instance of a class is created in memory. (When we reference a class, an &amp;lt;i&amp;gt;instance&amp;lt;/i&amp;gt; [or object] of that class is created.) This method is commonly referred to as the &amp;lt;i&amp;gt;initializer method&amp;lt;/i&amp;gt;. When the method executes, the &amp;quot;self&amp;quot; parameter is automatically assigned to the object. This method is called the initializer method because is &amp;quot;initializes&amp;quot; the data attributes. ↵Under the __init__ method, we set the value of the &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt; attribute to 0 initially.&lt;br /&gt;
We reference the object attribute using dot notation. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.__number = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;self.__number = 0&amp;lt;/code&amp;gt; line simply means &amp;quot;&amp;quot;the value of the attribute &amp;quot;number&amp;quot;, in the object, is 0&amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Let's look at the next method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
    self.__number = num&lt;br /&gt;
    return self.__number + 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;addfive&amp;quot;. It accepts a parameter called &amp;quot;num&amp;quot;, from the program using the class. The method then assigns the value of that parameter to the &amp;quot;number&amp;quot; attribute inside the object. The method then returns the value of &amp;quot;number&amp;quot;, with 5 added to it, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Let's look at the third method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
    self.__added = added&lt;br /&gt;
    return self.__added * 2.453&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;multiply&amp;quot;. It accepts a parameter named &amp;quot;added&amp;quot;. It assigns the value of the parameter to the &amp;quot;added&amp;quot; attribute, and returns the value of the &amp;quot;added&amp;quot; attribute multiplied by 2.452, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Notice how the name of each method begins with two underscores? Let's explain that.&lt;br /&gt;
Earlier we mentioned that an object operates on data attributes inside itself using methods. Ideally, these data attributes should be able to be manipulated ONLY BY METHODS IN THE OBJECT. It is possible to have outside code manipulate data attributes. To &amp;quot;hide&amp;quot; attributes, so only methods in the object can manipulate them, you use two underscores before the object name, as we have been demonstrating. Omitting those two underscores in the attribute name, allows for the possibility of manipulation from code outside the object.&lt;br /&gt;
&lt;br /&gt;
Let's look at the program which uses the class we just dissected.&lt;br /&gt;
&lt;br /&gt;
Notice the first line of non comment code.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import oopexample&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line of code imports the class, which we have saved in a separate file (module). Classes do not have to be in a separate file, but it is almost always the case, and thus is good practice to get used to importing the module now.&lt;br /&gt;
&lt;br /&gt;
The next line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line creates an instance of the NumChange class, stored in the module named &amp;quot;oopexample&amp;quot;, and stores the instance in the variable named &amp;quot;maths&amp;quot;.&lt;br /&gt;
The syntax is:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;i&amp;gt;modulename.Classname()&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Next we define the main function.&lt;br /&gt;
Then, we get a number from the user.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;added = maths.addfive(num)&amp;lt;/code&amp;gt; sends the value of the &amp;quot;num&amp;quot; variable to the method named &amp;quot;addfive&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;added&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;multip = maths.multiply(added)&amp;lt;/code&amp;gt; sends the value of the variable &amp;quot;added&amp;quot;, to the method named &amp;quot;multiply&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;multip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line prints &amp;quot;The manipulated value is &amp;lt;value of multip&amp;gt;&amp;quot;. The last line calls the main function which executes the steps outlined above.&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Recursion |next=Intro to Imported Libraries and other Functions}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3498</id>
		<title>Python Vadovėlis/Įvadas į objektinį programavimą Python 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3498"/>
		<updated>2021-11-08T12:55:32Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: procedūra pavadinimas&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objektinis programavimas==&lt;br /&gt;
&lt;br /&gt;
Iki šiol tu naudojai procedūrinį programavimo būdą. Tačiau, yra daug programų, kurios - parašytos naudojant objektinį programavimo būdą. Žinant abu būdus ir jų skirtumus yra labai svarbu. Informatikoje, daug svarbių kalbų kaip C++ ar Java dažnai naudoja objektinį programavimo būdą.&lt;br /&gt;
&lt;br /&gt;
Pradedantiesiems ir mokiniams neturintiems programavimo žinių objektinis programavimas dažnai gali atrodyti painus ir tai yra visiškai normalu. Nesijausk blogai jei iš pradžių suprasti nesiseka. Jei šis skyrius tau to suprasti nepadės, yra ir daugiau gerų šaltinių, kurie tau padės atsakyti į visus klausimus.&lt;br /&gt;
&lt;br /&gt;
Šis skyrius yra padalintas į keletą pamokų. Kiekviena pamoka yra skirta paaiškinti skirtingas objektinio programavimo dalis. &amp;lt;b&amp;gt;LABAI SVARBU&amp;lt;/b&amp;gt; suprasti visas objektinio programavimo dalis. Prieš kiekvieną pamoką, bus parašyta įžanga, kuri paaiškins pagrindines idėjas, sąvokas ir kitas objektinio programavimo sritis, kurios yra reikalingos suprasti kiekvieną pamoką.&lt;br /&gt;
&lt;br /&gt;
==Įžanga==&lt;br /&gt;
&lt;br /&gt;
Galvokite apie procedūrą kaip apie funkciją. Funkcija turi konkrečią paskyrtį ir jų gali būti įvairių: rikti įvestis, atlikti matematinius skaičiavimus, atvaizduoti ar manipuliuoti duomenis. Typically, procedures use data which is separate from code for manipulation. This data is often passed between procedures. When a program becomes much larger and complex, this can cause problems.&lt;br /&gt;
Pavyzdžiui, suprogramavai programą, kuri kintamuosiuose išsaugo produkto duomenis. Kai klientas paprašo informacijos apie produktą, kintamieji, kurie turi visą informaciją, yra perduodami įvairioms funkcijoms su skirtingomis paskirtimis. Laikui bėgant ir saugant vis daugiau duomenų apie turimus produktus, tu sugalvoji išsaugoti turimą informaciją sąrašuose ar žodynuose. Norint, jog tavo programa veiktų, tu dabar turi redaguoti kiekvieną funkciją, kuri naudojo tuos kintamuosius, taip, kad dabar ji galėtų priimti ir manipuliuoti sąrašus ar žodynus. Imagine the time that would take for a program that was hundreds of megabytes, and hundreds of files in size! It would drive you insane! not to mention, errors in your code, are almost guaranteed, just because of the large volume of work and possibilities to make a typo or other error. This is less than optimal.&lt;br /&gt;
Procedūrinis programavimas yra paremtas procedūromis ar funkcijomis. Objektinis programavimas yra paremtas objektais. Ar prisimeni kaip procedūrinė programa atskyrė duomenis nuo kodo? Ar prisimeni tą programą, kuri turėjo šimtus failų ir norint kažką pakeisti reikėdavo ilgai narpstytis? &lt;br /&gt;
Galvokite apie &amp;lt;i&amp;gt;objektą&amp;lt;/i&amp;gt; kaip apie minėtų failų ir duomenų &amp;quot;kombinaciją&amp;quot; į vieną esybę. Technine prasme, objektas yra esybė, kuri savyje turi duomenis ir procedūras (kodą, funkcijas, t.t.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Duomenis objekto viduje vadiname &amp;lt;i&amp;gt;atributais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Funkcijas ar procedūras objekto viduje vadiname &amp;lt;i&amp;gt;metodais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;duomenų atributus&amp;lt;/b&amp;gt; kaip apie kintamuosius. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;metodus&amp;lt;/b&amp;gt; kaip apie funkcijas ar procedūras. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į paprastą, kasdienį pavyzdį. Lemputė ir jungiklis tavo kambaryje.&lt;br /&gt;
Atributai bus štai tokie.&lt;br /&gt;
&lt;br /&gt;
//Mindaugo komentaras: ar verčiame True/False?&lt;br /&gt;
* šviesa_įjungta ((True)Taip arba (False)Ne)&lt;br /&gt;
* jungiklio_pozicija (Viršuje arba Apačioje)&lt;br /&gt;
* elektros_tekėjimas (Taip arba Ne)&lt;br /&gt;
&lt;br /&gt;
Metodai būtų štai tokie.&lt;br /&gt;
&lt;br /&gt;
* pakeisti_jungiklio_poziciją&lt;br /&gt;
* pakeisti_elektros_tekėjimą&lt;br /&gt;
&lt;br /&gt;
Atributai gali būti matomi ir nematomi. Pavyzdžiui, mes negalime matyti elektros tekančios į lemputę. Mes tik žinome, kad elektra išties teka, nes ji tuo metu skleidžia šviesą. Nepaisant to, mes galime matyti jungiklio poziciją (jungiklio_pozicija) ir taip pat mes matome ar šviesa yra įjungta ar ne (šviesa_įjungta). Kai kurie metodai yra &amp;lt;i&amp;gt;privatūs&amp;lt;/i&amp;gt;. Tai reiškia, jog jų neišeina tiesiogiai pakeisti. Pavyzdžiui, nebent būtų nukerpami laidai (to nedarykite ir vardan šio pavyzdžio manykite, jog laidai neegzistuoja), jūs negalėtumėte pakeisti elektros tėkmės tiesiogiai. Jūs taip pat negalite tiesiogiai įtakoti lemputės šviesos (ne, jūs negalite atsukti lemputės ar jos sudaužyti!). Bet, jūs visada galite šiuos atributus įtakoti netiesiogiai naudojant objekto &amp;lt;i&amp;gt;metodus&amp;lt;/i&amp;gt;. Jeigu nesumokėsite mokesčių, metodas pavadinimu &amp;lt;code&amp;gt;pakeisti_elektros_tekėjimą&amp;lt;/code&amp;gt; pakeis &amp;lt;code&amp;gt;elektros_tekėjimas&amp;lt;/code&amp;gt; reikšmę į NE(FALSE). Jei jūs įjungsite jungiklį, &amp;lt;code&amp;gt;pakeisti_jungiklio_poziciją&amp;lt;/code&amp;gt; metodas pakeis &amp;lt;code&amp;gt;šviesa_įjungta&amp;lt;/code&amp;gt; atributo reikšmę.&lt;br /&gt;
&lt;br /&gt;
Dabar jau tikriausiai galvoji, &amp;quot;Ką tai turi bendro su Pitonu?&amp;quot; ar, &amp;quot;Aš nesuprantu, bet kaip man sukurti tą Objektą?&amp;quot;. Na, mes beveik priėjome prie atsakymų! Tik turiu paaiškinti dar vieną idėją prieš neriant į kodą.&lt;br /&gt;
&lt;br /&gt;
Pitone objekto atributai ir metodai yra nurodomi &amp;lt;b&amp;gt;klasės&amp;lt;/b&amp;gt;. Galvokite apie klasė kaip apie objekto techninį piešinį. Pavyzdžiui, jūsų namai - objektas kuriame gyvenate - taip pat jį galite vadinti butu, vasarnamiu, prakartėle ar bet kuo kitu, buvo pastatytas naudojant techinius piešinius; šie techniniai piešiniai būtų vadinami klasėmis, kurios buvo panaudotos projektuojant jūsų namus, butą, vasarnamį, na suprantat apie ką kalbu. &lt;br /&gt;
&lt;br /&gt;
Dar kartą, klasė mums pasako kaip sukurti objektą. Techniniais terminais tariant, ir tai yra labai svarbu, klasė nusako naudojamus duomenų atributus ir metodus objekte.&lt;br /&gt;
&lt;br /&gt;
Norint sukurti klasę, mes suprogramuojame &amp;lt;i&amp;gt;klasės apibrėžimą&amp;lt;/i&amp;gt;. Klasės apibrėžimas, tai grupė pareiškimų, kurie nusako objekto atributus ir metodus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Pirma pamoka&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apačioje yra procedūrinė programa, kuri atlieka paprastą matematinį veiksmą su vartotojo įvestu skaičiu.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Programa parašyta Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
&lt;br /&gt;
# Procedūra 1&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Pasiimame skaičių, kurį manipuliuosime.&lt;br /&gt;
        num = float(input(&amp;quot;Įrašykite skaičių.\n&amp;quot;))&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su pasiimtu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 2&lt;br /&gt;
        addednum = addfive(num)&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su ankščiau išsaugotu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 3&lt;br /&gt;
        multipliednum = multiply(addednum)&lt;br /&gt;
        # Paduodame skaičių procedūrai 4&lt;br /&gt;
        display(multipliednum)&lt;br /&gt;
    # Susidorojame su išimtimis, kurios gali atsirasti dėl netinkamo vartotojo skaičiaus įvedimo&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Privalote įvesti tinkamą skaičių.\n&amp;quot;)&lt;br /&gt;
        # Atstatome kintamojo num reikšmę, kad ištrintumėm netinkamą vartotojo įvestį.&lt;br /&gt;
        num = 0&lt;br /&gt;
        # Dar kartą iškviečiame main.&lt;br /&gt;
        main()&lt;br /&gt;
&lt;br /&gt;
# Procedūra 2&lt;br /&gt;
def addfive(num):&lt;br /&gt;
    return num + 5&lt;br /&gt;
&lt;br /&gt;
# Procedūra 3&lt;br /&gt;
def multiply(addednum):&lt;br /&gt;
    return addednum * 2.452&lt;br /&gt;
&lt;br /&gt;
# Procedūra 4&lt;br /&gt;
def display(multi):&lt;br /&gt;
    # Parodome galutinį rezultatą.&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra &amp;quot;, multi)&lt;br /&gt;
&lt;br /&gt;
# Kviečiame procedūrą 1&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime skaitemnį &amp;quot;5&amp;quot;, gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 5&lt;br /&gt;
 Galutinis rezultatas yra 24.52&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime reikšmę &amp;quot;g&amp;quot;, tada pasitaisysime ir įrašysime skaitmenį &amp;quot;8&amp;quot;, tada gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 g&lt;br /&gt;
 Privalote įvesti tinkamą skaičių.&lt;br /&gt;
 &lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 8&lt;br /&gt;
 Galutinis rezultatas yra 31.875999999999998&lt;br /&gt;
&lt;br /&gt;
Below, is a Class, and a program which uses that class. This Object Oriented Program does the same thing as the procedural program above. Let's cover some important OOP coding concepts before we dive into the Class and program. &lt;br /&gt;
To create a class, we use the &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; keyword. After the keyword, you type the name you want to name your class. It is common practice that the name of your class uses CapWords convention.&lt;br /&gt;
If I wanted to create a class named dirtysocks, the code would be:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class DirtySocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Class is shown first. The program which uses the class is second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexample.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Class&lt;br /&gt;
&lt;br /&gt;
class NumChange:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.__number = 0&lt;br /&gt;
&lt;br /&gt;
    def addfive(self,num):&lt;br /&gt;
        self.__number = num&lt;br /&gt;
        return self.__number + 5&lt;br /&gt;
&lt;br /&gt;
    def multiply(self,added):&lt;br /&gt;
        self.__added = added&lt;br /&gt;
        return self.__added * 2.452&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program which uses the class above, is below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexampleprog.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Program&lt;br /&gt;
&lt;br /&gt;
import oopexample&lt;br /&gt;
&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    num = float(input(&amp;quot;Please enter a number.\n&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    added = maths.addfive(num)&lt;br /&gt;
&lt;br /&gt;
    multip = maths.multiply(added)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;The manipulated value is &amp;quot;,multip)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After looking at that program, you are probably a bit lost. That's OK. Let's start off by dissecting the class.&lt;br /&gt;
The class is named &amp;quot;NumChange&amp;quot;&lt;br /&gt;
There are three methods to this class:&lt;br /&gt;
* __init__&lt;br /&gt;
* addfive&lt;br /&gt;
* multiply&lt;br /&gt;
&lt;br /&gt;
These three methods each have a similar code.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice how each method has a parameter named &amp;quot;self&amp;quot;. This parameter must be present in each method of the class. This parameter doesn't HAVE TO be called &amp;quot;self&amp;quot;, but it is standard practice, which means you should probably stick with it. This parameter is required in each method because when a method executes, it has to know which object's attributes to operate on. Even though there is only one Object, we still need to make sure the interpreter knows that we want to use the data attributes in that class. So we play it safe...and use the &amp;quot;self&amp;quot; parameter.&lt;br /&gt;
&lt;br /&gt;
Let's look at the first method. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most Classes in Python have an &amp;lt;code&amp;gt;__init__&amp;lt;/code&amp;gt; which executes automatically when an instance of a class is created in memory. (When we reference a class, an &amp;lt;i&amp;gt;instance&amp;lt;/i&amp;gt; [or object] of that class is created.) This method is commonly referred to as the &amp;lt;i&amp;gt;initializer method&amp;lt;/i&amp;gt;. When the method executes, the &amp;quot;self&amp;quot; parameter is automatically assigned to the object. This method is called the initializer method because is &amp;quot;initializes&amp;quot; the data attributes. ↵Under the __init__ method, we set the value of the &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt; attribute to 0 initially.&lt;br /&gt;
We reference the object attribute using dot notation. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.__number = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;self.__number = 0&amp;lt;/code&amp;gt; line simply means &amp;quot;&amp;quot;the value of the attribute &amp;quot;number&amp;quot;, in the object, is 0&amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Let's look at the next method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
    self.__number = num&lt;br /&gt;
    return self.__number + 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;addfive&amp;quot;. It accepts a parameter called &amp;quot;num&amp;quot;, from the program using the class. The method then assigns the value of that parameter to the &amp;quot;number&amp;quot; attribute inside the object. The method then returns the value of &amp;quot;number&amp;quot;, with 5 added to it, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Let's look at the third method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
    self.__added = added&lt;br /&gt;
    return self.__added * 2.453&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;multiply&amp;quot;. It accepts a parameter named &amp;quot;added&amp;quot;. It assigns the value of the parameter to the &amp;quot;added&amp;quot; attribute, and returns the value of the &amp;quot;added&amp;quot; attribute multiplied by 2.452, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Notice how the name of each method begins with two underscores? Let's explain that.&lt;br /&gt;
Earlier we mentioned that an object operates on data attributes inside itself using methods. Ideally, these data attributes should be able to be manipulated ONLY BY METHODS IN THE OBJECT. It is possible to have outside code manipulate data attributes. To &amp;quot;hide&amp;quot; attributes, so only methods in the object can manipulate them, you use two underscores before the object name, as we have been demonstrating. Omitting those two underscores in the attribute name, allows for the possibility of manipulation from code outside the object.&lt;br /&gt;
&lt;br /&gt;
Let's look at the program which uses the class we just dissected.&lt;br /&gt;
&lt;br /&gt;
Notice the first line of non comment code.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import oopexample&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line of code imports the class, which we have saved in a separate file (module). Classes do not have to be in a separate file, but it is almost always the case, and thus is good practice to get used to importing the module now.&lt;br /&gt;
&lt;br /&gt;
The next line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line creates an instance of the NumChange class, stored in the module named &amp;quot;oopexample&amp;quot;, and stores the instance in the variable named &amp;quot;maths&amp;quot;.&lt;br /&gt;
The syntax is:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;i&amp;gt;modulename.Classname()&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Next we define the main function.&lt;br /&gt;
Then, we get a number from the user.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;added = maths.addfive(num)&amp;lt;/code&amp;gt; sends the value of the &amp;quot;num&amp;quot; variable to the method named &amp;quot;addfive&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;added&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;multip = maths.multiply(added)&amp;lt;/code&amp;gt; sends the value of the variable &amp;quot;added&amp;quot;, to the method named &amp;quot;multiply&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;multip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line prints &amp;quot;The manipulated value is &amp;lt;value of multip&amp;gt;&amp;quot;. The last line calls the main function which executes the steps outlined above.&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Recursion |next=Intro to Imported Libraries and other Functions}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3497</id>
		<title>Python Vadovėlis/Įvadas į objektinį programavimą Python 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3497"/>
		<updated>2021-11-08T12:55:00Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: Pirma programa&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objektinis programavimas==&lt;br /&gt;
&lt;br /&gt;
Iki šiol tu naudojai procedūrinį programavimo būdą. Tačiau, yra daug programų, kurios - parašytos naudojant objektinį programavimo būdą. Žinant abu būdus ir jų skirtumus yra labai svarbu. Informatikoje, daug svarbių kalbų kaip C++ ar Java dažnai naudoja objektinį programavimo būdą.&lt;br /&gt;
&lt;br /&gt;
Pradedantiesiems ir mokiniams neturintiems programavimo žinių objektinis programavimas dažnai gali atrodyti painus ir tai yra visiškai normalu. Nesijausk blogai jei iš pradžių suprasti nesiseka. Jei šis skyrius tau to suprasti nepadės, yra ir daugiau gerų šaltinių, kurie tau padės atsakyti į visus klausimus.&lt;br /&gt;
&lt;br /&gt;
Šis skyrius yra padalintas į keletą pamokų. Kiekviena pamoka yra skirta paaiškinti skirtingas objektinio programavimo dalis. &amp;lt;b&amp;gt;LABAI SVARBU&amp;lt;/b&amp;gt; suprasti visas objektinio programavimo dalis. Prieš kiekvieną pamoką, bus parašyta įžanga, kuri paaiškins pagrindines idėjas, sąvokas ir kitas objektinio programavimo sritis, kurios yra reikalingos suprasti kiekvieną pamoką.&lt;br /&gt;
&lt;br /&gt;
==Įžanga==&lt;br /&gt;
&lt;br /&gt;
Galvokite apie procedūrą kaip apie funkciją. Funkcija turi konkrečią paskyrtį ir jų gali būti įvairių: rikti įvestis, atlikti matematinius skaičiavimus, atvaizduoti ar manipuliuoti duomenis. Typically, procedures use data which is separate from code for manipulation. This data is often passed between procedures. When a program becomes much larger and complex, this can cause problems.&lt;br /&gt;
Pavyzdžiui, suprogramavai programą, kuri kintamuosiuose išsaugo produkto duomenis. Kai klientas paprašo informacijos apie produktą, kintamieji, kurie turi visą informaciją, yra perduodami įvairioms funkcijoms su skirtingomis paskirtimis. Laikui bėgant ir saugant vis daugiau duomenų apie turimus produktus, tu sugalvoji išsaugoti turimą informaciją sąrašuose ar žodynuose. Norint, jog tavo programa veiktų, tu dabar turi redaguoti kiekvieną funkciją, kuri naudojo tuos kintamuosius, taip, kad dabar ji galėtų priimti ir manipuliuoti sąrašus ar žodynus. Imagine the time that would take for a program that was hundreds of megabytes, and hundreds of files in size! It would drive you insane! not to mention, errors in your code, are almost guaranteed, just because of the large volume of work and possibilities to make a typo or other error. This is less than optimal.&lt;br /&gt;
Procedūrinis programavimas yra paremtas procedūromis ar funkcijomis. Objektinis programavimas yra paremtas objektais. Ar prisimeni kaip procedūrinė programa atskyrė duomenis nuo kodo? Ar prisimeni tą programą, kuri turėjo šimtus failų ir norint kažką pakeisti reikėdavo ilgai narpstytis? &lt;br /&gt;
Galvokite apie &amp;lt;i&amp;gt;objektą&amp;lt;/i&amp;gt; kaip apie minėtų failų ir duomenų &amp;quot;kombinaciją&amp;quot; į vieną esybę. Technine prasme, objektas yra esybė, kuri savyje turi duomenis ir procedūras (kodą, funkcijas, t.t.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Duomenis objekto viduje vadiname &amp;lt;i&amp;gt;atributais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Funkcijas ar procedūras objekto viduje vadiname &amp;lt;i&amp;gt;metodais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;duomenų atributus&amp;lt;/b&amp;gt; kaip apie kintamuosius. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;metodus&amp;lt;/b&amp;gt; kaip apie funkcijas ar procedūras. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į paprastą, kasdienį pavyzdį. Lemputė ir jungiklis tavo kambaryje.&lt;br /&gt;
Atributai bus štai tokie.&lt;br /&gt;
&lt;br /&gt;
//Mindaugo komentaras: ar verčiame True/False?&lt;br /&gt;
* šviesa_įjungta ((True)Taip arba (False)Ne)&lt;br /&gt;
* jungiklio_pozicija (Viršuje arba Apačioje)&lt;br /&gt;
* elektros_tekėjimas (Taip arba Ne)&lt;br /&gt;
&lt;br /&gt;
Metodai būtų štai tokie.&lt;br /&gt;
&lt;br /&gt;
* pakeisti_jungiklio_poziciją&lt;br /&gt;
* pakeisti_elektros_tekėjimą&lt;br /&gt;
&lt;br /&gt;
Atributai gali būti matomi ir nematomi. Pavyzdžiui, mes negalime matyti elektros tekančios į lemputę. Mes tik žinome, kad elektra išties teka, nes ji tuo metu skleidžia šviesą. Nepaisant to, mes galime matyti jungiklio poziciją (jungiklio_pozicija) ir taip pat mes matome ar šviesa yra įjungta ar ne (šviesa_įjungta). Kai kurie metodai yra &amp;lt;i&amp;gt;privatūs&amp;lt;/i&amp;gt;. Tai reiškia, jog jų neišeina tiesiogiai pakeisti. Pavyzdžiui, nebent būtų nukerpami laidai (to nedarykite ir vardan šio pavyzdžio manykite, jog laidai neegzistuoja), jūs negalėtumėte pakeisti elektros tėkmės tiesiogiai. Jūs taip pat negalite tiesiogiai įtakoti lemputės šviesos (ne, jūs negalite atsukti lemputės ar jos sudaužyti!). Bet, jūs visada galite šiuos atributus įtakoti netiesiogiai naudojant objekto &amp;lt;i&amp;gt;metodus&amp;lt;/i&amp;gt;. Jeigu nesumokėsite mokesčių, metodas pavadinimu &amp;lt;code&amp;gt;pakeisti_elektros_tekėjimą&amp;lt;/code&amp;gt; pakeis &amp;lt;code&amp;gt;elektros_tekėjimas&amp;lt;/code&amp;gt; reikšmę į NE(FALSE). Jei jūs įjungsite jungiklį, &amp;lt;code&amp;gt;pakeisti_jungiklio_poziciją&amp;lt;/code&amp;gt; metodas pakeis &amp;lt;code&amp;gt;šviesa_įjungta&amp;lt;/code&amp;gt; atributo reikšmę.&lt;br /&gt;
&lt;br /&gt;
Dabar jau tikriausiai galvoji, &amp;quot;Ką tai turi bendro su Pitonu?&amp;quot; ar, &amp;quot;Aš nesuprantu, bet kaip man sukurti tą Objektą?&amp;quot;. Na, mes beveik priėjome prie atsakymų! Tik turiu paaiškinti dar vieną idėją prieš neriant į kodą.&lt;br /&gt;
&lt;br /&gt;
Pitone objekto atributai ir metodai yra nurodomi &amp;lt;b&amp;gt;klasės&amp;lt;/b&amp;gt;. Galvokite apie klasė kaip apie objekto techninį piešinį. Pavyzdžiui, jūsų namai - objektas kuriame gyvenate - taip pat jį galite vadinti butu, vasarnamiu, prakartėle ar bet kuo kitu, buvo pastatytas naudojant techinius piešinius; šie techniniai piešiniai būtų vadinami klasėmis, kurios buvo panaudotos projektuojant jūsų namus, butą, vasarnamį, na suprantat apie ką kalbu. &lt;br /&gt;
&lt;br /&gt;
Dar kartą, klasė mums pasako kaip sukurti objektą. Techniniais terminais tariant, ir tai yra labai svarbu, klasė nusako naudojamus duomenų atributus ir metodus objekte.&lt;br /&gt;
&lt;br /&gt;
Norint sukurti klasę, mes suprogramuojame &amp;lt;i&amp;gt;klasės apibrėžimą&amp;lt;/i&amp;gt;. Klasės apibrėžimas, tai grupė pareiškimų, kurie nusako objekto atributus ir metodus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Pirma pamoka&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apačioje yra procedūrinė programa, kuri atlieka paprastą matematinį veiksmą su vartotojo įvestu skaičiu.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Programa parašyta Mitchell Aikens&lt;br /&gt;
# Nėra autoriaus teisių&lt;br /&gt;
# 2012&lt;br /&gt;
&lt;br /&gt;
# Procedure 1&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Pasiimame skaičių, kurį manipuliuosime.&lt;br /&gt;
        num = float(input(&amp;quot;Įrašykite skaičių.\n&amp;quot;))&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su pasiimtu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 2&lt;br /&gt;
        addednum = addfive(num)&lt;br /&gt;
        # Išsaugome naują skaičių į kintamąjį. Prieš tai, su ankščiau išsaugotu skaičiu atliekame matematinius veiksmus naudojant&lt;br /&gt;
        # procedūrą 3&lt;br /&gt;
        multipliednum = multiply(addednum)&lt;br /&gt;
        # Paduodame skaičių procedūrai 4&lt;br /&gt;
        display(multipliednum)&lt;br /&gt;
    # Susidorojame su išimtimis, kurios gali atsirasti dėl netinkamo vartotojo skaičiaus įvedimo&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Privalote įvesti tinkamą skaičių.\n&amp;quot;)&lt;br /&gt;
        # Atstatome kintamojo num reikšmę, kad ištrintumėm netinkamą vartotojo įvestį.&lt;br /&gt;
        num = 0&lt;br /&gt;
        # Dar kartą iškviečiame main.&lt;br /&gt;
        main()&lt;br /&gt;
&lt;br /&gt;
# Procedūra 2&lt;br /&gt;
def addfive(num):&lt;br /&gt;
    return num + 5&lt;br /&gt;
&lt;br /&gt;
# Procedūra 3&lt;br /&gt;
def multiply(addednum):&lt;br /&gt;
    return addednum * 2.452&lt;br /&gt;
&lt;br /&gt;
# Procedūra 4&lt;br /&gt;
def display(multi):&lt;br /&gt;
    # Parodome galutinį rezultatą.&lt;br /&gt;
    print(&amp;quot;Galutinis rezultatas yra &amp;quot;, multi)&lt;br /&gt;
&lt;br /&gt;
# Kviečiame procedūrą 1&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime skaitemnį &amp;quot;5&amp;quot;, gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 5&lt;br /&gt;
 Galutinis rezultatas yra 24.52&lt;br /&gt;
&lt;br /&gt;
Jei mes įrašysime reikšmę &amp;quot;g&amp;quot;, tada pasitaisysime ir įrašysime skaitmenį &amp;quot;8&amp;quot;, tada gausime išvestį parodytą žemiau.&lt;br /&gt;
&lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 g&lt;br /&gt;
 Privalote įvesti tinkamą skaičių.&lt;br /&gt;
 &lt;br /&gt;
 Įrašykite skaičių.&lt;br /&gt;
 8&lt;br /&gt;
 Galutinis rezultatas yra 31.875999999999998&lt;br /&gt;
&lt;br /&gt;
Below, is a Class, and a program which uses that class. This Object Oriented Program does the same thing as the procedural program above. Let's cover some important OOP coding concepts before we dive into the Class and program. &lt;br /&gt;
To create a class, we use the &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; keyword. After the keyword, you type the name you want to name your class. It is common practice that the name of your class uses CapWords convention.&lt;br /&gt;
If I wanted to create a class named dirtysocks, the code would be:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class DirtySocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Class is shown first. The program which uses the class is second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexample.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Class&lt;br /&gt;
&lt;br /&gt;
class NumChange:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.__number = 0&lt;br /&gt;
&lt;br /&gt;
    def addfive(self,num):&lt;br /&gt;
        self.__number = num&lt;br /&gt;
        return self.__number + 5&lt;br /&gt;
&lt;br /&gt;
    def multiply(self,added):&lt;br /&gt;
        self.__added = added&lt;br /&gt;
        return self.__added * 2.452&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program which uses the class above, is below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexampleprog.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Program&lt;br /&gt;
&lt;br /&gt;
import oopexample&lt;br /&gt;
&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    num = float(input(&amp;quot;Please enter a number.\n&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    added = maths.addfive(num)&lt;br /&gt;
&lt;br /&gt;
    multip = maths.multiply(added)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;The manipulated value is &amp;quot;,multip)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After looking at that program, you are probably a bit lost. That's OK. Let's start off by dissecting the class.&lt;br /&gt;
The class is named &amp;quot;NumChange&amp;quot;&lt;br /&gt;
There are three methods to this class:&lt;br /&gt;
* __init__&lt;br /&gt;
* addfive&lt;br /&gt;
* multiply&lt;br /&gt;
&lt;br /&gt;
These three methods each have a similar code.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice how each method has a parameter named &amp;quot;self&amp;quot;. This parameter must be present in each method of the class. This parameter doesn't HAVE TO be called &amp;quot;self&amp;quot;, but it is standard practice, which means you should probably stick with it. This parameter is required in each method because when a method executes, it has to know which object's attributes to operate on. Even though there is only one Object, we still need to make sure the interpreter knows that we want to use the data attributes in that class. So we play it safe...and use the &amp;quot;self&amp;quot; parameter.&lt;br /&gt;
&lt;br /&gt;
Let's look at the first method. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most Classes in Python have an &amp;lt;code&amp;gt;__init__&amp;lt;/code&amp;gt; which executes automatically when an instance of a class is created in memory. (When we reference a class, an &amp;lt;i&amp;gt;instance&amp;lt;/i&amp;gt; [or object] of that class is created.) This method is commonly referred to as the &amp;lt;i&amp;gt;initializer method&amp;lt;/i&amp;gt;. When the method executes, the &amp;quot;self&amp;quot; parameter is automatically assigned to the object. This method is called the initializer method because is &amp;quot;initializes&amp;quot; the data attributes. ↵Under the __init__ method, we set the value of the &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt; attribute to 0 initially.&lt;br /&gt;
We reference the object attribute using dot notation. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.__number = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;self.__number = 0&amp;lt;/code&amp;gt; line simply means &amp;quot;&amp;quot;the value of the attribute &amp;quot;number&amp;quot;, in the object, is 0&amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Let's look at the next method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
    self.__number = num&lt;br /&gt;
    return self.__number + 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;addfive&amp;quot;. It accepts a parameter called &amp;quot;num&amp;quot;, from the program using the class. The method then assigns the value of that parameter to the &amp;quot;number&amp;quot; attribute inside the object. The method then returns the value of &amp;quot;number&amp;quot;, with 5 added to it, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Let's look at the third method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
    self.__added = added&lt;br /&gt;
    return self.__added * 2.453&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;multiply&amp;quot;. It accepts a parameter named &amp;quot;added&amp;quot;. It assigns the value of the parameter to the &amp;quot;added&amp;quot; attribute, and returns the value of the &amp;quot;added&amp;quot; attribute multiplied by 2.452, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Notice how the name of each method begins with two underscores? Let's explain that.&lt;br /&gt;
Earlier we mentioned that an object operates on data attributes inside itself using methods. Ideally, these data attributes should be able to be manipulated ONLY BY METHODS IN THE OBJECT. It is possible to have outside code manipulate data attributes. To &amp;quot;hide&amp;quot; attributes, so only methods in the object can manipulate them, you use two underscores before the object name, as we have been demonstrating. Omitting those two underscores in the attribute name, allows for the possibility of manipulation from code outside the object.&lt;br /&gt;
&lt;br /&gt;
Let's look at the program which uses the class we just dissected.&lt;br /&gt;
&lt;br /&gt;
Notice the first line of non comment code.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import oopexample&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line of code imports the class, which we have saved in a separate file (module). Classes do not have to be in a separate file, but it is almost always the case, and thus is good practice to get used to importing the module now.&lt;br /&gt;
&lt;br /&gt;
The next line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line creates an instance of the NumChange class, stored in the module named &amp;quot;oopexample&amp;quot;, and stores the instance in the variable named &amp;quot;maths&amp;quot;.&lt;br /&gt;
The syntax is:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;i&amp;gt;modulename.Classname()&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Next we define the main function.&lt;br /&gt;
Then, we get a number from the user.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;added = maths.addfive(num)&amp;lt;/code&amp;gt; sends the value of the &amp;quot;num&amp;quot; variable to the method named &amp;quot;addfive&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;added&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;multip = maths.multiply(added)&amp;lt;/code&amp;gt; sends the value of the variable &amp;quot;added&amp;quot;, to the method named &amp;quot;multiply&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;multip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line prints &amp;quot;The manipulated value is &amp;lt;value of multip&amp;gt;&amp;quot;. The last line calls the main function which executes the steps outlined above.&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Recursion |next=Intro to Imported Libraries and other Functions}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3496</id>
		<title>Python Vadovėlis/Įvadas į objektinį programavimą Python 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3496"/>
		<updated>2021-11-08T12:00:27Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: pavadinimo korekcija&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objektinis programavimas==&lt;br /&gt;
&lt;br /&gt;
Iki šiol tu naudojai procedūrinį programavimo būdą. Tačiau, yra daug programų, kurios - parašytos naudojant objektinį programavimo būdą. Žinant abu būdus ir jų skirtumus yra labai svarbu. Informatikoje, daug svarbių kalbų kaip C++ ar Java dažnai naudoja objektinį programavimo būdą.&lt;br /&gt;
&lt;br /&gt;
Pradedantiesiems ir mokiniams neturintiems programavimo žinių objektinis programavimas dažnai gali atrodyti painus ir tai yra visiškai normalu. Nesijausk blogai jei iš pradžių suprasti nesiseka. Jei šis skyrius tau to suprasti nepadės, yra ir daugiau gerų šaltinių, kurie tau padės atsakyti į visus klausimus.&lt;br /&gt;
&lt;br /&gt;
Šis skyrius yra padalintas į keletą pamokų. Kiekviena pamoka yra skirta paaiškinti skirtingas objektinio programavimo dalis. &amp;lt;b&amp;gt;LABAI SVARBU&amp;lt;/b&amp;gt; suprasti visas objektinio programavimo dalis. Prieš kiekvieną pamoką, bus parašyta įžanga, kuri paaiškins pagrindines idėjas, sąvokas ir kitas objektinio programavimo sritis, kurios yra reikalingos suprasti kiekvieną pamoką.&lt;br /&gt;
&lt;br /&gt;
==Įžanga==&lt;br /&gt;
&lt;br /&gt;
Galvokite apie procedūrą kaip apie funkciją. Funkcija turi konkrečią paskyrtį ir jų gali būti įvairių: rikti įvestis, atlikti matematinius skaičiavimus, atvaizduoti ar manipuliuoti duomenis. Typically, procedures use data which is separate from code for manipulation. This data is often passed between procedures. When a program becomes much larger and complex, this can cause problems.&lt;br /&gt;
Pavyzdžiui, suprogramavai programą, kuri kintamuosiuose išsaugo produkto duomenis. Kai klientas paprašo informacijos apie produktą, kintamieji, kurie turi visą informaciją, yra perduodami įvairioms funkcijoms su skirtingomis paskirtimis. Laikui bėgant ir saugant vis daugiau duomenų apie turimus produktus, tu sugalvoji išsaugoti turimą informaciją sąrašuose ar žodynuose. Norint, jog tavo programa veiktų, tu dabar turi redaguoti kiekvieną funkciją, kuri naudojo tuos kintamuosius, taip, kad dabar ji galėtų priimti ir manipuliuoti sąrašus ar žodynus. Imagine the time that would take for a program that was hundreds of megabytes, and hundreds of files in size! It would drive you insane! not to mention, errors in your code, are almost guaranteed, just because of the large volume of work and possibilities to make a typo or other error. This is less than optimal.&lt;br /&gt;
Procedūrinis programavimas yra paremtas procedūromis ar funkcijomis. Objektinis programavimas yra paremtas objektais. Ar prisimeni kaip procedūrinė programa atskyrė duomenis nuo kodo? Ar prisimeni tą programą, kuri turėjo šimtus failų ir norint kažką pakeisti reikėdavo ilgai narpstytis? &lt;br /&gt;
Galvokite apie &amp;lt;i&amp;gt;objektą&amp;lt;/i&amp;gt; kaip apie minėtų failų ir duomenų &amp;quot;kombinaciją&amp;quot; į vieną esybę. Technine prasme, objektas yra esybė, kuri savyje turi duomenis ir procedūras (kodą, funkcijas, t.t.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Duomenis objekto viduje vadiname &amp;lt;i&amp;gt;atributais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Funkcijas ar procedūras objekto viduje vadiname &amp;lt;i&amp;gt;metodais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;duomenų atributus&amp;lt;/b&amp;gt; kaip apie kintamuosius. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;metodus&amp;lt;/b&amp;gt; kaip apie funkcijas ar procedūras. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į paprastą, kasdienį pavyzdį. Lemputė ir jungiklis tavo kambaryje.&lt;br /&gt;
Atributai bus štai tokie.&lt;br /&gt;
&lt;br /&gt;
//Mindaugo komentaras: ar verčiame True/False?&lt;br /&gt;
* šviesa_įjungta ((True)Taip arba (False)Ne)&lt;br /&gt;
* jungiklio_pozicija (Viršuje arba Apačioje)&lt;br /&gt;
* elektros_tekėjimas (Taip arba Ne)&lt;br /&gt;
&lt;br /&gt;
Metodai būtų štai tokie.&lt;br /&gt;
&lt;br /&gt;
* pakeisti_jungiklio_poziciją&lt;br /&gt;
* pakeisti_elektros_tekėjimą&lt;br /&gt;
&lt;br /&gt;
Atributai gali būti matomi ir nematomi. Pavyzdžiui, mes negalime matyti elektros tekančios į lemputę. Mes tik žinome, kad elektra išties teka, nes ji tuo metu skleidžia šviesą. Nepaisant to, mes galime matyti jungiklio poziciją (jungiklio_pozicija) ir taip pat mes matome ar šviesa yra įjungta ar ne (šviesa_įjungta). Kai kurie metodai yra &amp;lt;i&amp;gt;privatūs&amp;lt;/i&amp;gt;. Tai reiškia, jog jų neišeina tiesiogiai pakeisti. Pavyzdžiui, nebent būtų nukerpami laidai (to nedarykite ir vardan šio pavyzdžio manykite, jog laidai neegzistuoja), jūs negalėtumėte pakeisti elektros tėkmės tiesiogiai. Jūs taip pat negalite tiesiogiai įtakoti lemputės šviesos (ne, jūs negalite atsukti lemputės ar jos sudaužyti!). Bet, jūs visada galite šiuos atributus įtakoti netiesiogiai naudojant objekto &amp;lt;i&amp;gt;metodus&amp;lt;/i&amp;gt;. Jeigu nesumokėsite mokesčių, metodas pavadinimu &amp;lt;code&amp;gt;pakeisti_elektros_tekėjimą&amp;lt;/code&amp;gt; pakeis &amp;lt;code&amp;gt;elektros_tekėjimas&amp;lt;/code&amp;gt; reikšmę į NE(FALSE). Jei jūs įjungsite jungiklį, &amp;lt;code&amp;gt;pakeisti_jungiklio_poziciją&amp;lt;/code&amp;gt; metodas pakeis &amp;lt;code&amp;gt;šviesa_įjungta&amp;lt;/code&amp;gt; atributo reikšmę.&lt;br /&gt;
&lt;br /&gt;
Dabar jau tikriausiai galvoji, &amp;quot;Ką tai turi bendro su Pitonu?&amp;quot; ar, &amp;quot;Aš nesuprantu, bet kaip man sukurti tą Objektą?&amp;quot;. Na, mes beveik priėjome prie atsakymų! Tik turiu paaiškinti dar vieną idėją prieš neriant į kodą.&lt;br /&gt;
&lt;br /&gt;
Pitone objekto atributai ir metodai yra nurodomi &amp;lt;b&amp;gt;klasės&amp;lt;/b&amp;gt;. Galvokite apie klasė kaip apie objekto techninį piešinį. Pavyzdžiui, jūsų namai - objektas kuriame gyvenate - taip pat jį galite vadinti butu, vasarnamiu, prakartėle ar bet kuo kitu, buvo pastatytas naudojant techinius piešinius; šie techniniai piešiniai būtų vadinami klasėmis, kurios buvo panaudotos projektuojant jūsų namus, butą, vasarnamį, na suprantat apie ką kalbu. &lt;br /&gt;
&lt;br /&gt;
Dar kartą, klasė mums pasako kaip sukurti objektą. Techniniais terminais tariant, ir tai yra labai svarbu, klasė nusako naudojamus duomenų atributus ir metodus objekte.&lt;br /&gt;
&lt;br /&gt;
Norint sukurti klasę, mes suprogramuojame &amp;lt;i&amp;gt;klasės apibrėžimą&amp;lt;/i&amp;gt;. Klasės apibrėžimas, tai grupė pareiškimų, kurie nusako objekto atributus ir metodus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Pirma pamoka&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is a Procedural program that performs simple math on a single number, entered by a user.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Program by Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
&lt;br /&gt;
# Procedure 1&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Get a number to maniuplate&lt;br /&gt;
        num = float(input(&amp;quot;Please enter a number to manipulate.\n&amp;quot;))&lt;br /&gt;
        # Store the result of the value, after it has been manipulated&lt;br /&gt;
        # by Procedure 2&lt;br /&gt;
        addednum = addfive(num)&lt;br /&gt;
        # Store the result of the value, after it has been manipulated&lt;br /&gt;
        # by Procedure 3&lt;br /&gt;
        multipliednum = multiply(addednum)&lt;br /&gt;
        # Send the value to Procedure 4&lt;br /&gt;
        display(multipliednum)&lt;br /&gt;
    # Deal with exceptions from non-numeric user entry&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;You must enter a valid number.\n&amp;quot;)&lt;br /&gt;
        # Reset the value of num, to clear non-numeric data.&lt;br /&gt;
        num = 0&lt;br /&gt;
        # Call main, again.&lt;br /&gt;
        main()&lt;br /&gt;
&lt;br /&gt;
# Procedure 2&lt;br /&gt;
def addfive(num):&lt;br /&gt;
    return num + 5&lt;br /&gt;
&lt;br /&gt;
# Procedure 3&lt;br /&gt;
def multiply(addednum):&lt;br /&gt;
    return addednum * 2.452&lt;br /&gt;
&lt;br /&gt;
# Procedure 4&lt;br /&gt;
def display(multi):&lt;br /&gt;
    # Display the final value&lt;br /&gt;
    print(&amp;quot;The final value is &amp;quot;,multi)&lt;br /&gt;
&lt;br /&gt;
# Call Procedure 1&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we were to enter a value of &amp;quot;5&amp;quot;, the output would be as shown below.&lt;br /&gt;
&lt;br /&gt;
 Please enter a number to manipulate.&lt;br /&gt;
 5&lt;br /&gt;
 The final value is  24.52&lt;br /&gt;
&lt;br /&gt;
If we were to enter a value of &amp;quot;g&amp;quot;, and then correct the input and enter a value of &amp;quot;8&amp;quot;, the output would be as shown below.&lt;br /&gt;
&lt;br /&gt;
 Please enter a number to manipulate.&lt;br /&gt;
 g&lt;br /&gt;
 You must enter a valid number.&lt;br /&gt;
 &lt;br /&gt;
 Please enter a number to manipulate.&lt;br /&gt;
 8&lt;br /&gt;
 The final value is  31.875999999999998&lt;br /&gt;
&lt;br /&gt;
Below, is a Class, and a program which uses that class. This Object Oriented Program does the same thing as the procedural program above. Let's cover some important OOP coding concepts before we dive into the Class and program. &lt;br /&gt;
To create a class, we use the &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; keyword. After the keyword, you type the name you want to name your class. It is common practice that the name of your class uses CapWords convention.&lt;br /&gt;
If I wanted to create a class named dirtysocks, the code would be:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class DirtySocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Class is shown first. The program which uses the class is second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexample.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Class&lt;br /&gt;
&lt;br /&gt;
class NumChange:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.__number = 0&lt;br /&gt;
&lt;br /&gt;
    def addfive(self,num):&lt;br /&gt;
        self.__number = num&lt;br /&gt;
        return self.__number + 5&lt;br /&gt;
&lt;br /&gt;
    def multiply(self,added):&lt;br /&gt;
        self.__added = added&lt;br /&gt;
        return self.__added * 2.452&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program which uses the class above, is below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexampleprog.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Program&lt;br /&gt;
&lt;br /&gt;
import oopexample&lt;br /&gt;
&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    num = float(input(&amp;quot;Please enter a number.\n&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    added = maths.addfive(num)&lt;br /&gt;
&lt;br /&gt;
    multip = maths.multiply(added)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;The manipulated value is &amp;quot;,multip)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After looking at that program, you are probably a bit lost. That's OK. Let's start off by dissecting the class.&lt;br /&gt;
The class is named &amp;quot;NumChange&amp;quot;&lt;br /&gt;
There are three methods to this class:&lt;br /&gt;
* __init__&lt;br /&gt;
* addfive&lt;br /&gt;
* multiply&lt;br /&gt;
&lt;br /&gt;
These three methods each have a similar code.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice how each method has a parameter named &amp;quot;self&amp;quot;. This parameter must be present in each method of the class. This parameter doesn't HAVE TO be called &amp;quot;self&amp;quot;, but it is standard practice, which means you should probably stick with it. This parameter is required in each method because when a method executes, it has to know which object's attributes to operate on. Even though there is only one Object, we still need to make sure the interpreter knows that we want to use the data attributes in that class. So we play it safe...and use the &amp;quot;self&amp;quot; parameter.&lt;br /&gt;
&lt;br /&gt;
Let's look at the first method. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most Classes in Python have an &amp;lt;code&amp;gt;__init__&amp;lt;/code&amp;gt; which executes automatically when an instance of a class is created in memory. (When we reference a class, an &amp;lt;i&amp;gt;instance&amp;lt;/i&amp;gt; [or object] of that class is created.) This method is commonly referred to as the &amp;lt;i&amp;gt;initializer method&amp;lt;/i&amp;gt;. When the method executes, the &amp;quot;self&amp;quot; parameter is automatically assigned to the object. This method is called the initializer method because is &amp;quot;initializes&amp;quot; the data attributes. ↵Under the __init__ method, we set the value of the &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt; attribute to 0 initially.&lt;br /&gt;
We reference the object attribute using dot notation. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.__number = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;self.__number = 0&amp;lt;/code&amp;gt; line simply means &amp;quot;&amp;quot;the value of the attribute &amp;quot;number&amp;quot;, in the object, is 0&amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Let's look at the next method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
    self.__number = num&lt;br /&gt;
    return self.__number + 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;addfive&amp;quot;. It accepts a parameter called &amp;quot;num&amp;quot;, from the program using the class. The method then assigns the value of that parameter to the &amp;quot;number&amp;quot; attribute inside the object. The method then returns the value of &amp;quot;number&amp;quot;, with 5 added to it, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Let's look at the third method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
    self.__added = added&lt;br /&gt;
    return self.__added * 2.453&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;multiply&amp;quot;. It accepts a parameter named &amp;quot;added&amp;quot;. It assigns the value of the parameter to the &amp;quot;added&amp;quot; attribute, and returns the value of the &amp;quot;added&amp;quot; attribute multiplied by 2.452, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Notice how the name of each method begins with two underscores? Let's explain that.&lt;br /&gt;
Earlier we mentioned that an object operates on data attributes inside itself using methods. Ideally, these data attributes should be able to be manipulated ONLY BY METHODS IN THE OBJECT. It is possible to have outside code manipulate data attributes. To &amp;quot;hide&amp;quot; attributes, so only methods in the object can manipulate them, you use two underscores before the object name, as we have been demonstrating. Omitting those two underscores in the attribute name, allows for the possibility of manipulation from code outside the object.&lt;br /&gt;
&lt;br /&gt;
Let's look at the program which uses the class we just dissected.&lt;br /&gt;
&lt;br /&gt;
Notice the first line of non comment code.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import oopexample&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line of code imports the class, which we have saved in a separate file (module). Classes do not have to be in a separate file, but it is almost always the case, and thus is good practice to get used to importing the module now.&lt;br /&gt;
&lt;br /&gt;
The next line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line creates an instance of the NumChange class, stored in the module named &amp;quot;oopexample&amp;quot;, and stores the instance in the variable named &amp;quot;maths&amp;quot;.&lt;br /&gt;
The syntax is:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;i&amp;gt;modulename.Classname()&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Next we define the main function.&lt;br /&gt;
Then, we get a number from the user.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;added = maths.addfive(num)&amp;lt;/code&amp;gt; sends the value of the &amp;quot;num&amp;quot; variable to the method named &amp;quot;addfive&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;added&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;multip = maths.multiply(added)&amp;lt;/code&amp;gt; sends the value of the variable &amp;quot;added&amp;quot;, to the method named &amp;quot;multiply&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;multip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line prints &amp;quot;The manipulated value is &amp;lt;value of multip&amp;gt;&amp;quot;. The last line calls the main function which executes the steps outlined above.&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Recursion |next=Intro to Imported Libraries and other Functions}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3495</id>
		<title>Python Vadovėlis/Įvadas į objektinį programavimą Python 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3495"/>
		<updated>2021-11-08T11:59:08Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: išverstas tekstas iki pirmos pamokos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objektinis programavimas==&lt;br /&gt;
&lt;br /&gt;
Iki šiol tu naudojai procedūrinį programavimo būdą. Tačiau, yra daug programų, kurios - parašytos naudojant objektinį programavimo būdą. Žinant abu būdus ir jų skirtumus yra labai svarbu. Informatikoje, daug svarbių kalbų kaip C++ ar Java dažnai naudoja objektinį programavimo būdą.&lt;br /&gt;
&lt;br /&gt;
Pradedantiesiems ir mokiniams neturintiems programavimo žinių objektinis programavimas dažnai gali atrodyti painus ir tai yra visiškai normalu. Nesijausk blogai jei iš pradžių suprasti nesiseka. Jei šis skyrius tau to suprasti nepadės, yra ir daugiau gerų šaltinių, kurie tau padės atsakyti į visus klausimus.&lt;br /&gt;
&lt;br /&gt;
Šis skyrius yra padalintas į keletą pamokų. Kiekviena pamoka yra skirta paaiškinti skirtingas objektinio programavimo dalis. &amp;lt;b&amp;gt;LABAI SVARBU&amp;lt;/b&amp;gt; suprasti visas objektinio programavimo dalis. Prieš kiekvieną pamoką, bus parašyta įžanga, kuri paaiškins pagrindines idėjas, sąvokas ir kitas objektinio programavimo sritis, kurios yra reikalingos suprasti kiekvieną pamoką.&lt;br /&gt;
&lt;br /&gt;
==Įžanga==&lt;br /&gt;
&lt;br /&gt;
Galvokite apie procedūrą kaip apie funkciją. Funkcija turi konkrečią paskyrtį ir jų gali būti įvairių: rikti įvestis, atlikti matematinius skaičiavimus, atvaizduoti ar manipuliuoti duomenis. Typically, procedures use data which is separate from code for manipulation. This data is often passed between procedures. When a program becomes much larger and complex, this can cause problems.&lt;br /&gt;
Pavyzdžiui, suprogramavai programą, kuri kintamuosiuose išsaugo produkto duomenis. Kai klientas paprašo informacijos apie produktą, kintamieji, kurie turi visą informaciją, yra perduodami įvairioms funkcijoms su skirtingomis paskirtimis. Laikui bėgant ir saugant vis daugiau duomenų apie turimus produktus, tu sugalvoji išsaugoti turimą informaciją sąrašuose ar žodynuose. Norint, jog tavo programa veiktų, tu dabar turi redaguoti kiekvieną funkciją, kuri naudojo tuos kintamuosius, taip, kad dabar ji galėtų priimti ir manipuliuoti sąrašus ar žodynus. Imagine the time that would take for a program that was hundreds of megabytes, and hundreds of files in size! It would drive you insane! not to mention, errors in your code, are almost guaranteed, just because of the large volume of work and possibilities to make a typo or other error. This is less than optimal.&lt;br /&gt;
Procedūrinis programavimas yra paremtas procedūromis ar funkcijomis. Objektinis programavimas yra paremtas objektais. Ar prisimeni kaip procedūrinė programa atskyrė duomenis nuo kodo? Ar prisimeni tą programą, kuri turėjo šimtus failų ir norint kažką pakeisti reikėdavo ilgai narpstytis? &lt;br /&gt;
Galvokite apie &amp;lt;i&amp;gt;objektą&amp;lt;/i&amp;gt; kaip apie minėtų failų ir duomenų &amp;quot;kombinaciją&amp;quot; į vieną esybę. Technine prasme, objektas yra esybė, kuri savyje turi duomenis ir procedūras (kodą, funkcijas, t.t.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Duomenis objekto viduje vadiname &amp;lt;i&amp;gt;duomens atributais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Funkcijas ar procedūras objekto viduje vadiname &amp;lt;i&amp;gt;metodais&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;duomenų atributus&amp;lt;/b&amp;gt; kaip apie kintamuosius. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Galvok apie &amp;lt;b&amp;gt;metodus&amp;lt;/b&amp;gt; kaip apie funkcijas ar procedūras. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pažiūrėkime į paprastą, kasdienį pavyzdį. Lemputė ir jungiklis tavo kambaryje.&lt;br /&gt;
Duomenų atributai bus štai tokie.&lt;br /&gt;
&lt;br /&gt;
//Mindaugo komentaras: ar verčiame True/False?&lt;br /&gt;
* šviesa_įjungta ((True)Taip arba (False)Ne)&lt;br /&gt;
* jungiklio_pozicija (Viršuje arba Apačioje)&lt;br /&gt;
* elektros_tekėjimas (Taip arba Ne)&lt;br /&gt;
&lt;br /&gt;
Metodai būtų štai tokie.&lt;br /&gt;
&lt;br /&gt;
* pakeisti_jungiklio_poziciją&lt;br /&gt;
* pakeisti_elektros_tekėjimą&lt;br /&gt;
&lt;br /&gt;
Duomenų atributai gali būti matomi ir nematomi. Pavyzdžiui, mes negalime matyti elektros tekančios į lemputę. Mes tik žinome, kad elektra išties teka, nes ji tuo metu skleidžia šviesą. Nepaisant to, mes galime matyti jungiklio poziciją (jungiklio_pozicija) ir taip pat mes matome ar šviesa yra įjungta ar ne (šviesa_įjungta). Kai kurie metodai yra &amp;lt;i&amp;gt;privatūs&amp;lt;/i&amp;gt;. Tai reiškia, jog jų neišeina tiesiogiai pakeisti. Pavyzdžiui, nebent būtų nukerpami laidai (to nedarykite ir vardan šio pavyzdžio manykite, jog laidai neegzistuoja), jūs negalėtumėte pakeisti elektros tėkmės tiesiogiai. Jūs taip pat negalite tiesiogiai įtakoti lemputės šviesos (ne, jūs negalite atsukti lemputės ar jos sudaužyti!). Bet, jūs visada galite šiuos atributus įtakoti netiesiogiai naudojant objekto &amp;lt;i&amp;gt;metodus&amp;lt;/i&amp;gt;. Jeigu nesumokėsite mokesčių, metodas pavadinimu &amp;lt;code&amp;gt;pakeisti_elektros_tekėjimą&amp;lt;/code&amp;gt; pakeis &amp;lt;code&amp;gt;elektros_tekėjimas&amp;lt;/code&amp;gt; reikšmę į NE(FALSE). Jei jūs įjungsite jungiklį, &amp;lt;code&amp;gt;pakeisti_jungiklio_poziciją&amp;lt;/code&amp;gt; metodas pakeis &amp;lt;code&amp;gt;šviesa_įjungta&amp;lt;/code&amp;gt; atributo reikšmę.&lt;br /&gt;
&lt;br /&gt;
Dabar jau tikriausiai galvoji, &amp;quot;Ką tai turi bendro su Pitonu?&amp;quot; ar, &amp;quot;Aš nesuprantu, bet kaip man sukurti tą Objektą?&amp;quot;. Na, mes beveik priėjome prie atsakymų! Tik turiu paaiškinti dar vieną idėją prieš neriant į kodą.&lt;br /&gt;
&lt;br /&gt;
Pitone objekto duomenų atributai ir metodai yra nurodomi &amp;lt;b&amp;gt;klasės&amp;lt;/b&amp;gt;. Galvokite apie klasė kaip apie objekto techninį piešinį. Pavyzdžiui, jūsų namai - objektas kuriame gyvenate - taip pat jį galite vadinti butu, vasarnamiu, prakartėle ar bet kuo kitu, buvo pastatytas naudojant techinius piešinius; šie techniniai piešiniai būtų vadinami klasėmis, kurios buvo panaudotos projektuojant jūsų namus, butą, vasarnamį, na suprantat apie ką kalbu. &lt;br /&gt;
&lt;br /&gt;
Dar kartą, klasė mums pasako kaip sukurti objektą. Techniniais terminais tariant, ir tai yra labai svarbu, klasė nusako naudojamus duomenų atributus ir metodus objekte.&lt;br /&gt;
&lt;br /&gt;
Norint sukurti klasę, mes suprogramuojame &amp;lt;i&amp;gt;klasės apibrėžimą&amp;lt;/i&amp;gt;. Klasės apibrėžimas, tai grupė pareiškimų, kurie nusako objekto atributus ir metodus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Pirma pamoka&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is a Procedural program that performs simple math on a single number, entered by a user.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Program by Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
&lt;br /&gt;
# Procedure 1&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Get a number to maniuplate&lt;br /&gt;
        num = float(input(&amp;quot;Please enter a number to manipulate.\n&amp;quot;))&lt;br /&gt;
        # Store the result of the value, after it has been manipulated&lt;br /&gt;
        # by Procedure 2&lt;br /&gt;
        addednum = addfive(num)&lt;br /&gt;
        # Store the result of the value, after it has been manipulated&lt;br /&gt;
        # by Procedure 3&lt;br /&gt;
        multipliednum = multiply(addednum)&lt;br /&gt;
        # Send the value to Procedure 4&lt;br /&gt;
        display(multipliednum)&lt;br /&gt;
    # Deal with exceptions from non-numeric user entry&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;You must enter a valid number.\n&amp;quot;)&lt;br /&gt;
        # Reset the value of num, to clear non-numeric data.&lt;br /&gt;
        num = 0&lt;br /&gt;
        # Call main, again.&lt;br /&gt;
        main()&lt;br /&gt;
&lt;br /&gt;
# Procedure 2&lt;br /&gt;
def addfive(num):&lt;br /&gt;
    return num + 5&lt;br /&gt;
&lt;br /&gt;
# Procedure 3&lt;br /&gt;
def multiply(addednum):&lt;br /&gt;
    return addednum * 2.452&lt;br /&gt;
&lt;br /&gt;
# Procedure 4&lt;br /&gt;
def display(multi):&lt;br /&gt;
    # Display the final value&lt;br /&gt;
    print(&amp;quot;The final value is &amp;quot;,multi)&lt;br /&gt;
&lt;br /&gt;
# Call Procedure 1&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we were to enter a value of &amp;quot;5&amp;quot;, the output would be as shown below.&lt;br /&gt;
&lt;br /&gt;
 Please enter a number to manipulate.&lt;br /&gt;
 5&lt;br /&gt;
 The final value is  24.52&lt;br /&gt;
&lt;br /&gt;
If we were to enter a value of &amp;quot;g&amp;quot;, and then correct the input and enter a value of &amp;quot;8&amp;quot;, the output would be as shown below.&lt;br /&gt;
&lt;br /&gt;
 Please enter a number to manipulate.&lt;br /&gt;
 g&lt;br /&gt;
 You must enter a valid number.&lt;br /&gt;
 &lt;br /&gt;
 Please enter a number to manipulate.&lt;br /&gt;
 8&lt;br /&gt;
 The final value is  31.875999999999998&lt;br /&gt;
&lt;br /&gt;
Below, is a Class, and a program which uses that class. This Object Oriented Program does the same thing as the procedural program above. Let's cover some important OOP coding concepts before we dive into the Class and program. &lt;br /&gt;
To create a class, we use the &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; keyword. After the keyword, you type the name you want to name your class. It is common practice that the name of your class uses CapWords convention.&lt;br /&gt;
If I wanted to create a class named dirtysocks, the code would be:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class DirtySocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Class is shown first. The program which uses the class is second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexample.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Class&lt;br /&gt;
&lt;br /&gt;
class NumChange:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.__number = 0&lt;br /&gt;
&lt;br /&gt;
    def addfive(self,num):&lt;br /&gt;
        self.__number = num&lt;br /&gt;
        return self.__number + 5&lt;br /&gt;
&lt;br /&gt;
    def multiply(self,added):&lt;br /&gt;
        self.__added = added&lt;br /&gt;
        return self.__added * 2.452&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program which uses the class above, is below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexampleprog.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Program&lt;br /&gt;
&lt;br /&gt;
import oopexample&lt;br /&gt;
&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    num = float(input(&amp;quot;Please enter a number.\n&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    added = maths.addfive(num)&lt;br /&gt;
&lt;br /&gt;
    multip = maths.multiply(added)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;The manipulated value is &amp;quot;,multip)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After looking at that program, you are probably a bit lost. That's OK. Let's start off by dissecting the class.&lt;br /&gt;
The class is named &amp;quot;NumChange&amp;quot;&lt;br /&gt;
There are three methods to this class:&lt;br /&gt;
* __init__&lt;br /&gt;
* addfive&lt;br /&gt;
* multiply&lt;br /&gt;
&lt;br /&gt;
These three methods each have a similar code.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice how each method has a parameter named &amp;quot;self&amp;quot;. This parameter must be present in each method of the class. This parameter doesn't HAVE TO be called &amp;quot;self&amp;quot;, but it is standard practice, which means you should probably stick with it. This parameter is required in each method because when a method executes, it has to know which object's attributes to operate on. Even though there is only one Object, we still need to make sure the interpreter knows that we want to use the data attributes in that class. So we play it safe...and use the &amp;quot;self&amp;quot; parameter.&lt;br /&gt;
&lt;br /&gt;
Let's look at the first method. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most Classes in Python have an &amp;lt;code&amp;gt;__init__&amp;lt;/code&amp;gt; which executes automatically when an instance of a class is created in memory. (When we reference a class, an &amp;lt;i&amp;gt;instance&amp;lt;/i&amp;gt; [or object] of that class is created.) This method is commonly referred to as the &amp;lt;i&amp;gt;initializer method&amp;lt;/i&amp;gt;. When the method executes, the &amp;quot;self&amp;quot; parameter is automatically assigned to the object. This method is called the initializer method because is &amp;quot;initializes&amp;quot; the data attributes. ↵Under the __init__ method, we set the value of the &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt; attribute to 0 initially.&lt;br /&gt;
We reference the object attribute using dot notation. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.__number = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;self.__number = 0&amp;lt;/code&amp;gt; line simply means &amp;quot;&amp;quot;the value of the attribute &amp;quot;number&amp;quot;, in the object, is 0&amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Let's look at the next method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
    self.__number = num&lt;br /&gt;
    return self.__number + 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;addfive&amp;quot;. It accepts a parameter called &amp;quot;num&amp;quot;, from the program using the class. The method then assigns the value of that parameter to the &amp;quot;number&amp;quot; attribute inside the object. The method then returns the value of &amp;quot;number&amp;quot;, with 5 added to it, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Let's look at the third method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
    self.__added = added&lt;br /&gt;
    return self.__added * 2.453&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;multiply&amp;quot;. It accepts a parameter named &amp;quot;added&amp;quot;. It assigns the value of the parameter to the &amp;quot;added&amp;quot; attribute, and returns the value of the &amp;quot;added&amp;quot; attribute multiplied by 2.452, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Notice how the name of each method begins with two underscores? Let's explain that.&lt;br /&gt;
Earlier we mentioned that an object operates on data attributes inside itself using methods. Ideally, these data attributes should be able to be manipulated ONLY BY METHODS IN THE OBJECT. It is possible to have outside code manipulate data attributes. To &amp;quot;hide&amp;quot; attributes, so only methods in the object can manipulate them, you use two underscores before the object name, as we have been demonstrating. Omitting those two underscores in the attribute name, allows for the possibility of manipulation from code outside the object.&lt;br /&gt;
&lt;br /&gt;
Let's look at the program which uses the class we just dissected.&lt;br /&gt;
&lt;br /&gt;
Notice the first line of non comment code.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import oopexample&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line of code imports the class, which we have saved in a separate file (module). Classes do not have to be in a separate file, but it is almost always the case, and thus is good practice to get used to importing the module now.&lt;br /&gt;
&lt;br /&gt;
The next line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line creates an instance of the NumChange class, stored in the module named &amp;quot;oopexample&amp;quot;, and stores the instance in the variable named &amp;quot;maths&amp;quot;.&lt;br /&gt;
The syntax is:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;i&amp;gt;modulename.Classname()&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Next we define the main function.&lt;br /&gt;
Then, we get a number from the user.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;added = maths.addfive(num)&amp;lt;/code&amp;gt; sends the value of the &amp;quot;num&amp;quot; variable to the method named &amp;quot;addfive&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;added&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;multip = maths.multiply(added)&amp;lt;/code&amp;gt; sends the value of the variable &amp;quot;added&amp;quot;, to the method named &amp;quot;multiply&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;multip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line prints &amp;quot;The manipulated value is &amp;lt;value of multip&amp;gt;&amp;quot;. The last line calls the main function which executes the steps outlined above.&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Recursion |next=Intro to Imported Libraries and other Functions}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3484</id>
		<title>Python Vadovėlis/Įvadas į objektinį programavimą Python 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3484"/>
		<updated>2021-11-03T08:15:32Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: trumpas pirmos dalies papildymas&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objektinis programavimas==&lt;br /&gt;
&lt;br /&gt;
Iki šiol tu naudojai procedūrinį programavimo būdą. Tačiau, yra daug programų, kurios - parašytos naudojant objektinį programavimo būdą. Žinant abu būdus ir jų skirtumus yra labai svarbu. Informatikoje, daug svarbių kalbų kaip C++ ar Java dažnai naudoja objektinį programavimo būdą.&lt;br /&gt;
&lt;br /&gt;
Pradedantiesiems ir mokiniams neturintiems programavimo žinių objektinis programavimas dažnai gali atrodyti painus ir tai yra visiškai normalu. Nesijausk blogai jei iš pradžių suprasti nesiseka. Jei šis skyrius tau to suprasti nepadės, yra ir daugiau gerų šaltinių, kurie tau padės atsakyti į visus klausimus.&lt;br /&gt;
&lt;br /&gt;
Šis skyrius yra padalintas į keletą pamokų. Kiekviena pamoka yra skirta paaiškinti skirtingas objektinio programavimo dalis. &amp;lt;b&amp;gt;LABAI SVARBU&amp;lt;/b&amp;gt; suprasti visas objektinio programavimo dalis. Prieš kiekvieną pamoką, bus parašyta įžanga, kuri paaiškins pagrindines idėjas, sąvokas ir kitas objektinio programavimo sritis, kurios yra reikalingos suprasti kiekvieną pamoką.&lt;br /&gt;
&lt;br /&gt;
==Įžanga==&lt;br /&gt;
&lt;br /&gt;
Galvokite apie procedūrą kaip apie funkciją. Funkcija turi konkrečią paskyrtį ir jų gali būti įvairių: rikti įvestis, atlikti matematinius skaičiavimus, atvaizduoti ar manipuliuoti duomenis. Typically, procedures use data which is separate from code for manipulation. This data is often passed between procedures. When a program becomes much larger and complex, this can cause problems.&lt;br /&gt;
Pavyzdžiui, suprogramavai programą, kuri kintamuosiuose išsaugo produkto duomenis. Kai klientas paprašo informacijos apie produktą, kintamieji, kurie turi visą informaciją, yra perduodami įvairioms funkcijoms su skirtingomis paskirtimis. Laikui bėgant ir saugant vis daugiau duomenų apie turimus produktus, tu sugalvoji išsaugoti turimą informaciją sąrašuose ar žodynuose. Norint, jog tavo programa veiktų, tu dabar turi redaguoti kiekvieną funkciją, kuri naudojo tuos kintamuosius, taip, kad dabar ji galėtų priimti ir manipuliuoti sąrašus ar žodynus. Imagine the time that would take for a program that was hundreds of megabytes, and hundreds of files in size! It would drive you insane! not to mention, errors in your code, are almost guaranteed, just because of the large volume of work and possibilities to make a typo or other error. This is less than optimal.&lt;br /&gt;
Procedūrinis programavimas yra paremtas procedūromis ar funkcijomis. Objektinis programavimas yra paremtas objektais. Ar prisimeni kaip procedūrinė programa atskyrė duomenis nuo kodo? Ar prisimeni tą programą, kuri turėjo šimtus failų ir norint kažką pakeisti reikėdavo ilgai narpstytis? &lt;br /&gt;
Galvokite apie &amp;lt;i&amp;gt;objektą&amp;lt;/i&amp;gt; kaip apie minėtų failų ir duomenų &amp;quot;kombinaciją&amp;quot; į vieną esybę. Technine prasme, objektas yra esybė, kuri savyje turi duomenis ir procedūras (kodą, funkcijas, t.t.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Data inside an object is called a &amp;lt;i&amp;gt;data attribute&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Functions, or procedures inside the object are called &amp;lt;i&amp;gt;methods&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Think of &amp;lt;b&amp;gt;data attributes&amp;lt;/b&amp;gt; as variables. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Think of &amp;lt;b&amp;gt;methods&amp;lt;/b&amp;gt; as functions or procedures. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Let's look at a simple, everyday example. The light and light switch in your bedroom.&lt;br /&gt;
The data attributes would be as follows.&lt;br /&gt;
&lt;br /&gt;
* light_on (True or False)&lt;br /&gt;
* switch_position (Up or Down)&lt;br /&gt;
* electricity_flow (True or False)&lt;br /&gt;
&lt;br /&gt;
The methods would be as follows.&lt;br /&gt;
&lt;br /&gt;
* move_switch&lt;br /&gt;
* change_electricity_flow&lt;br /&gt;
&lt;br /&gt;
The data attributes may or may not be visible. For example, you cannot directly see the electricity flowing to the light. You only know there is electricity, because the light is on. However, you can see the position of the switch (switch_position), and you can see if the light is on or off (light_on). Some methods are &amp;lt;i&amp;gt;private&amp;lt;/i&amp;gt;. This means that you cannot directly change them. For example, unless you cut the wires in your light fixture (please don't do that, and for the sake of this example, assume that you don't know the wires exist), you cannot change the flow of electricity directly. You also cannot directly change if the light is on or off (and no, you can't unscrew the bulb! work with me here!). However, you can indirectly change these attributes by using the &amp;lt;i&amp;gt;methods&amp;lt;/i&amp;gt; in the object. If you don't pay your bill, the &amp;lt;code&amp;gt;change_electricity_flow&amp;lt;/code&amp;gt; method will change the value of the &amp;lt;code&amp;gt;electricity_flow&amp;lt;/code&amp;gt; attribute to FALSE. If you flip the switch, the &amp;lt;code&amp;gt;move_switch&amp;lt;/code&amp;gt; method changes the value of the &amp;lt;code&amp;gt;light_on&amp;lt;/code&amp;gt; attribute.&lt;br /&gt;
&lt;br /&gt;
By now you're probably thinking, &amp;quot;What does this have to do with Python?&amp;quot; or, &amp;quot;I understand, but how do I code an Object?&amp;quot; Well, we are almost to that point! One more concept must be explained before we can dive into code.&lt;br /&gt;
&lt;br /&gt;
In Python, an object's data attributes and methods are specified by a &amp;lt;b&amp;gt;class&amp;lt;/b&amp;gt;. Think of a class as a blueprint to an object. For example, your home - the object that you live in - you can also call it your pad, bungalow, crib, or whatever, was built based on a set of blueprints; these blueprints would be considered the class used to design your home, pad, crib, ahem, you get the idea.&lt;br /&gt;
&lt;br /&gt;
Again, a class tells us how to make an object. In technical terms, and this is important here, a class defines the data attributes and methods inside an object.&lt;br /&gt;
&lt;br /&gt;
To create a class, we code a &amp;lt;i&amp;gt;class definition&amp;lt;/i&amp;gt;. A class definition is a group of statements which define an object's data attributes and methods. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Lesson One&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is a Procedural program that performs simple math on a single number, entered by a user.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Program by Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
&lt;br /&gt;
# Procedure 1&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Get a number to maniuplate&lt;br /&gt;
        num = float(input(&amp;quot;Please enter a number to manipulate.\n&amp;quot;))&lt;br /&gt;
        # Store the result of the value, after it has been manipulated&lt;br /&gt;
        # by Procedure 2&lt;br /&gt;
        addednum = addfive(num)&lt;br /&gt;
        # Store the result of the value, after it has been manipulated&lt;br /&gt;
        # by Procedure 3&lt;br /&gt;
        multipliednum = multiply(addednum)&lt;br /&gt;
        # Send the value to Procedure 4&lt;br /&gt;
        display(multipliednum)&lt;br /&gt;
    # Deal with exceptions from non-numeric user entry&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;You must enter a valid number.\n&amp;quot;)&lt;br /&gt;
        # Reset the value of num, to clear non-numeric data.&lt;br /&gt;
        num = 0&lt;br /&gt;
        # Call main, again.&lt;br /&gt;
        main()&lt;br /&gt;
&lt;br /&gt;
# Procedure 2&lt;br /&gt;
def addfive(num):&lt;br /&gt;
    return num + 5&lt;br /&gt;
&lt;br /&gt;
# Procedure 3&lt;br /&gt;
def multiply(addednum):&lt;br /&gt;
    return addednum * 2.452&lt;br /&gt;
&lt;br /&gt;
# Procedure 4&lt;br /&gt;
def display(multi):&lt;br /&gt;
    # Display the final value&lt;br /&gt;
    print(&amp;quot;The final value is &amp;quot;,multi)&lt;br /&gt;
&lt;br /&gt;
# Call Procedure 1&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we were to enter a value of &amp;quot;5&amp;quot;, the output would be as shown below.&lt;br /&gt;
&lt;br /&gt;
 Please enter a number to manipulate.&lt;br /&gt;
 5&lt;br /&gt;
 The final value is  24.52&lt;br /&gt;
&lt;br /&gt;
If we were to enter a value of &amp;quot;g&amp;quot;, and then correct the input and enter a value of &amp;quot;8&amp;quot;, the output would be as shown below.&lt;br /&gt;
&lt;br /&gt;
 Please enter a number to manipulate.&lt;br /&gt;
 g&lt;br /&gt;
 You must enter a valid number.&lt;br /&gt;
 &lt;br /&gt;
 Please enter a number to manipulate.&lt;br /&gt;
 8&lt;br /&gt;
 The final value is  31.875999999999998&lt;br /&gt;
&lt;br /&gt;
Below, is a Class, and a program which uses that class. This Object Oriented Program does the same thing as the procedural program above. Let's cover some important OOP coding concepts before we dive into the Class and program. &lt;br /&gt;
To create a class, we use the &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; keyword. After the keyword, you type the name you want to name your class. It is common practice that the name of your class uses CapWords convention.&lt;br /&gt;
If I wanted to create a class named dirtysocks, the code would be:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class DirtySocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Class is shown first. The program which uses the class is second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexample.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Class&lt;br /&gt;
&lt;br /&gt;
class NumChange:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.__number = 0&lt;br /&gt;
&lt;br /&gt;
    def addfive(self,num):&lt;br /&gt;
        self.__number = num&lt;br /&gt;
        return self.__number + 5&lt;br /&gt;
&lt;br /&gt;
    def multiply(self,added):&lt;br /&gt;
        self.__added = added&lt;br /&gt;
        return self.__added * 2.452&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program which uses the class above, is below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexampleprog.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Program&lt;br /&gt;
&lt;br /&gt;
import oopexample&lt;br /&gt;
&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    num = float(input(&amp;quot;Please enter a number.\n&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    added = maths.addfive(num)&lt;br /&gt;
&lt;br /&gt;
    multip = maths.multiply(added)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;The manipulated value is &amp;quot;,multip)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After looking at that program, you are probably a bit lost. That's OK. Let's start off by dissecting the class.&lt;br /&gt;
The class is named &amp;quot;NumChange&amp;quot;&lt;br /&gt;
There are three methods to this class:&lt;br /&gt;
* __init__&lt;br /&gt;
* addfive&lt;br /&gt;
* multiply&lt;br /&gt;
&lt;br /&gt;
These three methods each have a similar code.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice how each method has a parameter named &amp;quot;self&amp;quot;. This parameter must be present in each method of the class. This parameter doesn't HAVE TO be called &amp;quot;self&amp;quot;, but it is standard practice, which means you should probably stick with it. This parameter is required in each method because when a method executes, it has to know which object's attributes to operate on. Even though there is only one Object, we still need to make sure the interpreter knows that we want to use the data attributes in that class. So we play it safe...and use the &amp;quot;self&amp;quot; parameter.&lt;br /&gt;
&lt;br /&gt;
Let's look at the first method. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most Classes in Python have an &amp;lt;code&amp;gt;__init__&amp;lt;/code&amp;gt; which executes automatically when an instance of a class is created in memory. (When we reference a class, an &amp;lt;i&amp;gt;instance&amp;lt;/i&amp;gt; [or object] of that class is created.) This method is commonly referred to as the &amp;lt;i&amp;gt;initializer method&amp;lt;/i&amp;gt;. When the method executes, the &amp;quot;self&amp;quot; parameter is automatically assigned to the object. This method is called the initializer method because is &amp;quot;initializes&amp;quot; the data attributes. ↵Under the __init__ method, we set the value of the &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt; attribute to 0 initially.&lt;br /&gt;
We reference the object attribute using dot notation. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.__number = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;self.__number = 0&amp;lt;/code&amp;gt; line simply means &amp;quot;&amp;quot;the value of the attribute &amp;quot;number&amp;quot;, in the object, is 0&amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Let's look at the next method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
    self.__number = num&lt;br /&gt;
    return self.__number + 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;addfive&amp;quot;. It accepts a parameter called &amp;quot;num&amp;quot;, from the program using the class. The method then assigns the value of that parameter to the &amp;quot;number&amp;quot; attribute inside the object. The method then returns the value of &amp;quot;number&amp;quot;, with 5 added to it, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Let's look at the third method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
    self.__added = added&lt;br /&gt;
    return self.__added * 2.453&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;multiply&amp;quot;. It accepts a parameter named &amp;quot;added&amp;quot;. It assigns the value of the parameter to the &amp;quot;added&amp;quot; attribute, and returns the value of the &amp;quot;added&amp;quot; attribute multiplied by 2.452, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Notice how the name of each method begins with two underscores? Let's explain that.&lt;br /&gt;
Earlier we mentioned that an object operates on data attributes inside itself using methods. Ideally, these data attributes should be able to be manipulated ONLY BY METHODS IN THE OBJECT. It is possible to have outside code manipulate data attributes. To &amp;quot;hide&amp;quot; attributes, so only methods in the object can manipulate them, you use two underscores before the object name, as we have been demonstrating. Omitting those two underscores in the attribute name, allows for the possibility of manipulation from code outside the object.&lt;br /&gt;
&lt;br /&gt;
Let's look at the program which uses the class we just dissected.&lt;br /&gt;
&lt;br /&gt;
Notice the first line of non comment code.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import oopexample&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line of code imports the class, which we have saved in a separate file (module). Classes do not have to be in a separate file, but it is almost always the case, and thus is good practice to get used to importing the module now.&lt;br /&gt;
&lt;br /&gt;
The next line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line creates an instance of the NumChange class, stored in the module named &amp;quot;oopexample&amp;quot;, and stores the instance in the variable named &amp;quot;maths&amp;quot;.&lt;br /&gt;
The syntax is:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;i&amp;gt;modulename.Classname()&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Next we define the main function.&lt;br /&gt;
Then, we get a number from the user.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;added = maths.addfive(num)&amp;lt;/code&amp;gt; sends the value of the &amp;quot;num&amp;quot; variable to the method named &amp;quot;addfive&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;added&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;multip = maths.multiply(added)&amp;lt;/code&amp;gt; sends the value of the variable &amp;quot;added&amp;quot;, to the method named &amp;quot;multiply&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;multip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line prints &amp;quot;The manipulated value is &amp;lt;value of multip&amp;gt;&amp;quot;. The last line calls the main function which executes the steps outlined above.&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Recursion |next=Intro to Imported Libraries and other Functions}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3474</id>
		<title>Python Vadovėlis/Įvadas į objektinį programavimą Python 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3474"/>
		<updated>2021-10-22T14:16:23Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: Pirma dalis įžangos su nebaigtais tarpiniais sakiniais&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objektinis programavimas==&lt;br /&gt;
&lt;br /&gt;
Iki šiol tu naudojai procedūrinį programavimo būdą. Tačiau, yra daug programų, kurios - parašytos naudojant objektinį programavimo būdą. Žinant abu būdus ir jų skirtumus yra labai svarbu. Informatikoje, daug svarbių kalbų kaip C++ ar Java dažnai naudoja objektinį programavimo būdą.&lt;br /&gt;
&lt;br /&gt;
Pradedantiesiems ir mokiniams neturintiems programavimo žinių objektinis programavimas dažnai gali atrodyti painus ir tai yra visiškai normalu. Nesijausk blogai jei iš pradžių suprasti nesiseka. Jei šis skyrius tau to suprasti nepadės, yra ir daugiau gerų šaltinių, kurie tau padės atsakyti į visus klausimus.&lt;br /&gt;
&lt;br /&gt;
Šis skyrius yra padalintas į keletą pamokų. Kiekviena pamoka yra skirta paaiškinti skirtingas objektinio programavimo dalis. &amp;lt;b&amp;gt;LABAI SVARBU&amp;lt;/b&amp;gt; suprasti visas objektinio programavimo dalis. Prieš kiekvieną pamoką, bus parašyta įžanga, kuri paaiškins pagrindines idėjas, sąvokas ir kitas objektinio programavimo sritis, kurios yra reikalingos suprasti kiekvieną pamoką.&lt;br /&gt;
&lt;br /&gt;
==Įžanga==&lt;br /&gt;
&lt;br /&gt;
Galvokite apie procedūrą kaip apie funkciją. Funkcija turi konkrečią paskyrtį ir jų gali būti įvairių: rikti įvestis, atlikti matematinius skaičiavimus, atvaizduoti ar manipuliuoti duomenis. Typically, procedures use data which is separate from code for manipulation. This data is often passed between procedures. When a program becomes much larger and complex, this can cause problems.&lt;br /&gt;
Pavyzdžiui, suprogramavai programą, kuri kintamuosiuose išsaugo produkto duomenis. Kai klientas paprašo informacijos apie produktą, kintamieji, kurie turi visą informaciją, yra perduodami įvairioms funkcijoms su skirtingomis paskirtimis. Laikui bėgant ir saugant vis daugiau duomenų apie turimus produktus, tu sugalvoji išsaugoti turimą informaciją sąrašuose ar žodynuose. Norint, jog tavo programa veiktų, tu dabar turi redaguoti kiekvieną funkciją, kuri naudojo tuos kintamuosius, taip, kad dabar ji galėtų priimti ir panipuliuoti sąrašus ar žodynus. Imagine the time that would take for a program that was hundreds of megabytes, and hundreds of files in size! It would drive you insane! not to mention, errors in your code, are almost guaranteed, just because of the large volume of work and possibilities to make a typo or other error. This is less than optimal.&lt;br /&gt;
Procedūrinis programavimas yra paremtas procedūromis ar funkcijomis. Objektinis programavimas yra paremtas objektais. Ar prisimeni kaip procedūrinė programa atskyrė duomenis nuo kodo? Ar prisimeni tą programą, kuri turėjo šimtus failų ir norint kažką pakeisti reikėdavo ilgai narpstytis? &lt;br /&gt;
Well, think of an &amp;lt;i&amp;gt;object&amp;lt;/i&amp;gt; as a sort of &amp;quot;combination&amp;quot; of those files and data into one &amp;quot;being&amp;quot;. In a technical sense, an Object is an entity which contains data, AND procedures (code, functions, etc.). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Data inside an object is called a &amp;lt;i&amp;gt;data attribute&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Functions, or procedures inside the object are called &amp;lt;i&amp;gt;methods&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Think of &amp;lt;b&amp;gt;data attributes&amp;lt;/b&amp;gt; as variables. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Think of &amp;lt;b&amp;gt;methods&amp;lt;/b&amp;gt; as functions or procedures. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Let's look at a simple, everyday example. The light and light switch in your bedroom.&lt;br /&gt;
The data attributes would be as follows.&lt;br /&gt;
&lt;br /&gt;
* light_on (True or False)&lt;br /&gt;
* switch_position (Up or Down)&lt;br /&gt;
* electricity_flow (True or False)&lt;br /&gt;
&lt;br /&gt;
The methods would be as follows.&lt;br /&gt;
&lt;br /&gt;
* move_switch&lt;br /&gt;
* change_electricity_flow&lt;br /&gt;
&lt;br /&gt;
The data attributes may or may not be visible. For example, you cannot directly see the electricity flowing to the light. You only know there is electricity, because the light is on. However, you can see the position of the switch (switch_position), and you can see if the light is on or off (light_on). Some methods are &amp;lt;i&amp;gt;private&amp;lt;/i&amp;gt;. This means that you cannot directly change them. For example, unless you cut the wires in your light fixture (please don't do that, and for the sake of this example, assume that you don't know the wires exist), you cannot change the flow of electricity directly. You also cannot directly change if the light is on or off (and no, you can't unscrew the bulb! work with me here!). However, you can indirectly change these attributes by using the &amp;lt;i&amp;gt;methods&amp;lt;/i&amp;gt; in the object. If you don't pay your bill, the &amp;lt;code&amp;gt;change_electricity_flow&amp;lt;/code&amp;gt; method will change the value of the &amp;lt;code&amp;gt;electricity_flow&amp;lt;/code&amp;gt; attribute to FALSE. If you flip the switch, the &amp;lt;code&amp;gt;move_switch&amp;lt;/code&amp;gt; method changes the value of the &amp;lt;code&amp;gt;light_on&amp;lt;/code&amp;gt; attribute.&lt;br /&gt;
&lt;br /&gt;
By now you're probably thinking, &amp;quot;What does this have to do with Python?&amp;quot; or, &amp;quot;I understand, but how do I code an Object?&amp;quot; Well, we are almost to that point! One more concept must be explained before we can dive into code.&lt;br /&gt;
&lt;br /&gt;
In Python, an object's data attributes and methods are specified by a &amp;lt;b&amp;gt;class&amp;lt;/b&amp;gt;. Think of a class as a blueprint to an object. For example, your home - the object that you live in - you can also call it your pad, bungalow, crib, or whatever, was built based on a set of blueprints; these blueprints would be considered the class used to design your home, pad, crib, ahem, you get the idea.&lt;br /&gt;
&lt;br /&gt;
Again, a class tells us how to make an object. In technical terms, and this is important here, a class defines the data attributes and methods inside an object.&lt;br /&gt;
&lt;br /&gt;
To create a class, we code a &amp;lt;i&amp;gt;class definition&amp;lt;/i&amp;gt;. A class definition is a group of statements which define an object's data attributes and methods. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Lesson One&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is a Procedural program that performs simple math on a single number, entered by a user.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Program by Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
&lt;br /&gt;
# Procedure 1&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Get a number to maniuplate&lt;br /&gt;
        num = float(input(&amp;quot;Please enter a number to manipulate.\n&amp;quot;))&lt;br /&gt;
        # Store the result of the value, after it has been manipulated&lt;br /&gt;
        # by Procedure 2&lt;br /&gt;
        addednum = addfive(num)&lt;br /&gt;
        # Store the result of the value, after it has been manipulated&lt;br /&gt;
        # by Procedure 3&lt;br /&gt;
        multipliednum = multiply(addednum)&lt;br /&gt;
        # Send the value to Procedure 4&lt;br /&gt;
        display(multipliednum)&lt;br /&gt;
    # Deal with exceptions from non-numeric user entry&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;You must enter a valid number.\n&amp;quot;)&lt;br /&gt;
        # Reset the value of num, to clear non-numeric data.&lt;br /&gt;
        num = 0&lt;br /&gt;
        # Call main, again.&lt;br /&gt;
        main()&lt;br /&gt;
&lt;br /&gt;
# Procedure 2&lt;br /&gt;
def addfive(num):&lt;br /&gt;
    return num + 5&lt;br /&gt;
&lt;br /&gt;
# Procedure 3&lt;br /&gt;
def multiply(addednum):&lt;br /&gt;
    return addednum * 2.452&lt;br /&gt;
&lt;br /&gt;
# Procedure 4&lt;br /&gt;
def display(multi):&lt;br /&gt;
    # Display the final value&lt;br /&gt;
    print(&amp;quot;The final value is &amp;quot;,multi)&lt;br /&gt;
&lt;br /&gt;
# Call Procedure 1&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we were to enter a value of &amp;quot;5&amp;quot;, the output would be as shown below.&lt;br /&gt;
&lt;br /&gt;
 Please enter a number to manipulate.&lt;br /&gt;
 5&lt;br /&gt;
 The final value is  24.52&lt;br /&gt;
&lt;br /&gt;
If we were to enter a value of &amp;quot;g&amp;quot;, and then correct the input and enter a value of &amp;quot;8&amp;quot;, the output would be as shown below.&lt;br /&gt;
&lt;br /&gt;
 Please enter a number to manipulate.&lt;br /&gt;
 g&lt;br /&gt;
 You must enter a valid number.&lt;br /&gt;
 &lt;br /&gt;
 Please enter a number to manipulate.&lt;br /&gt;
 8&lt;br /&gt;
 The final value is  31.875999999999998&lt;br /&gt;
&lt;br /&gt;
Below, is a Class, and a program which uses that class. This Object Oriented Program does the same thing as the procedural program above. Let's cover some important OOP coding concepts before we dive into the Class and program. &lt;br /&gt;
To create a class, we use the &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; keyword. After the keyword, you type the name you want to name your class. It is common practice that the name of your class uses CapWords convention.&lt;br /&gt;
If I wanted to create a class named dirtysocks, the code would be:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class DirtySocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Class is shown first. The program which uses the class is second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexample.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Class&lt;br /&gt;
&lt;br /&gt;
class NumChange:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.__number = 0&lt;br /&gt;
&lt;br /&gt;
    def addfive(self,num):&lt;br /&gt;
        self.__number = num&lt;br /&gt;
        return self.__number + 5&lt;br /&gt;
&lt;br /&gt;
    def multiply(self,added):&lt;br /&gt;
        self.__added = added&lt;br /&gt;
        return self.__added * 2.452&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program which uses the class above, is below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexampleprog.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Program&lt;br /&gt;
&lt;br /&gt;
import oopexample&lt;br /&gt;
&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    num = float(input(&amp;quot;Please enter a number.\n&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    added = maths.addfive(num)&lt;br /&gt;
&lt;br /&gt;
    multip = maths.multiply(added)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;The manipulated value is &amp;quot;,multip)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After looking at that program, you are probably a bit lost. That's OK. Let's start off by dissecting the class.&lt;br /&gt;
The class is named &amp;quot;NumChange&amp;quot;&lt;br /&gt;
There are three methods to this class:&lt;br /&gt;
* __init__&lt;br /&gt;
* addfive&lt;br /&gt;
* multiply&lt;br /&gt;
&lt;br /&gt;
These three methods each have a similar code.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice how each method has a parameter named &amp;quot;self&amp;quot;. This parameter must be present in each method of the class. This parameter doesn't HAVE TO be called &amp;quot;self&amp;quot;, but it is standard practice, which means you should probably stick with it. This parameter is required in each method because when a method executes, it has to know which object's attributes to operate on. Even though there is only one Object, we still need to make sure the interpreter knows that we want to use the data attributes in that class. So we play it safe...and use the &amp;quot;self&amp;quot; parameter.&lt;br /&gt;
&lt;br /&gt;
Let's look at the first method. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most Classes in Python have an &amp;lt;code&amp;gt;__init__&amp;lt;/code&amp;gt; which executes automatically when an instance of a class is created in memory. (When we reference a class, an &amp;lt;i&amp;gt;instance&amp;lt;/i&amp;gt; [or object] of that class is created.) This method is commonly referred to as the &amp;lt;i&amp;gt;initializer method&amp;lt;/i&amp;gt;. When the method executes, the &amp;quot;self&amp;quot; parameter is automatically assigned to the object. This method is called the initializer method because is &amp;quot;initializes&amp;quot; the data attributes. ↵Under the __init__ method, we set the value of the &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt; attribute to 0 initially.&lt;br /&gt;
We reference the object attribute using dot notation. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.__number = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;self.__number = 0&amp;lt;/code&amp;gt; line simply means &amp;quot;&amp;quot;the value of the attribute &amp;quot;number&amp;quot;, in the object, is 0&amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Let's look at the next method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
    self.__number = num&lt;br /&gt;
    return self.__number + 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;addfive&amp;quot;. It accepts a parameter called &amp;quot;num&amp;quot;, from the program using the class. The method then assigns the value of that parameter to the &amp;quot;number&amp;quot; attribute inside the object. The method then returns the value of &amp;quot;number&amp;quot;, with 5 added to it, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Let's look at the third method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
    self.__added = added&lt;br /&gt;
    return self.__added * 2.453&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;multiply&amp;quot;. It accepts a parameter named &amp;quot;added&amp;quot;. It assigns the value of the parameter to the &amp;quot;added&amp;quot; attribute, and returns the value of the &amp;quot;added&amp;quot; attribute multiplied by 2.452, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Notice how the name of each method begins with two underscores? Let's explain that.&lt;br /&gt;
Earlier we mentioned that an object operates on data attributes inside itself using methods. Ideally, these data attributes should be able to be manipulated ONLY BY METHODS IN THE OBJECT. It is possible to have outside code manipulate data attributes. To &amp;quot;hide&amp;quot; attributes, so only methods in the object can manipulate them, you use two underscores before the object name, as we have been demonstrating. Omitting those two underscores in the attribute name, allows for the possibility of manipulation from code outside the object.&lt;br /&gt;
&lt;br /&gt;
Let's look at the program which uses the class we just dissected.&lt;br /&gt;
&lt;br /&gt;
Notice the first line of non comment code.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import oopexample&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line of code imports the class, which we have saved in a separate file (module). Classes do not have to be in a separate file, but it is almost always the case, and thus is good practice to get used to importing the module now.&lt;br /&gt;
&lt;br /&gt;
The next line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line creates an instance of the NumChange class, stored in the module named &amp;quot;oopexample&amp;quot;, and stores the instance in the variable named &amp;quot;maths&amp;quot;.&lt;br /&gt;
The syntax is:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;i&amp;gt;modulename.Classname()&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Next we define the main function.&lt;br /&gt;
Then, we get a number from the user.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;added = maths.addfive(num)&amp;lt;/code&amp;gt; sends the value of the &amp;quot;num&amp;quot; variable to the method named &amp;quot;addfive&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;added&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;multip = maths.multiply(added)&amp;lt;/code&amp;gt; sends the value of the variable &amp;quot;added&amp;quot;, to the method named &amp;quot;multiply&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;multip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line prints &amp;quot;The manipulated value is &amp;lt;value of multip&amp;gt;&amp;quot;. The last line calls the main function which executes the steps outlined above.&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Recursion |next=Intro to Imported Libraries and other Functions}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3473</id>
		<title>Python Vadovėlis/Įvadas į objektinį programavimą Python 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3473"/>
		<updated>2021-10-21T19:26:46Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: /* Objektinis programavimas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objektinis programavimas==&lt;br /&gt;
&lt;br /&gt;
Iki šiol tu naudojai procedūrinį programavimo būdą. Tačiau, yra daug programų, kurios - parašytos naudojant objektinį programavimo būdą. Žinant abu būdus ir jų skirtumus yra labai svarbu. Informatikoje, daug svarbių kalbų kaip C++ ar Java dažnai naudoja objektinį programavimo būdą.&lt;br /&gt;
&lt;br /&gt;
Pradedantiesiems ir mokiniams neturintiems programavimo žinių objektinis programavimas dažnai gali atrodyti painus ir tai yra visiškai normalu. Nesijausk blogai jei iš pradžių suprasti nesiseka. Jei šis skyrius tau to suprasti nepadės, yra ir daugiau gerų šaltinių, kurie tau padės atsakyti į visus klausimus.&lt;br /&gt;
&lt;br /&gt;
Šis skyrius yra padalintas į keletą pamokų. Kiekviena pamoka yra skirta paaiškinti skirtingas objektinio programavimo dalis. &amp;lt;b&amp;gt;LABAI SVARBU&amp;lt;/b&amp;gt; suprasti visas objektinio programavimo dalis. Prieš kiekvieną pamoką, bus parašyta įžanga, kuri paaiškins pagrindines idėjas, sąvokas ir kitas objektinio programavimo sritis, kurios yra reikalingos suprasti kiekvieną pamoką.&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Think of a procedure as a function. A function has a specific purpose. That purpose may be gathering input, performing mathematical calculations, displaying data, or manipulating data to, from, or in, a file. Typically, procedures use data which is separate from code for manipulation. This data is often passed between procedures. When a program becomes much larger and complex, this can cause problems.&lt;br /&gt;
For example, you have designed a program which stores information about a product in variables. When a customer requests information on a product, these variables are passed to different functions for different purposes. Later on, as more data is stored on these products, you decide to store the information in a list or dictionary. In order for your program to function, you must now edit each function that accepted variables, to now accept and manipulate a list or dictionary. Imagine the time that would take for a program that was hundreds of megabytes, and hundreds of files in size! It would drive you insane! not to mention, errors in your code, are almost guaranteed, just because of the large volume of work and possibilities to make a typo or other error. This is less than optimal.&lt;br /&gt;
Procedural programming is centered on procedures or functions. But, OOP is centered on creating Objects. Remember how a procedural program has separated data and code? Remember how that huge program was hundreds of files and would take FOREVER to edit? Well, think of an &amp;lt;i&amp;gt;object&amp;lt;/i&amp;gt; as a sort of &amp;quot;combination&amp;quot; of those files and data into one &amp;quot;being&amp;quot;. In a technical sense, an Object is an entity which contains data, AND procedures (code, functions, etc.). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Data inside an object is called a &amp;lt;i&amp;gt;data attribute&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Functions, or procedures inside the object are called &amp;lt;i&amp;gt;methods&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Think of &amp;lt;b&amp;gt;data attributes&amp;lt;/b&amp;gt; as variables. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Think of &amp;lt;b&amp;gt;methods&amp;lt;/b&amp;gt; as functions or procedures. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Let's look at a simple, everyday example. The light and light switch in your bedroom.&lt;br /&gt;
The data attributes would be as follows.&lt;br /&gt;
&lt;br /&gt;
* light_on (True or False)&lt;br /&gt;
* switch_position (Up or Down)&lt;br /&gt;
* electricity_flow (True or False)&lt;br /&gt;
&lt;br /&gt;
The methods would be as follows.&lt;br /&gt;
&lt;br /&gt;
* move_switch&lt;br /&gt;
* change_electricity_flow&lt;br /&gt;
&lt;br /&gt;
The data attributes may or may not be visible. For example, you cannot directly see the electricity flowing to the light. You only know there is electricity, because the light is on. However, you can see the position of the switch (switch_position), and you can see if the light is on or off (light_on). Some methods are &amp;lt;i&amp;gt;private&amp;lt;/i&amp;gt;. This means that you cannot directly change them. For example, unless you cut the wires in your light fixture (please don't do that, and for the sake of this example, assume that you don't know the wires exist), you cannot change the flow of electricity directly. You also cannot directly change if the light is on or off (and no, you can't unscrew the bulb! work with me here!). However, you can indirectly change these attributes by using the &amp;lt;i&amp;gt;methods&amp;lt;/i&amp;gt; in the object. If you don't pay your bill, the &amp;lt;code&amp;gt;change_electricity_flow&amp;lt;/code&amp;gt; method will change the value of the &amp;lt;code&amp;gt;electricity_flow&amp;lt;/code&amp;gt; attribute to FALSE. If you flip the switch, the &amp;lt;code&amp;gt;move_switch&amp;lt;/code&amp;gt; method changes the value of the &amp;lt;code&amp;gt;light_on&amp;lt;/code&amp;gt; attribute.&lt;br /&gt;
&lt;br /&gt;
By now you're probably thinking, &amp;quot;What does this have to do with Python?&amp;quot; or, &amp;quot;I understand, but how do I code an Object?&amp;quot; Well, we are almost to that point! One more concept must be explained before we can dive into code.&lt;br /&gt;
&lt;br /&gt;
In Python, an object's data attributes and methods are specified by a &amp;lt;b&amp;gt;class&amp;lt;/b&amp;gt;. Think of a class as a blueprint to an object. For example, your home - the object that you live in - you can also call it your pad, bungalow, crib, or whatever, was built based on a set of blueprints; these blueprints would be considered the class used to design your home, pad, crib, ahem, you get the idea.&lt;br /&gt;
&lt;br /&gt;
Again, a class tells us how to make an object. In technical terms, and this is important here, a class defines the data attributes and methods inside an object.&lt;br /&gt;
&lt;br /&gt;
To create a class, we code a &amp;lt;i&amp;gt;class definition&amp;lt;/i&amp;gt;. A class definition is a group of statements which define an object's data attributes and methods. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Lesson One&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is a Procedural program that performs simple math on a single number, entered by a user.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Program by Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
&lt;br /&gt;
# Procedure 1&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Get a number to maniuplate&lt;br /&gt;
        num = float(input(&amp;quot;Please enter a number to manipulate.\n&amp;quot;))&lt;br /&gt;
        # Store the result of the value, after it has been manipulated&lt;br /&gt;
        # by Procedure 2&lt;br /&gt;
        addednum = addfive(num)&lt;br /&gt;
        # Store the result of the value, after it has been manipulated&lt;br /&gt;
        # by Procedure 3&lt;br /&gt;
        multipliednum = multiply(addednum)&lt;br /&gt;
        # Send the value to Procedure 4&lt;br /&gt;
        display(multipliednum)&lt;br /&gt;
    # Deal with exceptions from non-numeric user entry&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;You must enter a valid number.\n&amp;quot;)&lt;br /&gt;
        # Reset the value of num, to clear non-numeric data.&lt;br /&gt;
        num = 0&lt;br /&gt;
        # Call main, again.&lt;br /&gt;
        main()&lt;br /&gt;
&lt;br /&gt;
# Procedure 2&lt;br /&gt;
def addfive(num):&lt;br /&gt;
    return num + 5&lt;br /&gt;
&lt;br /&gt;
# Procedure 3&lt;br /&gt;
def multiply(addednum):&lt;br /&gt;
    return addednum * 2.452&lt;br /&gt;
&lt;br /&gt;
# Procedure 4&lt;br /&gt;
def display(multi):&lt;br /&gt;
    # Display the final value&lt;br /&gt;
    print(&amp;quot;The final value is &amp;quot;,multi)&lt;br /&gt;
&lt;br /&gt;
# Call Procedure 1&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we were to enter a value of &amp;quot;5&amp;quot;, the output would be as shown below.&lt;br /&gt;
&lt;br /&gt;
 Please enter a number to manipulate.&lt;br /&gt;
 5&lt;br /&gt;
 The final value is  24.52&lt;br /&gt;
&lt;br /&gt;
If we were to enter a value of &amp;quot;g&amp;quot;, and then correct the input and enter a value of &amp;quot;8&amp;quot;, the output would be as shown below.&lt;br /&gt;
&lt;br /&gt;
 Please enter a number to manipulate.&lt;br /&gt;
 g&lt;br /&gt;
 You must enter a valid number.&lt;br /&gt;
 &lt;br /&gt;
 Please enter a number to manipulate.&lt;br /&gt;
 8&lt;br /&gt;
 The final value is  31.875999999999998&lt;br /&gt;
&lt;br /&gt;
Below, is a Class, and a program which uses that class. This Object Oriented Program does the same thing as the procedural program above. Let's cover some important OOP coding concepts before we dive into the Class and program. &lt;br /&gt;
To create a class, we use the &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; keyword. After the keyword, you type the name you want to name your class. It is common practice that the name of your class uses CapWords convention.&lt;br /&gt;
If I wanted to create a class named dirtysocks, the code would be:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class DirtySocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Class is shown first. The program which uses the class is second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexample.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Class&lt;br /&gt;
&lt;br /&gt;
class NumChange:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.__number = 0&lt;br /&gt;
&lt;br /&gt;
    def addfive(self,num):&lt;br /&gt;
        self.__number = num&lt;br /&gt;
        return self.__number + 5&lt;br /&gt;
&lt;br /&gt;
    def multiply(self,added):&lt;br /&gt;
        self.__added = added&lt;br /&gt;
        return self.__added * 2.452&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program which uses the class above, is below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexampleprog.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Program&lt;br /&gt;
&lt;br /&gt;
import oopexample&lt;br /&gt;
&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    num = float(input(&amp;quot;Please enter a number.\n&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    added = maths.addfive(num)&lt;br /&gt;
&lt;br /&gt;
    multip = maths.multiply(added)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;The manipulated value is &amp;quot;,multip)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After looking at that program, you are probably a bit lost. That's OK. Let's start off by dissecting the class.&lt;br /&gt;
The class is named &amp;quot;NumChange&amp;quot;&lt;br /&gt;
There are three methods to this class:&lt;br /&gt;
* __init__&lt;br /&gt;
* addfive&lt;br /&gt;
* multiply&lt;br /&gt;
&lt;br /&gt;
These three methods each have a similar code.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice how each method has a parameter named &amp;quot;self&amp;quot;. This parameter must be present in each method of the class. This parameter doesn't HAVE TO be called &amp;quot;self&amp;quot;, but it is standard practice, which means you should probably stick with it. This parameter is required in each method because when a method executes, it has to know which object's attributes to operate on. Even though there is only one Object, we still need to make sure the interpreter knows that we want to use the data attributes in that class. So we play it safe...and use the &amp;quot;self&amp;quot; parameter.&lt;br /&gt;
&lt;br /&gt;
Let's look at the first method. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most Classes in Python have an &amp;lt;code&amp;gt;__init__&amp;lt;/code&amp;gt; which executes automatically when an instance of a class is created in memory. (When we reference a class, an &amp;lt;i&amp;gt;instance&amp;lt;/i&amp;gt; [or object] of that class is created.) This method is commonly referred to as the &amp;lt;i&amp;gt;initializer method&amp;lt;/i&amp;gt;. When the method executes, the &amp;quot;self&amp;quot; parameter is automatically assigned to the object. This method is called the initializer method because is &amp;quot;initializes&amp;quot; the data attributes. ↵Under the __init__ method, we set the value of the &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt; attribute to 0 initially.&lt;br /&gt;
We reference the object attribute using dot notation. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.__number = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;self.__number = 0&amp;lt;/code&amp;gt; line simply means &amp;quot;&amp;quot;the value of the attribute &amp;quot;number&amp;quot;, in the object, is 0&amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Let's look at the next method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
    self.__number = num&lt;br /&gt;
    return self.__number + 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;addfive&amp;quot;. It accepts a parameter called &amp;quot;num&amp;quot;, from the program using the class. The method then assigns the value of that parameter to the &amp;quot;number&amp;quot; attribute inside the object. The method then returns the value of &amp;quot;number&amp;quot;, with 5 added to it, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Let's look at the third method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
    self.__added = added&lt;br /&gt;
    return self.__added * 2.453&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;multiply&amp;quot;. It accepts a parameter named &amp;quot;added&amp;quot;. It assigns the value of the parameter to the &amp;quot;added&amp;quot; attribute, and returns the value of the &amp;quot;added&amp;quot; attribute multiplied by 2.452, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Notice how the name of each method begins with two underscores? Let's explain that.&lt;br /&gt;
Earlier we mentioned that an object operates on data attributes inside itself using methods. Ideally, these data attributes should be able to be manipulated ONLY BY METHODS IN THE OBJECT. It is possible to have outside code manipulate data attributes. To &amp;quot;hide&amp;quot; attributes, so only methods in the object can manipulate them, you use two underscores before the object name, as we have been demonstrating. Omitting those two underscores in the attribute name, allows for the possibility of manipulation from code outside the object.&lt;br /&gt;
&lt;br /&gt;
Let's look at the program which uses the class we just dissected.&lt;br /&gt;
&lt;br /&gt;
Notice the first line of non comment code.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import oopexample&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line of code imports the class, which we have saved in a separate file (module). Classes do not have to be in a separate file, but it is almost always the case, and thus is good practice to get used to importing the module now.&lt;br /&gt;
&lt;br /&gt;
The next line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line creates an instance of the NumChange class, stored in the module named &amp;quot;oopexample&amp;quot;, and stores the instance in the variable named &amp;quot;maths&amp;quot;.&lt;br /&gt;
The syntax is:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;i&amp;gt;modulename.Classname()&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Next we define the main function.&lt;br /&gt;
Then, we get a number from the user.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;added = maths.addfive(num)&amp;lt;/code&amp;gt; sends the value of the &amp;quot;num&amp;quot; variable to the method named &amp;quot;addfive&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;added&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;multip = maths.multiply(added)&amp;lt;/code&amp;gt; sends the value of the variable &amp;quot;added&amp;quot;, to the method named &amp;quot;multiply&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;multip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line prints &amp;quot;The manipulated value is &amp;lt;value of multip&amp;gt;&amp;quot;. The last line calls the main function which executes the steps outlined above.&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Recursion |next=Intro to Imported Libraries and other Functions}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
	<entry>
		<id>https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3472</id>
		<title>Python Vadovėlis/Įvadas į objektinį programavimą Python 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.angis.net/index.php?title=Python_Vadov%C4%97lis/%C4%AEvadas_%C4%AF_objektin%C4%AF_programavim%C4%85_Python_3&amp;diff=3472"/>
		<updated>2021-10-21T19:26:28Z</updated>

		<summary type="html">&lt;p&gt;MindaugasP: Pradinis įvado vertimas&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objektinis programavimas==&lt;br /&gt;
&lt;br /&gt;
Iki šiol tu naudojai procedūrinį programavimo būdą. Tačiau, yra daug programų, kurios - parašytos naudojant objektinį programavimo būdą. Žinant abu būdus ir jų skirtumus yra labai svarbu. Informatikoje, daug svarbių kalbų kaip C++ ar Java dažnai naudoja objektinį programavimo būdą.&lt;br /&gt;
&lt;br /&gt;
Pradedantiesiems ir mokiniams neturintiems programavimo žinių objektinis programavimas dažnai gali atrodyti painus ir tai yra visiškai normalu. Nesijausk blogai jei iš pradžių suprasti nesiseka. Jei šis skyrius tau to suprasti nepadės, yra ir daugiau gerų šaltinių, kurie tau padės atsakyti į visus klausimus.&lt;br /&gt;
&lt;br /&gt;
Šis skyrius yra padalintas į keletą pamokų. Kiekviena pamoka yra skirta paaiškinti skirtingas objektinio programavimo dalis. &amp;lt;b&amp;gt;YRA LABAI SVARBU&amp;lt;/b&amp;gt; suprasti visas objektinio programavimo dalis. Prieš kiekvieną pamoką, bus parašyta įžanga, kuri paaiškins pagrindines idėjas, sąvokas ir kitas objektinio programavimo sritis, kurios yra reikalingos suprasti kiekvieną pamoką.&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Think of a procedure as a function. A function has a specific purpose. That purpose may be gathering input, performing mathematical calculations, displaying data, or manipulating data to, from, or in, a file. Typically, procedures use data which is separate from code for manipulation. This data is often passed between procedures. When a program becomes much larger and complex, this can cause problems.&lt;br /&gt;
For example, you have designed a program which stores information about a product in variables. When a customer requests information on a product, these variables are passed to different functions for different purposes. Later on, as more data is stored on these products, you decide to store the information in a list or dictionary. In order for your program to function, you must now edit each function that accepted variables, to now accept and manipulate a list or dictionary. Imagine the time that would take for a program that was hundreds of megabytes, and hundreds of files in size! It would drive you insane! not to mention, errors in your code, are almost guaranteed, just because of the large volume of work and possibilities to make a typo or other error. This is less than optimal.&lt;br /&gt;
Procedural programming is centered on procedures or functions. But, OOP is centered on creating Objects. Remember how a procedural program has separated data and code? Remember how that huge program was hundreds of files and would take FOREVER to edit? Well, think of an &amp;lt;i&amp;gt;object&amp;lt;/i&amp;gt; as a sort of &amp;quot;combination&amp;quot; of those files and data into one &amp;quot;being&amp;quot;. In a technical sense, an Object is an entity which contains data, AND procedures (code, functions, etc.). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Data inside an object is called a &amp;lt;i&amp;gt;data attribute&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Functions, or procedures inside the object are called &amp;lt;i&amp;gt;methods&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Think of &amp;lt;b&amp;gt;data attributes&amp;lt;/b&amp;gt; as variables. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Think of &amp;lt;b&amp;gt;methods&amp;lt;/b&amp;gt; as functions or procedures. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Let's look at a simple, everyday example. The light and light switch in your bedroom.&lt;br /&gt;
The data attributes would be as follows.&lt;br /&gt;
&lt;br /&gt;
* light_on (True or False)&lt;br /&gt;
* switch_position (Up or Down)&lt;br /&gt;
* electricity_flow (True or False)&lt;br /&gt;
&lt;br /&gt;
The methods would be as follows.&lt;br /&gt;
&lt;br /&gt;
* move_switch&lt;br /&gt;
* change_electricity_flow&lt;br /&gt;
&lt;br /&gt;
The data attributes may or may not be visible. For example, you cannot directly see the electricity flowing to the light. You only know there is electricity, because the light is on. However, you can see the position of the switch (switch_position), and you can see if the light is on or off (light_on). Some methods are &amp;lt;i&amp;gt;private&amp;lt;/i&amp;gt;. This means that you cannot directly change them. For example, unless you cut the wires in your light fixture (please don't do that, and for the sake of this example, assume that you don't know the wires exist), you cannot change the flow of electricity directly. You also cannot directly change if the light is on or off (and no, you can't unscrew the bulb! work with me here!). However, you can indirectly change these attributes by using the &amp;lt;i&amp;gt;methods&amp;lt;/i&amp;gt; in the object. If you don't pay your bill, the &amp;lt;code&amp;gt;change_electricity_flow&amp;lt;/code&amp;gt; method will change the value of the &amp;lt;code&amp;gt;electricity_flow&amp;lt;/code&amp;gt; attribute to FALSE. If you flip the switch, the &amp;lt;code&amp;gt;move_switch&amp;lt;/code&amp;gt; method changes the value of the &amp;lt;code&amp;gt;light_on&amp;lt;/code&amp;gt; attribute.&lt;br /&gt;
&lt;br /&gt;
By now you're probably thinking, &amp;quot;What does this have to do with Python?&amp;quot; or, &amp;quot;I understand, but how do I code an Object?&amp;quot; Well, we are almost to that point! One more concept must be explained before we can dive into code.&lt;br /&gt;
&lt;br /&gt;
In Python, an object's data attributes and methods are specified by a &amp;lt;b&amp;gt;class&amp;lt;/b&amp;gt;. Think of a class as a blueprint to an object. For example, your home - the object that you live in - you can also call it your pad, bungalow, crib, or whatever, was built based on a set of blueprints; these blueprints would be considered the class used to design your home, pad, crib, ahem, you get the idea.&lt;br /&gt;
&lt;br /&gt;
Again, a class tells us how to make an object. In technical terms, and this is important here, a class defines the data attributes and methods inside an object.&lt;br /&gt;
&lt;br /&gt;
To create a class, we code a &amp;lt;i&amp;gt;class definition&amp;lt;/i&amp;gt;. A class definition is a group of statements which define an object's data attributes and methods. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Lesson One&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is a Procedural program that performs simple math on a single number, entered by a user.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Program by Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
&lt;br /&gt;
# Procedure 1&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Get a number to maniuplate&lt;br /&gt;
        num = float(input(&amp;quot;Please enter a number to manipulate.\n&amp;quot;))&lt;br /&gt;
        # Store the result of the value, after it has been manipulated&lt;br /&gt;
        # by Procedure 2&lt;br /&gt;
        addednum = addfive(num)&lt;br /&gt;
        # Store the result of the value, after it has been manipulated&lt;br /&gt;
        # by Procedure 3&lt;br /&gt;
        multipliednum = multiply(addednum)&lt;br /&gt;
        # Send the value to Procedure 4&lt;br /&gt;
        display(multipliednum)&lt;br /&gt;
    # Deal with exceptions from non-numeric user entry&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;You must enter a valid number.\n&amp;quot;)&lt;br /&gt;
        # Reset the value of num, to clear non-numeric data.&lt;br /&gt;
        num = 0&lt;br /&gt;
        # Call main, again.&lt;br /&gt;
        main()&lt;br /&gt;
&lt;br /&gt;
# Procedure 2&lt;br /&gt;
def addfive(num):&lt;br /&gt;
    return num + 5&lt;br /&gt;
&lt;br /&gt;
# Procedure 3&lt;br /&gt;
def multiply(addednum):&lt;br /&gt;
    return addednum * 2.452&lt;br /&gt;
&lt;br /&gt;
# Procedure 4&lt;br /&gt;
def display(multi):&lt;br /&gt;
    # Display the final value&lt;br /&gt;
    print(&amp;quot;The final value is &amp;quot;,multi)&lt;br /&gt;
&lt;br /&gt;
# Call Procedure 1&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we were to enter a value of &amp;quot;5&amp;quot;, the output would be as shown below.&lt;br /&gt;
&lt;br /&gt;
 Please enter a number to manipulate.&lt;br /&gt;
 5&lt;br /&gt;
 The final value is  24.52&lt;br /&gt;
&lt;br /&gt;
If we were to enter a value of &amp;quot;g&amp;quot;, and then correct the input and enter a value of &amp;quot;8&amp;quot;, the output would be as shown below.&lt;br /&gt;
&lt;br /&gt;
 Please enter a number to manipulate.&lt;br /&gt;
 g&lt;br /&gt;
 You must enter a valid number.&lt;br /&gt;
 &lt;br /&gt;
 Please enter a number to manipulate.&lt;br /&gt;
 8&lt;br /&gt;
 The final value is  31.875999999999998&lt;br /&gt;
&lt;br /&gt;
Below, is a Class, and a program which uses that class. This Object Oriented Program does the same thing as the procedural program above. Let's cover some important OOP coding concepts before we dive into the Class and program. &lt;br /&gt;
To create a class, we use the &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; keyword. After the keyword, you type the name you want to name your class. It is common practice that the name of your class uses CapWords convention.&lt;br /&gt;
If I wanted to create a class named dirtysocks, the code would be:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class DirtySocks&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Class is shown first. The program which uses the class is second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexample.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Class&lt;br /&gt;
&lt;br /&gt;
class NumChange:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.__number = 0&lt;br /&gt;
&lt;br /&gt;
    def addfive(self,num):&lt;br /&gt;
        self.__number = num&lt;br /&gt;
        return self.__number + 5&lt;br /&gt;
&lt;br /&gt;
    def multiply(self,added):&lt;br /&gt;
        self.__added = added&lt;br /&gt;
        return self.__added * 2.452&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program which uses the class above, is below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Filename: oopexampleprog.py&lt;br /&gt;
# Mitchell Aikens&lt;br /&gt;
# No Copyright&lt;br /&gt;
# 2012&lt;br /&gt;
# OOP Demonstration - Program&lt;br /&gt;
&lt;br /&gt;
import oopexample&lt;br /&gt;
&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    num = float(input(&amp;quot;Please enter a number.\n&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    added = maths.addfive(num)&lt;br /&gt;
&lt;br /&gt;
    multip = maths.multiply(added)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;The manipulated value is &amp;quot;,multip)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After looking at that program, you are probably a bit lost. That's OK. Let's start off by dissecting the class.&lt;br /&gt;
The class is named &amp;quot;NumChange&amp;quot;&lt;br /&gt;
There are three methods to this class:&lt;br /&gt;
* __init__&lt;br /&gt;
* addfive&lt;br /&gt;
* multiply&lt;br /&gt;
&lt;br /&gt;
These three methods each have a similar code.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice how each method has a parameter named &amp;quot;self&amp;quot;. This parameter must be present in each method of the class. This parameter doesn't HAVE TO be called &amp;quot;self&amp;quot;, but it is standard practice, which means you should probably stick with it. This parameter is required in each method because when a method executes, it has to know which object's attributes to operate on. Even though there is only one Object, we still need to make sure the interpreter knows that we want to use the data attributes in that class. So we play it safe...and use the &amp;quot;self&amp;quot; parameter.&lt;br /&gt;
&lt;br /&gt;
Let's look at the first method. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most Classes in Python have an &amp;lt;code&amp;gt;__init__&amp;lt;/code&amp;gt; which executes automatically when an instance of a class is created in memory. (When we reference a class, an &amp;lt;i&amp;gt;instance&amp;lt;/i&amp;gt; [or object] of that class is created.) This method is commonly referred to as the &amp;lt;i&amp;gt;initializer method&amp;lt;/i&amp;gt;. When the method executes, the &amp;quot;self&amp;quot; parameter is automatically assigned to the object. This method is called the initializer method because is &amp;quot;initializes&amp;quot; the data attributes. ↵Under the __init__ method, we set the value of the &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt; attribute to 0 initially.&lt;br /&gt;
We reference the object attribute using dot notation. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.__number = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;self.__number = 0&amp;lt;/code&amp;gt; line simply means &amp;quot;&amp;quot;the value of the attribute &amp;quot;number&amp;quot;, in the object, is 0&amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Let's look at the next method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def addfive(self,num):&lt;br /&gt;
    self.__number = num&lt;br /&gt;
    return self.__number + 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;addfive&amp;quot;. It accepts a parameter called &amp;quot;num&amp;quot;, from the program using the class. The method then assigns the value of that parameter to the &amp;quot;number&amp;quot; attribute inside the object. The method then returns the value of &amp;quot;number&amp;quot;, with 5 added to it, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Let's look at the third method.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def multiply(self,added):&lt;br /&gt;
    self.__added = added&lt;br /&gt;
    return self.__added * 2.453&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is named &amp;quot;multiply&amp;quot;. It accepts a parameter named &amp;quot;added&amp;quot;. It assigns the value of the parameter to the &amp;quot;added&amp;quot; attribute, and returns the value of the &amp;quot;added&amp;quot; attribute multiplied by 2.452, to the statement which called the method.&lt;br /&gt;
&lt;br /&gt;
Notice how the name of each method begins with two underscores? Let's explain that.&lt;br /&gt;
Earlier we mentioned that an object operates on data attributes inside itself using methods. Ideally, these data attributes should be able to be manipulated ONLY BY METHODS IN THE OBJECT. It is possible to have outside code manipulate data attributes. To &amp;quot;hide&amp;quot; attributes, so only methods in the object can manipulate them, you use two underscores before the object name, as we have been demonstrating. Omitting those two underscores in the attribute name, allows for the possibility of manipulation from code outside the object.&lt;br /&gt;
&lt;br /&gt;
Let's look at the program which uses the class we just dissected.&lt;br /&gt;
&lt;br /&gt;
Notice the first line of non comment code.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import oopexample&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line of code imports the class, which we have saved in a separate file (module). Classes do not have to be in a separate file, but it is almost always the case, and thus is good practice to get used to importing the module now.&lt;br /&gt;
&lt;br /&gt;
The next line:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
maths = oopexample.NumChange()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line creates an instance of the NumChange class, stored in the module named &amp;quot;oopexample&amp;quot;, and stores the instance in the variable named &amp;quot;maths&amp;quot;.&lt;br /&gt;
The syntax is:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;i&amp;gt;modulename.Classname()&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Next we define the main function.&lt;br /&gt;
Then, we get a number from the user.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;added = maths.addfive(num)&amp;lt;/code&amp;gt; sends the value of the &amp;quot;num&amp;quot; variable to the method named &amp;quot;addfive&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;added&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line &amp;lt;code&amp;gt;multip = maths.multiply(added)&amp;lt;/code&amp;gt; sends the value of the variable &amp;quot;added&amp;quot;, to the method named &amp;quot;multiply&amp;quot;, which is part of the class we stored an instance of in the variable named &amp;quot;maths&amp;quot;, and stores the returned value in the variable named &amp;quot;multip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The next line prints &amp;quot;The manipulated value is &amp;lt;value of multip&amp;gt;&amp;quot;. The last line calls the main function which executes the steps outlined above.&lt;br /&gt;
&lt;br /&gt;
{{navigation |previous=Recursion |next=Intro to Imported Libraries and other Functions}}&lt;br /&gt;
{{BookCat}}&lt;/div&gt;</summary>
		<author><name>MindaugasP</name></author>
	</entry>
</feed>