3.2 Loģiskie operatori
Stundas uzdevums: Pielietot Logical operators (Loģiskos operatorus), lai optimizētu kodu un aizstātu sarežģītus, Nested if (Ligzdotos) nosacījumus ar vienkāršākām un lasāmākām izteiksmēm.
70 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~15 min) - izmēģini and, or un not · 2. uzdevums (~25 min) - uzraksti lietussarga padomdevēju · 3. uzdevums (~20 min) - saīsini ligzdotus if ar loģiskajiem operatoriem. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.
Pirms sāc: atver VS Code un izveido failu logika.py. Noderēs 3.1 stundā apgūtie salīdzināšanas operatori.
Teorija: Loģisko izteiksmju apvienošana
Logical operators (Loģiskie operatori) ļauj datoram izvērtēt vairākus nosacījumus vienlaicīgi. Tas palīdz izvairīties no gara un nepārskatāma koda.
1. Operators "and" (UN)
Atgriež True (Patiess) tikai tad, ja pilnīgi visi nosacījumi ir patiesi.
# Izpildīsies tikai tad, ja spēlētājam ir pietiekams līmenis UN pietiekami daudz punktu
if limenis >= 10 and punkti >= 50:
print("Bonusa uzdevums atbloķēts!")
2. Operators "or" (VAI)
Atgriež True, ja vismaz viens no nosacījumiem ir patiess.
# Izpildīsies, ja ievadīts viens vai otrs atslēgvārds
if ievade == "stop" or ievade == "beigt":
print("Spēle pārtraukta.")
3. Operators "not" (NE)
Apgriež Boolean (Patiesumvērtības) stāvokli pretējā. True kļūst par False un otrādi.
# Izpildīsies, ja spēle NAV beigusies (speles_beigas ir False)
speles_beigas = False
if not speles_beigas:
print("Spēle turpinās...")
Praktiskie uzdevumi
1. uzdevums -
Izmēģini and, or un not
Beigās tu zināsi, ar ko and atšķiras no or.
- Ieraksti
print(True and False)un palaid. - Ieraksti
print(True or False)un palaid. - Ieraksti
print(not True)un palaid. - Pieraksti visus trīs rezultātus README.md failā.
- Ieraksti
print(5 > 3 and 2 > 10)un paskaidro sev rezultātu. - Ieraksti
print(5 > 3 or 2 > 10)un salīdzini.
Gatavs, kad: tu vari pateikt: and prasa visus patiesus, or - vismaz vienu.
2. uzdevums -
Uzraksti lietussarga padomdevēju
Beigās programma pateiks, vai tu samirksi.
- Ieraksti
lietus = Trueunir_lietussargs = False. - Ieraksti
if lietus and not ir_lietussargs:un zem tā brīdinājumu. - Pievieno
elif lietus and ir_lietussargs:un zem tā mierinošu ziņu. - Pievieno
else:un zem tā ziņu par saulainu laiku. - Palaid un pieraksti izvadi.
- Nomaini
ir_lietussargsuzTrueun palaid vēlreiz. - Nomaini
lietusuzFalseun palaid trešo reizi.
Gatavs, kad: visi trīs mainīgo salikumi dod trīs dažādas izvades.
3. uzdevums -
Saīsini ligzdotus if ar loģiskajiem operatoriem
Beigās tavs kods būs īsāks, bet darīs tieši to pašu.
- Ieraksti jaunā failā ligzdotu variantu:
if limenis >= 10:un zem tā ar atkāpiif punkti >= 50:. - Ieliec vēl dziļāk izdruku
Bonuss atbloķēts!. - Uzstādi
limenis = 12unpunkti = 60un palaid. - Pārraksti abus
ifvienā rindā arand. - Palaid vēlreiz un pārliecinies, ka izvade nav mainījusies.
- Saskaiti, par cik rindām kods kļuva īsāks.
- Pieraksti vienu secinājumu: kad ligzdots
ifir sliktāks parand.
Gatavs, kad: abi varianti dod vienu un to pašu izvadi, bet otrs ir īsāks vismaz par divām rindām.
Papildu uzdevums - Uzraksti paroles pārbaudi
Ja pamatdarbs ir gatavs, izmanto or vairākiem atļautiem vārdiem.
- Ieraksti
ievade = input("Komanda: ").lower(). - Uzraksti nosacījumu
if ievade == "stop" or ievade == "beigt":. - Izdrukā zem tā ziņu par programmas beigām.
- Palaid ar vārdu
stop, tad arbeigt, tad arBEIGT. - Pieraksti, kāpēc arī
BEIGTnostrādāja.
Gatavs, kad: visi trīs varianti nostrādā, un tu vari izskaidrot, ko dara .lower().
Biežākās kļūdas (un kā tās labot):
- Nepilnīgs OR nosacījums: Pārbaudot vienu mainīgo pret vairākām vērtībām, mainīgais ir jāraksta katru reizi atkārtoti. Dators tekstu "b" uztver kā automātiski patiesu.
# Slikti (Vienmēr būs True): if x == "a" or "b": # Labi: if x == "a" or x == "b": - Prioritātes un iekavu trūkums: Kad apvieno
andunor, lieto iekavas, lai būtu skaidrs, kurš nosacījums tiek pārbaudīts pirmais (tāpat kā matemātikā).# Slikti: if a == 1 and b == 2 or c == 3: # Labi: if (a == 1 and b == 2) or c == 3: - Pārāk sarežģīts "not": Lai gan
notir noderīgs, bieži to var aizstāt ar vienkāršāku salīdzināšanas operatoru, lai uzlabotu koda lasāmību.# Slikti: if not (vecums < 18): # Labi: if vecums >= 18:
Koda piemērs: Loģikas apvienošana
# Lietotāja ievade un definēti mainīgie
lietus = True
ir_lietussargs = False
# Loģisko operatoru izmantošana zarošanās procesā
if lietus and not ir_lietussargs:
print("Tu samirksi! Paņem lietussargu.")
elif lietus and ir_lietussargs:
print("Lietus līst, bet Tev ir lietussargs. Viss labi!")
else:
print("Laiks ir saulains vai nav pamata uztraukumam.")