ebSkola

5.3 For cikli

Stundas uzdevums: Pārveidot datu "jucekli" par skaistu saskarni. Apgūsi, kā izmantot for ciklus, lai "izķemmētu" sarakstus un vārdnīcas, parādot spēlētājam glītu inventāru, statusa ziņojumus un aprēķinot spēles progresu automātiski.

SR 2.4.14. (Ciklu izmantošana datu apstrādei)

70 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~15 min) - izej cauri sarakstam ar for · 2. uzdevums (~25 min) - izdrukā vārdnīcu ar .items() · 3. uzdevums (~20 min) - saskaiti un filtrē ciklā. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.

Pirms sāc: atver VS Code un izveido failu cikli_kolekcijas.py. Noderēs 5.1 saraksti un 5.2 vārdnīcas.

Teorija: Iterācija (pārlūkošana)

Iterācija ir process, kurā dators izpilda vienu un to pašu koda bloku katram kolekcijas elementam. Tas ir kā pārskaitīt visas monētas makā vienu pēc otras, nezinot iepriekš, cik to tur būs.

Sintakse Pielietojums Rezultāts
for x in saraksts: Sarakstiem Piekļūst katram elementam (x) pēc kārtas.
for a, v in dict.items(): Vārdnīcām Ļauj izmantot gan atslēgu (a), gan vērtību (v) vienlaicīgi.
for a in dict.keys(): Vārdnīcām Piekļūst tikai nosaukumiem (atslēgām).

Atkāpju (Indentation) nozīme

Viss kods, kas atrodas "zem" for rindas un ir nobīdīts pa labi (4 atstarpes jeb 1 Tab), tiks atkārtots. Tiklīdz Tu beidz rakstīt ar atkāpi, cikls beidzas, un dators turpina lasīt kodu tālāk tikai vienreiz.

Praktiskie uzdevumi

1. uzdevums -

Izej cauri sarakstam ar for

Beigās viens cikls apstrādās jebkura garuma sarakstu.

  1. Ieraksti materiali = ["marķieris", "taimeris", "uzlīmes"].
  2. Uzraksti for lieta in materiali: un zem tā izdruku.
  3. Palaid un saskaiti rindas.
  4. Pievieno sarakstam vēl vienu elementu un palaid vēlreiz.
  5. Pārbaudi, vai bija jāmaina cikls.
  6. Nomaini sarakstu uz tukšu un palaid vēlreiz.

Gatavs, kad: cikls pielāgojas jebkuram garumam, un ar tukšu sarakstu tas vienkārši neizpildās.

2. uzdevums -

Izdrukā vārdnīcu ar .items()

Beigās tu vienā ciklā dabūsi gan nosaukumu, gan vērtību.

  1. Ieraksti statistika = {"Punkti": 150, "Enerģija": 85}.
  2. Uzraksti for nosaukums, skaitlis in statistika.items():.
  3. Izdrukā ciklā print(f"{nosaukums}: {skaitlis}").
  4. Palaid un pārbaudi izvadi.
  5. Nomaini ciklu uz for a in statistika: un izdrukā a.
  6. Pieraksti, ko izdrukāja šis variants - atslēgas vai vērtības.
  7. Pievieno .upper() nosaukumam un palaid vēlreiz.

Gatavs, kad: ar .items() dabū abus, bet bez tā - tikai atslēgas.

3. uzdevums -

Saskaiti un filtrē ciklā

Beigās cikls ne tikai izdrukās, bet arī izrēķinās.

  1. Ieraksti pirms cikla kopa = 0.
  2. Pievieno ciklā kopa += skaitlis.
  3. Izdrukā pēc cikla kopsummu.
  4. Pievieno ciklā nosacījumu, kas izdrukā tikai vērtības virs 100.
  5. Palaid un pārbaudi, cik ierakstu izfiltrējās.
  6. Pievieno skaitītāju, cik ierakstu bija virs 100.
  7. Pieraksti vienu secinājumu: kāpēc kopa jādefinē pirms cikla, nevis tajā.

Gatavs, kad: kopsumma sakrīt ar visu vērtību summu, un filtrs atlasa tikai lielās vērtības.

Papildu uzdevums - Pievieno enumerate

Ja pamatdarbs ir gatavs, izdrukā sarakstu ar automātisku numerāciju.

  1. Uzraksti for nr, lieta in enumerate(materiali, 1):.
  2. Izdrukā ciklā print(f"{nr}. {lieta}").
  3. Palaid un pārbaudi, ar ko sākas numerācija.
  4. Nomaini 1 uz 0 un palaid vēlreiz.
  5. Pieraksti, ko dara otrais arguments funkcijā enumerate.

Gatavs, kad: ar enumerate(materiali, 1) numerācija sākas ar 1, nevis ar 0.

Biežākās kļūdas:

1. Pazudis kols: Neaizmirsti : rindas beigās pēc for teikuma.
2. Atkāpes kļūda: Ja kods nav nobīdīts pa labi, Python nezinās, ka tam jābūt cikla daļai un izpildīs to tikai vienreiz.
3. Items aizmirstība: Mēģinot iet cauri vārdnīcai bez .items() (tikai for x in vardnica:), Tu iegūsi tikai atslēgu nosaukumus, nevis pašus datus.

Koda piemērs

# Glīta vārdnīcas izvade
statistika = {"Punkti": 150, "Enerģija": 85, "Mēģinājumi": 12}

print("--- TAVA STATISTIKA ---")
for nosaukums, skaitlis in statistika.items():
    # Lietojam .upper(), lai atslēgas būtu ar lielajiem burtiem
    print(f"{nosaukums.upper()}: {skaitlis}")
    
print("-----------------------")
--- TAVA STATISTIKA ---
PUNKTI: 150
ENERĢIJA: 85
MĒĢINĀJUMI: 12
-----------------------