›_ ebskola.lv
← 3.2 3.4 →

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 darba sadalījums: 1. uzdevums (~20 min) - atjauno teorijas piemēru vai minimālo prototipu; 2. uzdevums (~25 min) - pielieto to galvenajā uzdevumā; 3. uzdevums (~25 min) - pārbaudi rezultātu, izlabo kļūdas un tikai beigās pieraksti vienu secinājumu. Papildus/4. līmeņa uzdevums ir paredzēts tikai tad, ja pamatdarbs ir pabeigts.

Pirms sāc: izmanto iepriekš apgūto un šīs lapas teorijas/koda piemērus. Ja vajadzīga jauna komanda vai rīks, vispirms atrodi tās paraugu teorijas sadaļā.

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).

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 - Iesildies ar gatavu piemēru

Šis ir īss iesildīšanās uzdevums. Nokopē sagatavi, ielīmē to pareizajā koda vietā un palaid. Šeit pietiek droši izmēģināt tēmu 3.3 While cikli un kontrole; detalizētu izpratni veidosi nākamajos uzdevumos.

Kopējamais piemērs vai sagatave: izmanto šo bloku kā starta punktu, nevis kā gala risinājumu.

while True:
    vards = input("Vārds: ")
    if vards == "":
        continue  # Ignorē tukšu ievadi un prasa vārdu no jauna
    print(f"Sveiks, {vards}!")
  1. Atver darba failu vai rīku. Python fragmentu ievieto main.py failā un palaid no termināļa.
  2. Nokopē visu piemēra bloku no šī uzdevuma un ielīmē to norādītajā vietā.
  3. Palaid kodu tieši tādu, kāds tas ir, un pārliecinies, ka parādās rezultāts, izvade vai vismaz nav kļūdas paziņojuma.
  4. Atrodi vienu drošu vietu, ko drīkst mainīt: tekstu, skaitli, krāsu, mainīgā vērtību vai testa ierakstu.
  5. Maini tikai šo vienu vērtību un palaid kodu vēlreiz.
  6. Salīdzini rezultātu pirms un pēc izmaiņas. Ja parādās kļūda, atcel pēdējo izmaiņu un palaid vēlreiz.
  7. Turpini pie 2. uzdevuma tikai tad, kad šis mazais piemērs darbojas.

2. uzdevums - Ievieto algoritmu projektā

Pievieno šīs stundas paņēmienu kā nelielu, strādājošu projekta daļu.

  1. Izvēlies vienu konkrētu projekta vietu: ievadi, aprēķinu, izvēli, ciklu, datu struktūru, funkciju vai rezultāta izvadi.
  2. Nosauc funkcijas un mainīgos pēc to lomas, piemēram, punkti, gajiens, atbilde, rezultats vai parbauda_ievadi().
  3. Uzraksti funkciju vai koda bloku, kas nolasa sākuma datus, tos apstrādā un atgriež vai izvada rezultātu.
  4. Savieno šo kodu ar jau esošo projekta plūsmu, nevis atstāj to atsevišķā demonstrācijā.
  5. Pievieno vienu īsu komentāru pie sarežģītākās darbības.
  6. Pārbaudi, ka iepriekšējais kods joprojām darbojas pēc jaunā fragmenta pievienošanas.
  7. Salabo pirmo atrasto kļūdu pirms paplašini risinājumu.
  8. Veic Git commit ar īsu ziņu par pievienoto funkcionalitāti.

3. uzdevums - Testē kodu un izdari secinājumu

Pārbaudi, vai algoritms darbojas paredzami vairākās situācijās.

  1. Izveido trīs testa scenārijus: parasta ievade, robežgadījums un kļūdaina vai tukša ievade.
  2. Palaid parasto scenāriju un pārbaudi termināļa izvadi.
  3. Palaid robežgadījumu ar mazāko, lielāko vai tukšāko vērtību, ko šis kods var saņemt.
  4. Palaid kļūdaino scenāriju un pārbaudi, vai programma neavarē.
  5. Izlabo vienu konkrētu problēmu kodā, datos vai ievades pārbaudē.
  6. Pārbaudi labojumu vēlreiz ar visiem trim scenārijiem.
  7. Beigās pieraksti vienu secinājumu: kura koda rinda vai algoritma solis vislabāk palīdzēja saprast tēmu 3.3 While cikli un kontrole.

Papildu uzdevums - Pievieno mazu funkciju

Ja pamatdarbs ir pabeigts, paplašini projektu ar vienu nelielu programmētu uzlabojumu.

  1. Izvēlies vienu mazu papildinājumu, kas izmanto to pašu šīs stundas paņēmienu.
  2. Pievieno vienu jaunu mainīgo, funkciju, nosacījumu, ciklu, datu elementu vai rezultāta izvadi.
  3. Savieno papildinājumu ar esošo projekta kodu.
  4. Pārbaudi, ka pamatfunkcija un papildinājums darbojas kopā.
  5. Saglabā izmaiņas ar Git commit tikai pēc veiksmīgas pārbaudes.

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.
⬅ Iepriekšējā stunda Nākamā stunda ➡