›_ ebskola.lv
Programmēšana I · 3. tēma · 6 stundas - if · while · try/except

Vadības struktūras // un validācija

Iemāci datoram pieņemt lēmumus ar if/elif/else, atkārtot darbības ar while un apstrādāt kļūdas ar try/except.

6 stundas if · while · for try · except projekts 3.6
if · elif · else while · break · continue try · except · raise
# 02 špikeris

3. tēmas špikeris - vadības struktūras un validācija

Zarošanās, loģiskie operatori, cikli, kļūdu apstrāde un saraksti. Katrs bloks atbilst vienai stundai.

3.1-3.2 Zarošanās un loģiskie operatori

# Salīdzināšana vienmēr dod True vai False
==  vienāds        !=  nav vienāds
>   lielāks        <   mazāks
>=  lielāks vai vienāds    <=  mazāks vai vienāds

# =  piešķir vērtību      ==  salīdzina   <- biežākā kļūda!

if vecums >= 18:
    print("Pilngadīgs")
elif vecums > 0:              # pārbauda TIKAI, ja iepriekšējais bija False
    print("Nepilngadīgs")
else:
    print("Kļūda")

# and / or / not
if limenis >= 10 and punkti >= 50:      # abiem jābūt patiesiem
if ievade == "stop" or ievade == "beigt":  # pietiek ar vienu
if lietus and not ir_lietussargs:       # not apgriež otrādi

# Ligzdots if -> īsāk ar and
if a: 
    if b: darit()        # tas pats, kas:   if a and b: darit()

Zaru secība ir svarīga: elif vecums >= 65 nekad nenostrādās, ja virs tā ir if vecums >= 18.

3.3 Cikli: while, break, continue

# Skaitītāja cikls
dzivibas = 3
while dzivibas > 0:
    print("Spēlējam!", dzivibas)
    dzivibas -= 1        # BEZ ŠĪ cikls nekad nebeidzas (Ctrl+C, lai apturētu)

# Spēles cikls
while True:
    ievade = input("Gājiens (vai 'stop'): ").lower().strip()

    if ievade == "stop":
        break            # iziet no cikla PAVISAM

    if ievade == "":
        print("Ievade nevar būt tukša!")
        continue         # atgriežas cikla SĀKUMĀ, izlaižot pārējo

    print("Spēlēju ar:", ievade)

# .lower()  - pārvērš mazajos burtos  -> "STOP" arī nostrādā
# .strip()  - noņem liekās atstarpes

break = beidz ciklu. continue = izlaid šo apli, bet turpini.

3.4 Kļūdu apstrāde un validācija

# Divi dažādi pārbaužu veidi:
#   try/except  - ķer KĻŪDU (nevar pārvērst par skaitli)
#   if          - ķer NEDERĪGU VĒRTĪBU (skaitlis ir, bet negatīvs)

while True:
    try:
        likme = float(input("Ievadi likmi: "))

        if likme <= 0:
            print("Likmei jābūt pozitīvai!")
            continue          # vērtība nederīga -> prasa vēlreiz

        break                 # viss kārtībā -> ejam tālāk

    except ValueError:
        print("Kļūda! Ievadi skaitli ar punktu, piemēram 2.5")

print("Likme pieņemta:", likme)

# Biežākie kļūdu tipi:
#   ValueError  int("abc")            IndexError  saraksts[99]
#   KeyError    d["nav taada"]        TypeError   "5" + 5

break liec try bloka beigās - tad tas nostrādā tikai pēc veiksmīgas konvertācijas.

3.5 Saraksti un for cikls

materiali = ["Tāfele", "Uzlīmes"]

materiali.append("Marķieris")     # pievieno BEIGĀS
len(materiali)                    # 3 - elementu skaits
materiali[0]                      # "Tāfele"  - pirmais ir 0, nevis 1!
materiali[-1]                     # "Marķieris" - pēdējais

if "Marķieris" in materiali:      # vai sarakstā ir?
    print("Var sākt!")

for lieta in materiali:           # iet cauri VISIEM elementiem
    print(f">> {lieta}")

# Ar numerāciju
for nr, lieta in enumerate(materiali, 1):
    print(f"{nr}. {lieta}")

# Tukšs saraksts NAV kļūda - cikls vienkārši neizpildās neviena reizi
tukss = []
for x in tukss:
    print("šī rinda nekad neizpildīsies")

Pēdējā elementa indekss ir len(saraksts) - 1. saraksts[len(saraksts)] vienmēr ir IndexError.

3.6 Noslēguma projekts: viss kopā

import random

varianti = ["akmens", "skeres", "papirs"]
manas, datora = 0, 0

while True:
    gajiens = input("Izvēlies (vai 'stop'): ").lower().strip()

    if gajiens == "stop":
        break
    if gajiens not in varianti:          # validācija
        print("Nederīga izvēle.")
        continue

    dators = random.choice(varianti)
    print(f"Dators: {dators}")

    if gajiens == dators:
        print("Neizšķirts")
    elif (gajiens == "akmens" and dators == "skeres") or \
         (gajiens == "skeres" and dators == "papirs") or \
         (gajiens == "papirs" and dators == "akmens"):
        manas += 1
    else:
        datora += 1

print(f"Rezultāts: {manas} : {datora}")

Šajā vienā programmā ir visa tēma: saraksts, while, break, continue, if/elif/else un or.

› while True: # cikls darbojas, līdz tiek izpildīts break