Pogojni stavki
Pogojni stavki
Začnimo, kjer smo končali. Imamo program za izračun (in izpis) indeksa telesne teže.
Zdaj si želimo, da bi program povedal še, ali je uporabnik slučajno preobilen. Prvi, seveda napačni poskus, bi bil takšen.
Program v tej obliki bi, v širši rabi, povzročal anoreksijo, saj vse po
vrsti pošilja na hujšanje. Zadnjo vrstico, izpis poziva k hujšanju, mora izvesti
le, če je bmi
večji od 25 (ta meja namreč velja za mejo debelosti,
oziroma, politično korektno, prekomerne telesne teže).
To storimo tako, da pred vrstico dodamo pogoj. Ta se glasi "če bmi > ;25", le v angleščini.
Ne spreglejmo dveh pomembnih reči. Na konec pogoja smo postavili dvopičje. To ne služi le za okras: dvopičja ne smemo izpustiti. Python na tem mestu zahteva dvopičje. Druga, še opaznejša reč je, da smo drugo vrstico zamaknili. Sledilo bi ji lahko še več zamaknjenih vrstic, ki bi se izvedle le, le je pogoj izpolnjen.
Tako kot smo zastavili zdaj, se print
a, ki sta zamaknjena
izvedeta le, če je oseba preobilna, zadnji print
, ki je spet
izven pogoja, pa se izvede v vsakem primeru.
Tale razlaga je - upam, da se strinjamo - skoraj nepotrebna, saj je to, v katerem primeru se izvede kaj, očitno že kar iz oblike programa. (To je razlog, zakaj je Python tako simpatičen jezik za začetnike: programe v njem je veliko lažje brati kot programe v kakem bolj kriptičnem jeziku.)
Program bi bil še bolj simpatičen, če bi tiste, ki niso predebeli, pohvalil.
Pogojnemu stavku (ups, nov izraz; računalnikarji nekaterim rečem rečemo
stavek, ker pa vas tule ne bom mučil s terminologijo, si pod besedo
stavek predstavljajte preprosto "kos programa") lahko sledi še
else
, ki vsebuje tisto, kar naj se zgodi, če pogoj ni
izpolnjen.
Do sem vse lepo in prav, vendar: kaj bomo z anoreksičnimi? Program bi jim mirno svetoval nadaljnje hujšanje. Ne: pri takšnih, ki imajo BMI manjši od 18.5, moramo zastokati, naj vendar že začnejo jesti.
Vidimo foro? Znotraj if
a ali else
a smemo
ugnezditi nov pogoj. Zamikamo ga lepo naprej.
Da bodo reči še nekoliko daljše (a poučnejše, dodajmo še en
print
.
Zdaj program vsem, ki niso predebeli, napiše dobro novico, da niso predebeli. Šele nato se loti preverjanja, da niso slučajno presuhi.
Da se ne izgubimo, spet malo skrajšajmo program.
Znotraj pogojnih stavkov seveda lahko pišemo tudi druge reči, ne le
print
ov. Takole: uporabniki programa se bodo pogosto zmotili in
namesto višine v metrih vpisali višino v centimetrih, zato jih bo program
obtožil težke anoreksije. To lahko popravimo preprosto tako, da program še pred
računanjem BMI preveri, ali je višina slučajno večja od, recimo, treh metrov.
V tem primeru sklepa, da je uporabnik podal težo v centimetrih. Težavo reši
tako, da številko, ki jo je vpisal uporabnik, deli s 100.
Začetek programa tako postane takšen.
Naprej pa gre tako kot prej.
Operatorji za primerjanje, združevanje pogojev
Imamo >
in <
. Manjkajo nam še znaki za
večje ali enako, manjše ali enako ter za različno. Na tipkovnici namreč ni
videti ničesar primernega. Prva dva zapišemo z >=
in
<=
. Različnost zapišemo kot !=
. Ali je BMI
različen od 22, bi zapisali bmi != 22
.
V resnici pa nam manjka še eden: enakost. V programskih jezikih se izogibamo
temu, da bi isti znak ali beseda pomenila različne reči (in tako povzročala
dvoumnost). Ali je BMI enak 22 ne bi zapisali z bmi = 22
, saj bi
to očitno (precej) spominjalo na prirejanje. Ne, =
je in bo
rezerviran za prirejanje. Ali sta dve stvari enaki, se vprašamo z
==
; torej bmi == 22
.
Drugo, kar nam bo prišlo prav, je združevanje pogojev. Če se hočemo vprašati
ali velja in to in ono, uporabimo and
. Tako bi lahko napisali,
recimo
(Seveda gre tudi krajše, napisali bi lahko
if 18.5 < bmi < 25:
.
Če nas zanima, ali velja ali to ali ono, uporabimo or
.
Končno, če želimo nekaj negirati, uporabimo not
.
Vse te and
e, or
e in not
e lahko
kombiniramo po želji, tako kot smo vajeni iz logike pri matematiki. Operator
and
ima prednost pred or
, not
pa pred
obema. Kadar je potrebno, pa uporabimo oklepaje.