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.
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.
- Ieraksti
materiali = ["Marķieris", "Pieraksti", "Uzlīmes"]. - Ieraksti
print(materiali)un palaid. - Ieraksti
print(materiali[0])un pieraksti, ko tas izdrukāja. - Ieraksti
print(materiali[2])un pieraksti rezultātu. - Uzraksti ciklu
for lieta in materiali:un zem tāprint(lieta). - 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.
- Ieraksti
materiali = ["Tāfele", "Uzlīmes"]. - Uzraksti ciklu
while True:. - Ieraksti tajā
jauns = input("Ko pievienot (vai 'gana')? "). - Pievieno nosacījumu, kas ar
breakiziet, ja ievadītsgana. - Pievieno rindu
materiali.append(jauns). - Izdrukā pēc cikla visu sarakstu ar
forciklu un f-string. - 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.
- Pievieno pārbaudi
if "Marķieris" in materiali:un zem tā izdruku. - Palaid un pievieno
Marķieris, lai pārbaudi izpildītos. - Palaid vēlreiz, nepievienojot marķieri, un pieraksti, kas notiek.
- Nomaini sākuma sarakstu uz tukšu:
materiali = []. - Palaid un uzreiz ievadi
gana, neko nepievienojot. - Pieraksti, vai
forcikls izdrukāja kaut ko. - Pieraksti vienu secinājumu: ko dara
forcikls 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.
- Ieraksti pirms cikla
numurs = 1. - Izdrukā ciklā
print(f"{numurs}. {lieta}"). - Pievieno ciklā
numurs += 1. - Palaid un pārbaudi, vai numerācija sākas ar 1.
- 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
forir ī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āifunwhilekonstrukcijās, arīforcikla 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 materiāli:
>> Tāfele
>> Uzlīmes
>> Marķieris