ebSkola

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.

2.4.14. Izmanto algoritmu vadības struktūras (sazarojumi, cikli).

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 while nosacī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.

  1. Ieraksti dzivibas = 3.
  2. Ieraksti while dzivibas > 0:.
  3. Ieraksti zem tā ar atkāpi print("Spēlējam! Dzīvības:", dzivibas).
  4. Pievieno ar to pašu atkāpi dzivibas -= 1.
  5. Palaid un saskaiti, cik rindas izdrukājās.
  6. Izdzēs rindu dzivibas -= 1 un palaid vēlreiz.
  7. Apturi programmu ar Ctrl+C un 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'.

  1. Izveido jaunu failu spele.py.
  2. Ieraksti while True:.
  3. Ieraksti zem tā minejums = input("Uzmini skaitli (vai 'stop'): ").
  4. Pievieno if minejums.lower() == "stop":.
  5. Ieraksti zem tā izdruku un komandu break.
  6. 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.

  1. Pievieno pirms break pārbaudes rindu if minejums == "":.
  2. Ieraksti zem tā izdruku Ievade nevar būt tukša! un komandu continue.
  3. Palaid un nospied Enter, neko neievadot.
  4. Pārbaudi, vai programma turpina prasīt, nevis avarē.
  5. Palaid un ievadi STOP ar lielajiem burtiem.
  6. Palaid un ievadi parastu skaitli, lai pārbaudītu, ka cikls turpinās.
  7. Pieraksti vienu secinājumu: ar ko break atšķiras no continue.

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.

  1. Ieraksti pirms cikla gajieni = 0.
  2. Pievieno ciklā pēc derīgas ievades gajieni += 1.
  3. Izdrukā pēc break kopējo gājienu skaitu.
  4. Pārliecinies, ka tukšās ievades netiek skaitītas.
  5. 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 while nosacījums nekad nekļūst False un ciklā nav break, 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 zem if pā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 zem break (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}")
Uzmini skaitli (vai raksti 'stop'): 5
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.