3.3 While cikli un kontrole
Stundas uzdevums: Izveidot spēles dzinēju, kas turpina darboties neatkarīgi no viena gājiena beigām. Apgūsi, kā lietot ciklus un strukturēt koda atkārtošanos, izmantojot plūsmas kontroles rīkus.
70 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~15 min) - uzraksti skaitītāja ciklu ar while · 2. uzdevums (~25 min) - uzbūvē bezgalīgu spēles ciklu ar break · 3. uzdevums (~20 min) - pievieno continue un iztestē cikla izeju. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.
Pirms sāc: atver VS Code un izveido failu cikli.py. Ja programma iestrēgst bezgalīgā ciklā, apturi to terminālī ar Ctrl+C.
Teorija: Ciklu vadības rīki
Loops (Cikli) ļauj atkārtot koda bloku vairākas reizes, neatkārtojot pašu kodu. While loop (Kamēr cikls) darbojas tik ilgi, kamēr tā nosacījums ir True (Patiess).
- While loop (Kamēr cikls): Atkārto izpildi, kamēr nosacījums paliek patiess.
# Cikls izpildīsies 3 reizes dzivibas = 3 while dzivibas > 0: print("Spēlējam!") dzivibas -= 1 - Break statement (Pārtraukšanas komanda): Nekavējoties pārtrauc un iziet no cikla, pat ja
whilenosacījums joprojām ir True. Lieliski noder spēles pabeigšanai.while True: ievade = input("Raksti 'stop': ") if ievade == "stop": break # Cikls beidzas šeit un programma turpinās tālāk - Continue statement (Turpināšanas komanda): Pārtrauc pašreizējo Iteration (Iterāciju/Cikla soli) un uzreiz pārlēk atpakaļ uz cikla sākumu.
while True: vards = input("Vārds: ") if vards == "": continue # Ignorē tukšu ievadi un prasa vārdu no jauna print(f"Sveiks, {vards}!")
Drošības padoms: Ja tava programma iesprūst Infinite loop (Bezgalīgajā ciklā) un nekad nebeidzas, terminālī nospied Ctrl + C, lai to apturētu piespiedu kārtā!
Praktiskie uzdevumi
1. uzdevums -
Uzraksti skaitītāja ciklu ar while
Beigās cikls izpildīsies tieši tik reižu, cik tu esi paredzējis.
- Ieraksti
dzivibas = 3. - Ieraksti
while dzivibas > 0:. - Ieraksti zem tā ar atkāpi
print("Spēlējam! Dzīvības:", dzivibas). - Pievieno ar to pašu atkāpi
dzivibas -= 1. - Palaid un saskaiti, cik rindas izdrukājās.
- Izdzēs rindu
dzivibas -= 1un palaid vēlreiz. - Apturi programmu ar
Ctrl+Cun ieliec rindu atpakaļ.
Gatavs, kad: ar skaitītāju izdrukājas tieši 3 rindas, bet bez tā cikls neapstājas nekad.
2. uzdevums -
Uzbūvē bezgalīgu spēles ciklu ar break
Beigās spēle darbosies, līdz spēlētājs pats uzrakstīs 'stop'.
- Izveido jaunu failu
spele.py. - Ieraksti
while True:. - Ieraksti zem tā
minejums = input("Uzmini skaitli (vai 'stop'): "). - Pievieno
if minejums.lower() == "stop":. - Ieraksti zem tā izdruku un komandu
break. - Palaid un ievadi dažus skaitļus, tad
stop.
Gatavs, kad: cikls turpinās, kamēr raksti skaitļus, un beidzas tieši tad, kad uzraksti stop.
3. uzdevums -
Pievieno continue un iztestē cikla izeju
Beigās tukša ievade vairs neizjauks spēli.
- Pievieno pirms
breakpārbaudes rinduif minejums == "":. - Ieraksti zem tā izdruku
Ievade nevar būt tukša!un komanducontinue. - Palaid un nospied Enter, neko neievadot.
- Pārbaudi, vai programma turpina prasīt, nevis avarē.
- Palaid un ievadi
STOPar lielajiem burtiem. - Palaid un ievadi parastu skaitli, lai pārbaudītu, ka cikls turpinās.
- Pieraksti vienu secinājumu: ar ko
breakatšķiras nocontinue.
Gatavs, kad: tukša ievade dod brīdinājumu un cikls turpinās, bet STOP spēli beidz.
Papildu uzdevums - Pievieno gājienu skaitītāju
Ja pamatdarbs ir gatavs, saskaiti, cik reižu spēlētājs mēģināja.
- Ieraksti pirms cikla
gajieni = 0. - Pievieno ciklā pēc derīgas ievades
gajieni += 1. - Izdrukā pēc
breakkopējo gājienu skaitu. - Pārliecinies, ka tukšās ievades netiek skaitītas.
- Palaid un pārbaudi ar trim derīgiem gājieniem.
Gatavs, kad: pēc spēles beigām izdrukātais skaitlis sakrīt ar tavu derīgo gājienu skaitu.
Biežākās kļūdas (un kā tās labot):
- Infinite loop (Bezgalīgais cikls): Ja
whilenosacījums nekad nekļūst False un ciklā navbreak, programma iestrēgs. Vienmēr pārliecinies, ka cikla iekšpusē mainīgie tiek atjaunināti!# Slikti (iestrēgst mūžīgi, jo i vienmēr paliek 0): i = 0 while i < 5: print(i) # Labi (i palielinās, un cikls beigsies): i = 0 while i < 5: print(i) i += 1 - Nepareiza atkāpe ap
break/continue: Šīm komandām jāatrodas stingri zemifpārbaudes. Ja tās būs nepareizā līmenī, cikls var apstāties jau pašā pirmajā iterācijā bez iemesla. - Unreachable code (Nesasniedzams kods) pēc
break: Jebkura komanda, kas ierakstīta tieši zembreak(tajā pašā atkāpes līmenī), nekad netiks izpildīta.# Slikti (print nekad nenostrādās): if parole == "123": break print("Pareizi!") # Labi: if parole == "123": print("Pareizi!") break
Koda piemērs: Cikla kontrole
# Cikla kontroles paraugs ar spēlētāja izvēli
while True:
minejums = input("Uzmini skaitli (vai raksti 'stop'): ")
# Iziet no cikla pilnībā
if minejums.lower() == "stop":
print("Spēle pārtraukta.")
break
# Pārlēkt uz nākamo iterāciju, ignorējot tālāko kodu
if minejums == "":
print("Ievade nevar būt tukša!")
continue
print(f"Tu minēji: {minejums}")
Tu minēji: 5
Uzmini skaitli (vai raksti 'stop'):
Ievade nevar būt tukša!
Uzmini skaitli (vai raksti 'stop'): stop
Spēle pārtraukta.