Septinta pamoka yra suskirstyta į tris dalis: A, B ir C. Jas galite atlikte bet kokia tvarka.
Jau išmokome reikšmių priskyrimą/keitimą, nuskaitymą ir spausdinimą. Taip pat - sąlygos sąkinį („if
“). Šioje pamokoje išmoksime, kaip naudoti kartojimo sakinius - ciklus
(angliškai „loop
“). Kartojimas, ko gero, yra pats naudingiausias programų elementas, nes leidžia greitai atlikti daug skaičiavimų - kas žmonėms užtruktų ir būtų laaabai nuobodu. Pavyzdžiui, apskaitos sistemose norint sužinoti pelną, reikia atlikti kartojimą, kuris susumuotų visus pardavimus. Arba, tikrinant teksto rašybą, reikia pakartoti tikrinimą kiekvienam teksto žodžiui. Šioje pamokoje išmoksime while
ir for
ciklus.
Panašiai, kaip metų cikle keičiasi pavasaris-vasara-ruduo-žiema (ir vėl pavasaris, ir t.t...), programos cikle nurodytiems veiksmams pasibaigus, jie vėl pradedami vykdyti iš naujo (bet jau su kitais duomenimis).
A. Ciklas „while
“
„while
“ sakinys kartoja veiksmus tol, kol sąlyga yra tenkinama (jos reikšmė yra True
), pvz.:
„while
“ užrašymo detalės:
- Pirmoje eilutėje yra antraštė
while «sąlyga»:
kur «sąlyga» gali būti įvertintaTrue
arbaFalse
. - Toliau, atitrauktas veiksmų blokas, kurį mes norime kartoti.
- Kaip ciklas veikia:
- Jei sąlyga tenkinama, ciklo veiksmai vykdomi;
- Kartojimo metu keičiasi kintamasis, pagal kurį tikrinama sąlyga;
- Kai sąlyga tampa
False
, ciklas yra sustabdomas.
Taigi, aukščiau esančiame pavyzdyje, mes kartojame ciklo veiksmus kol timeLeft
laikas buvo didesnis už 0.
Naudojant skaitliukus cikle yra svarbūs 3 dalykai:
- Startas (priskiriamas prieš pradedant ciklą) - pavyzdy buvo
5
- Finišas (nurodomas ciklo kartojimo sąlygoje) - pavyzdy buvo
0
- Žingsnis (daromas ciklo viduje - jei jį užmiršime, ciklas niekada nesibaigs!) - pavyzdy buvo
-1
Su ciklais lengva parašyti programą, kuri veiks be galo (naudotojui atrodys. kad kompiuteris pakibo). Mes gauname klaidą "Time Limit Exceeded" (viršyta laiko riba), kadangi CS Circles serveris neleidžia programai tęstis ilgiau nei vieną sekundę. Po vienos sekundės programa yra sustabdoma. Paleidus programą namie, ji niekada nesustotų, nebent ją sustabdytumėte paspaudę Ctrl-C. |
B. Ciklas „for
“
„for
“ ciklas yra skirtas duomenų sąrašo perrinkimui. Nuo „while
“ jis skiriasi tuo, kad visada yra baigtinis - kartojama tiek, kiek sąraše yra elementų. Nurodytam kintamajam paeiliui priskiriamas kiekvienas sąrašo elementas.
Štai for
ciklo pavyzdys.
Programavime dažnai reikia perrinkti skaičius iš eilės (kaip darėme „while“ cikle) - su for
atrodytų taip:
Čia naudojama "range(..)
" (angl. „intervalas“) funkcija, kuri generuoja skaičių seką pagal nurodytas ribas. Tik pabaigos riba naudojama neimtinai (paskutinis gautas skaičius buvo 14, o ne 15).
Bendra for
ciklo su skaitliuku struktūra yra:
for «skaitliukas» in range(«pradžia», «pabaiga»): «cikle vykdomi veiksmai»Pirmiausia
skaitliukas
gauna reikšmę pradžia
. Po to, kartojama su reikšmėmis pradžia+1
, pradžia+2
, ir t.t. Kai galiausiai atliekami veiksmai su reikšme pabaiga-1
, kartojimas sustoja.
For ciklą su skaitliuku atitiktų toks "while" ciklas:
«skaitliukas» = «pradžia» while «skaitliukas» < «pabaiga»: «cikle vykdomi veiksmai» «skaitliukas» = «skaitliukas» + 1 # skaitliukas padidinamas, atlikus veiksmusAr pamenate įdėtinį sąlygos sakinį - t.y., kai viename sąlygos sakiny yra dar vienas. Analogiškai gali būti ir su ciklais. Ciklas cikle (angl. „nested loop“) yra gan dažnai naudojamas rimtesnėse programose, pavyzdžiui, kai reikia perrinkti visus galimus kelius tarp keliolikos miestų. Štai
for
ciklo esančio kitame for
cikle pavyzdys.
Kad geriau suprastumėte, kaip tai veikia, galite išbandyti "Veiksmų sekimą". Keičiant išorinio bei vidinio ciklo skaitliukų intervalus, galima gauti skirtingos formos "piešinį". Paeksperimentuokite, nes perprasti ciklą cikle būna nelengva.
C. break
ir continue
komandos
break
reiškia veiksmų nutraukimą (analogiškai naudojamas ir bokse). Jį priėjusi, programa nutraukia ciklo vykdymą ir peršoka į komandą, esančią po ciklo. Šai break
naudojimo pavyzdys: ši programa skaito įvesties eilutes kol randa parašyta "END"
.
Vienas ciklo veiksmų įvykdymo kartas dar vadinamas iteracija. continue
komanda praleidžia likusius iteracijos veiksmus ir pradeda kitą iteraciją. continue
prasmė angliškai būtų - „continue from next iteration“.
Štai pavyzdys, kuriame naudojamas ir break
, ir continue
. Ar galite nuspėti išvestį?