Knyga/Įdėtiniai ciklai ir sąlygos: Skirtumas tarp puslapio versijų
Nėra keitimo santraukos |
|||
| (nerodoma 6 tarpinės versijos, sukurtos 2 naudotojų) | |||
| 1 eilutė: | 1 eilutė: | ||
{{navigation |previous=Suskaičiuoti iki 10 | next=Funkcijų apibrėžimas}} | {{navigation |previous=Suskaičiuoti iki 10 | next=Funkcijų apibrėžimas}} | ||
=== Ką išmoksi šiame skyriuje? === | |||
* Kas yra įdėtinės sąlygos (<code>if</code> sakiniai vienas kitame) | |||
* Kaip naudoti kelias sąlygas tvarkingai ir aiškiai | |||
* Kada įdėtos sąlygos gali apsunkinti supratimą | |||
* Kaip atrodo įdėtas ciklas – <code>for</code> ciklas cikle | |||
* Kaip sukurti struktūruotą išvestį su įdėtais ciklais | |||
* Kokių gerųjų praktikų laikytis rašant įdėtus ciklus | |||
[[Vaizdas:Forfor.png|center|frameless|941x941px]] | |||
=== Ifas ife === | === Ifas ife === | ||
Gyvenime pasitaiko situacijų, kai reikia priimti tam tikrus sprendimus ir jais remiantis nuspręsti, ką daryti toliau. Panašių situacijų pasitaiko ir programavime, kai reikia priimti tam tikrus sprendimus ir jais remiantis nuspręsti, kada vykdyti kitą kodo bloką. Tai atliekama naudojant įdėtinį if (ang. „Nested if“) teiginį. | Gyvenime pasitaiko situacijų, kai reikia priimti tam tikrus sprendimus ir jais remiantis nuspręsti, ką daryti toliau. Panašių situacijų pasitaiko ir programavime, kai reikia priimti tam tikrus sprendimus ir jais remiantis nuspręsti, kada vykdyti kitą kodo bloką. Tai atliekama naudojant įdėtinį if (ang. „Nested if“) teiginį. | ||
| 11 eilutė: | 23 eilutė: | ||
print("Įvedei nulį.") | print("Įvedei nulį.") | ||
elif skaičius > 0: | elif skaičius > 0: | ||
print("Įvedei | print("Įvedei teigiamą skaičių.") | ||
else: | else: | ||
print("Įvedei neigiamą skaičių.") | print("Įvedei neigiamą skaičių.") | ||
| 27 eilutė: | 39 eilutė: | ||
if skaičius != 0: | if skaičius != 0: | ||
if skaičius > 0: | if skaičius > 0: | ||
print("Įvedei | print("Įvedei teigiamą skaičių.") | ||
else: | else: | ||
print("Įvedei neigiamą skaičių.") | print("Įvedei neigiamą skaičių.") | ||
| 34 eilutė: | 46 eilutė: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Programa pateikia tokį pat atsakymą, bet yra įgyvendinta šiek tiek kitaip. | Programa pateikia tokį pat atsakymą, bet yra įgyvendinta šiek tiek kitaip. Ši programa turi du įdėjimo lygius, bet jų gali būti daugiau. Kuo jų daugiau – tuo sunkiau suprasti kodą ir rasti klaidas. | ||
Pabandyk suprasti tokią programą: | Pabandyk suprasti tokią programą: | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
skaičius = float(input("Įvesk skaičių: ")) | skaičius = float(input("Įvesk skaičių: ")) | ||
| 49 eilutė: | 62 eilutė: | ||
print("Įvedei mažą teigiamą skaičių.") | print("Įvedei mažą teigiamą skaičių.") | ||
else: | else: | ||
print("Įvedei | print("Įvedei teigiamą skaičių.") | ||
else: | else: | ||
print("Įvedei neigiamą skaičių.") | print("Įvedei neigiamą skaičių.") | ||
| 67 eilutė: | 80 eilutė: | ||
for i in range(1, 11): # Išorinis ciklas | for i in range(1, 11): # Išorinis ciklas | ||
for j in range(1, 11): # Vidinis ciklas | for j in range(1, 11): # Vidinis ciklas | ||
print( | print(i, "×", j, "=", i * j) | ||
print() | print() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Šiame kode išorinis ciklas keičia <code>i</code> reikšmę nuo 1 iki 10, o vidinis ciklas – <code>j</code> reikšmę nuo 1 iki 10. Kiekvienai <code>i</code> reikšmei vidinis ciklas pilnai įvykdomas, taip sugeneruojant pilną daugybos lentelę. | Šiame kode išorinis ciklas keičia <code>i</code> reikšmę nuo 1 iki 10, o vidinis ciklas – <code>j</code> reikšmę nuo 1 iki 10. Kiekvienai <code>i</code> reikšmei vidinis ciklas pilnai įvykdomas, taip sugeneruojant pilną daugybos lentelę. | ||
Programa turėtų atspausdinti tokį rezultatą: | Programa turėtų atspausdinti tokį rezultatą (rodau tik dalį): | ||
1 × 1 = 1 | |||
1 × 2 = 2 | |||
1 × 3 = 3 | |||
1 × 4 = 4 | |||
1 × 5 = 5 | |||
1 × 6 = 6 | |||
1 × 7 = 7 | |||
1 × 8 = 8 | |||
1 × 9 = 9 | |||
1 × 10 = 10 | |||
2 × 1 = 2 | |||
2 × 2 = 4 | |||
2 × 3 = 6 | |||
2 × 4 = 8 | |||
2 × 5 = 10 | |||
2 × 6 = 12 | |||
... | |||
Ciklų ciklas gali būti naudojamas ir grafinėms figūroms atvaizduoti. | Ciklų ciklas gali būti naudojamas ir grafinėms figūroms atvaizduoti. | ||
| 89 eilutė: | 110 eilutė: | ||
for i in range(1, n + 1): | for i in range(1, n + 1): | ||
for j in range(i): | for j in range(i): | ||
print("*", end=" ") | print("*", end="") | ||
print() | print() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| 106 eilutė: | 127 eilutė: | ||
Ciklų ciklai yra galingas įrankis, leidžiantis efektyviai dirbti su dvimatiniais duomenimis, generuoti struktūras ar atlikti sudėtingas operacijas. Tačiau svarbu laikytis gerųjų praktikų, kad kodas būtų ne tik funkcionalus, bet ir lengvai suprantamas bei efektyvus. | Ciklų ciklai yra galingas įrankis, leidžiantis efektyviai dirbti su dvimatiniais duomenimis, generuoti struktūras ar atlikti sudėtingas operacijas. Tačiau svarbu laikytis gerųjų praktikų, kad kodas būtų ne tik funkcionalus, bet ir lengvai suprantamas bei efektyvus. | ||
=== Pratimai === | |||
1. Parašyk programą, kuri paprašytų įvesti skaičių. Jei skaičius yra tarp 10 ir 100 - tuomet turi būti išvesta, ar skaičius yra lyginis ar nelyginis. Jei skaičius nepatenka į intervalą, programa turi išvesti "Skaičius nepatenka į intervalą tarp 10 ir 100." | |||
{| class="mw-collapsible mw-collapsed wikitable" | |||
! colspan="2" |Sprendimas | |||
|- | |||
|<syntaxhighlight lang="python"> | |||
skaičius = int(input("Įvesk skaičių: ")) | |||
if 10 <= skaičius <= 100: | |||
if skaičius % 2 == 0: | |||
print("Skaičius yra lyginis.") | |||
else: | |||
print("Skaičius yra nelyginis.") | |||
else: | |||
print("Skaičius nepatenka į rėžį tarp 10 ir 100.") | |||
</syntaxhighlight> | |||
|- | |||
| | |||
|} | |||
2. Parašyk programą, kuri patikrintų ar įvesti metai yra keliamieji. Tikrinant ar metai yra keliamieji reikia patikrinti ar metai dalinasi iš 4, jei taip tuomet reikia patikrinti ar dalinasi iš 100 (tada metai ne keliamieji), jei taip tuomet patikrinti ar dalinasi iš 400 (tada metai keliamieji). Išspręsk užduotį naudodamas if sąlygas kitose if sąlygose. | |||
{| class="mw-collapsible mw-collapsed wikitable" | |||
! colspan="2" |Sprendimas | |||
|- | |||
|<syntaxhighlight lang="python"> | |||
skaičius = int(input("Įvesk skaičių: ")) | |||
if 10 <= skaičius <= 100: | |||
if skaičius % 2 == 0: | |||
print("Skaičius yra lyginis.") | |||
else: | |||
print("Skaičius yra nelyginis.") | |||
else: | |||
print("Skaičius nepatenka į rėžį tarp 10 ir 100.") | |||
</syntaxhighlight> | |||
|- | |||
| | |||
|} | |||
{{navigation |previous=Suskaičiuoti iki 10 | next=Funkcijų apibrėžimas}} | {{navigation |previous=Suskaičiuoti iki 10 | next=Funkcijų apibrėžimas}} | ||
Dabartinė 16:24, 5 rugpjūčio 2025 versija
Ką išmoksi šiame skyriuje?
- Kas yra įdėtinės sąlygos (
ifsakiniai vienas kitame) - Kaip naudoti kelias sąlygas tvarkingai ir aiškiai
- Kada įdėtos sąlygos gali apsunkinti supratimą
- Kaip atrodo įdėtas ciklas –
forciklas cikle - Kaip sukurti struktūruotą išvestį su įdėtais ciklais
- Kokių gerųjų praktikų laikytis rašant įdėtus ciklus

Ifas ife
Gyvenime pasitaiko situacijų, kai reikia priimti tam tikrus sprendimus ir jais remiantis nuspręsti, ką daryti toliau. Panašių situacijų pasitaiko ir programavime, kai reikia priimti tam tikrus sprendimus ir jais remiantis nuspręsti, kada vykdyti kitą kodo bloką. Tai atliekama naudojant įdėtinį if (ang. „Nested if“) teiginį.
Python įdėtinis if teiginys gali turėti if...elif...else teiginį kitame if...elif...else teiginyje. Kompiuterių programavime tai vadinama įdėjimu arba angliškai Nesting. Bet koks šių teiginių skaičius gali būti įdėtas vienas į kitą. Įtraukimas yra vienintelis būdas nustatyti įdėjimo lygį. Tai gali būti painu, todėl, jei įmanoma, reikia to vengti.
Parašysiu programą, kuri pasako, ar tavo įvestas skaičius yra teigiamas ar neigiamas.
skaičius = float(input("Įvesk skaičių: "))
if skaičius == 0:
print("Įvedei nulį.")
elif skaičius > 0:
print("Įvedei teigiamą skaičių.")
else:
print("Įvedei neigiamą skaičių.")
Rezultate turėtum gauti:
Įvesk skaičių: -12 Įvedei neigiamą skaičių.
arba
Įvesk skaičių: 0 Įvedei nulį.
O dabar pakeisiu programą, kad būtų naudojamas idėjimas:
skaičius = float(input("Įvesk skaičių: "))
if skaičius != 0:
if skaičius > 0:
print("Įvedei teigiamą skaičių.")
else:
print("Įvedei neigiamą skaičių.")
else:
print("Įvedei nulį.")
Programa pateikia tokį pat atsakymą, bet yra įgyvendinta šiek tiek kitaip. Ši programa turi du įdėjimo lygius, bet jų gali būti daugiau. Kuo jų daugiau – tuo sunkiau suprasti kodą ir rasti klaidas. Pabandyk suprasti tokią programą:
skaičius = float(input("Įvesk skaičių: "))
if skaičius != 0:
if skaičius > 0:
if skaičius > 10:
if skaičius > 100:
if skaičius > 1000:
print("Įvedei didelį teigiamą skaičių.")
else:
print("Įvedei vidutinį teigiamą skaičių.")
else:
print("Įvedei mažą teigiamą skaičių.")
else:
print("Įvedei teigiamą skaičių.")
else:
print("Įvedei neigiamą skaičių.")
else:
print("Įvedei nulį.")
Ciklas cikle
Programuojant dažnai tenka atlikti pasikartojančias operacijas, o kartais reikia kartoti veiksmus ne tik viename cikle, bet ir jo viduje – tokiu atveju naudojami ciklai cikle (angl. nested loops). Tai reiškia, kad vienas ciklas veikia kito ciklo viduje.
Ciklų ciklo veikimo principas
Vidinis ciklas pilnai įvykdo visus savo iteracijos žingsnius kiekvienam išoriniam ciklo žingsniui. Tai ypač naudinga dirbant su dvimatėmis struktūromis, pvz., matricomis, ar generuojant daugiapakopius duomenų rinkinius.
Vienas paprasčiausių pavyzdžių, kur naudojamas ciklas cikle – daugybos lentelės generavimas.
for i in range(1, 11): # Išorinis ciklas
for j in range(1, 11): # Vidinis ciklas
print(i, "×", j, "=", i * j)
print()
Šiame kode išorinis ciklas keičia i reikšmę nuo 1 iki 10, o vidinis ciklas – j reikšmę nuo 1 iki 10. Kiekvienai i reikšmei vidinis ciklas pilnai įvykdomas, taip sugeneruojant pilną daugybos lentelę.
Programa turėtų atspausdinti tokį rezultatą (rodau tik dalį):
1 × 1 = 1 1 × 2 = 2 1 × 3 = 3 1 × 4 = 4 1 × 5 = 5 1 × 6 = 6 1 × 7 = 7 1 × 8 = 8 1 × 9 = 9 1 × 10 = 10 2 × 1 = 2 2 × 2 = 4 2 × 3 = 6 2 × 4 = 8 2 × 5 = 10 2 × 6 = 12 ...
Ciklų ciklas gali būti naudojamas ir grafinėms figūroms atvaizduoti.
n = 5
for i in range(1, n + 1):
for j in range(i):
print("*", end="")
print()
Rezultatas:
* * * * * * * * * * * * * * *
Gerosios praktikos
- Venk per daug įdėtų ciklų. Daugiau nei trys ciklai vienas kitame gali būti sunkiai suprantami ir lėtai veikiantys.
- Optimali tvarka. Jei galima, pertvarkyk kodą taip, kad vidinis ciklas kartotųsi kuo mažiau kartų.
- Naudok prasmingus kintamųjų pavadinimus. Vietoje
iirjnaudokite aiškesnius pavadinimus, jei ciklai sudėtingesni (pvz., eilutė, stulpelis). - Iškelk funkcijas. Jei ciklai vykdo pasikartojančią logiką, apsvarstyk jų iškėlimą į atskiras funkcijas, kad kodas būtų aiškesnis.
Ciklų ciklai yra galingas įrankis, leidžiantis efektyviai dirbti su dvimatiniais duomenimis, generuoti struktūras ar atlikti sudėtingas operacijas. Tačiau svarbu laikytis gerųjų praktikų, kad kodas būtų ne tik funkcionalus, bet ir lengvai suprantamas bei efektyvus.
Pratimai
1. Parašyk programą, kuri paprašytų įvesti skaičių. Jei skaičius yra tarp 10 ir 100 - tuomet turi būti išvesta, ar skaičius yra lyginis ar nelyginis. Jei skaičius nepatenka į intervalą, programa turi išvesti "Skaičius nepatenka į intervalą tarp 10 ir 100."
| Sprendimas | |
|---|---|
skaičius = int(input("Įvesk skaičių: "))
if 10 <= skaičius <= 100:
if skaičius % 2 == 0:
print("Skaičius yra lyginis.")
else:
print("Skaičius yra nelyginis.")
else:
print("Skaičius nepatenka į rėžį tarp 10 ir 100.")
| |
2. Parašyk programą, kuri patikrintų ar įvesti metai yra keliamieji. Tikrinant ar metai yra keliamieji reikia patikrinti ar metai dalinasi iš 4, jei taip tuomet reikia patikrinti ar dalinasi iš 100 (tada metai ne keliamieji), jei taip tuomet patikrinti ar dalinasi iš 400 (tada metai keliamieji). Išspręsk užduotį naudodamas if sąlygas kitose if sąlygose.
| Sprendimas | |
|---|---|
skaičius = int(input("Įvesk skaičių: "))
if 10 <= skaičius <= 100:
if skaičius % 2 == 0:
print("Skaičius yra lyginis.")
else:
print("Skaičius yra nelyginis.")
else:
print("Skaičius nepatenka į rėžį tarp 10 ir 100.")
| |