Knyga/Įdėtiniai ciklai ir sąlygos
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 teigamą 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 teigamą skaičių.")
else:
print("Įvedei neigiamą skaičių.")
else:
print("Įvedei nulį.")
Programa pateikia tokį pat atsakymą, bet yra įgyvendinta šiek tiek kitaip. Parašiau programą su dviem lygiais, tačiau lygių gali būtų begalinis skaičius. Kuo daugiau lygių, tuo sunkiau skaityti 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 teigamą 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 prašo vartotojo įvesti skaičius tol, kol jis įveda 0. Tada programa turi išvesti skaičių vidurkį. Gali remtis skyriuje aptartu skaičių sumos pavyzdžiu.
| Sprendimas |
|---|
2. Parašyk programą, kuri prašo vartotojo įvesti skaičių ir išveda to skaičiaus, pakelto kubu, reikšmę. Programa turėtų veiksmą kartoti tol, kol vartotojas įveda 0.