ebSkola

3.5 Saraksti un For cikli

Stundas uzdevums: Izveidot datu kolekcijas, apstrādāt vairākus elementus vienlaicīgi un pielietot For ciklu, lai automatizētu spēles inventāra pārvaldību.

2.4.16. Lieto saliktas datu struktūras (saraksti, vārdnīcas). 2.4.14. Izmanto algoritmu vadības struktūras (sazarojumi, cikli).

70 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~15 min) - izveido sarakstu un izdrukā to ar for · 2. uzdevums (~25 min) - uzbūvē klases materiālu inventāru · 3. uzdevums (~20 min) - pārbaudi elementus ar in un iztestē tukšu sarakstu. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.

Pirms sāc: atver VS Code un izveido failu saraksti.py. Atceries, ka saraksta elementus numurē no 0, nevis no 1.

Teorija: Datu kolekcijas un iterācijas

Līdz šim vienā mainīgajā varējām saglabāt tikai vienu vērtību. Lai izveidotu klases projekta materiālu sarakstu, mums nepieciešama datu struktūra, kas spēj saturēt daudz elementu vienlaicīgi.

  • Lists (Saraksti) []: Mainīgais, kas satur vairākas vērtības noteiktā secībā. Elementus atdala ar komatu.
    # Saraksta izveide
    materiali = ["Marķieris", "Pieraksti", "Uzlīmes"]
  • For loop (Kolekciju cikls): Īpašs cikls, kas automātiski iziet cauri pilnīgi visiem saraksta elementiem pa vienam, bez nepieciešamības veidot skaitītājus (kā tas bija ar while).
    # Izies cauri visām lietām un tās izdrukās
    for lieta in materiali:
        print(f"Mapē ir: {lieta}")
  • Sarakstu metodes (Methods): Iebūvētas komandas sarakstu modificēšanai:
    • .append(elements) - pievieno jaunu elementu saraksta pašās beigās.
    • .remove(elements) - izdzēš norādīto elementu no saraksta.
  • Membership operator (Piederības operators) in: Ļauj ātri pārbaudīt, vai konkrēta vērtība eksistē sarakstā (atgriež True vai False).

Praktiskie uzdevumi

1. uzdevums -

Izveido sarakstu un izdrukā to ar for

Beigās viens cikls izdrukās visus saraksta elementus.

  1. Ieraksti materiali = ["Marķieris", "Pieraksti", "Uzlīmes"].
  2. Ieraksti print(materiali) un palaid.
  3. Ieraksti print(materiali[0]) un pieraksti, ko tas izdrukāja.
  4. Ieraksti print(materiali[2]) un pieraksti rezultātu.
  5. Uzraksti ciklu for lieta in materiali: un zem tā print(lieta).
  6. Palaid un saskaiti izdrukātās rindas.

Gatavs, kad: cikls izdrukā tieši trīs rindas, un materiali[0] ir pirmais elements, nevis otrais.

2. uzdevums -

Uzbūvē klases materiālu inventāru

Beigās programma pieņems jaunus materiālus un parādīs visu sarakstu.

  1. Ieraksti materiali = ["Tāfele", "Uzlīmes"].
  2. Uzraksti ciklu while True:.
  3. Ieraksti tajā jauns = input("Ko pievienot (vai 'gana')? ").
  4. Pievieno nosacījumu, kas ar break iziet, ja ievadīts gana.
  5. Pievieno rindu materiali.append(jauns).
  6. Izdrukā pēc cikla visu sarakstu ar for ciklu un f-string.
  7. Palaid un pievieno divus jaunus materiālus.

Gatavs, kad: pēc gana ievadīšanas programma izdrukā četrus materiālus - divus sākotnējos un divus tavus.

3. uzdevums -

Pārbaudi elementus ar in un iztestē tukšu sarakstu

Beigās programma pratīs pateikt, vai konkrēta manta sarakstā ir.

  1. Pievieno pārbaudi if "Marķieris" in materiali: un zem tā izdruku.
  2. Palaid un pievieno Marķieris, lai pārbaudi izpildītos.
  3. Palaid vēlreiz, nepievienojot marķieri, un pieraksti, kas notiek.
  4. Nomaini sākuma sarakstu uz tukšu: materiali = [].
  5. Palaid un uzreiz ievadi gana, neko nepievienojot.
  6. Pieraksti, vai for cikls izdrukāja kaut ko.
  7. Pieraksti vienu secinājumu: ko dara for cikls ar tukšu sarakstu.

Gatavs, kad: ar tukšu sarakstu programma neavarē - cikls vienkārši neizpildās neviena reizi.

Papildu uzdevums - Pievieno numerāciju izvadē

Ja pamatdarbs ir gatavs, izdrukā sarakstu ar kārtas numuriem.

  1. Ieraksti pirms cikla numurs = 1.
  2. Izdrukā ciklā print(f"{numurs}. {lieta}").
  3. Pievieno ciklā numurs += 1.
  4. Palaid un pārbaudi, vai numerācija sākas ar 1.
  5. Pieraksti, kāpēc numerācija sākas ar 1, bet indeksi - ar 0.

Gatavs, kad: saraksts izdrukājas kā 1. Tāfele, 2. Uzlīmes un tā tālāk.

Biežākās kļūdas (un kā tās labot):

  • Singular vs Plural (Vienaskaitlis pret daudzskaitli): Cikla mainīgajam jābūt loģiskam, lai nerastos apjukums. Mainīgais aiz for ir īslaicīgs, un tas iegūst elementa vērtību katrā solī.
    # Slikti (mulsinoši lasīt):
    for lietas in lietas: 
        print(lietas)
    
    # Labi (skaidra loģika):
    for lieta in lietas:
        print(lieta)
  • Pazudis kols (:): Tāpat kā if un while konstrukcijās, arī for cikla rindas beigās obligāti ir jābūt kolam, un nākamajai rindai jābūt iebīdītai (Indentation).
  • ValueError noņemot elementu: Funkcija .remove() izraisīs programmas avāriju, ja mēģināsi noņemt priekšmetu, kas sarakstā nemaz neeksistē. Drošs kods vispirms pārbauda:
    # Slikti (var sabrukt, ja pierakstu nav):
    materiali.remove("Pieraksti")
    
    # Labi (droša pārbaude pirms noņemšanas):
    if "Pieraksti" in materiali:
        materiali.remove("Pieraksti")

Koda piemērs: Operācijas ar sarakstu

# Saraksta inicializācija
materiali = ["Tāfele", "Uzlīmes"]

# Pievienošana
materiali.append("Marķieris")

# Pārbaude ar zarošanos
if "Marķieris" in materiali:
    print("Klases uzdevumu var sākt!")

# Izvadīšana ar For ciklu
print("\nKlases materiāli:")
for lieta in materiali:
    print(f">> {lieta}")
Klases uzdevumu var sākt!

Klases materiāli:
>> Tāfele
>> Uzlīmes
>> Marķieris