Python
Aritmetika
Resnična funkcionalnost programiranja se izkaže, ko
uvedemo krmiljenje programskega teka. Krmilni stavki spreminjajo tok
akcij v programu. Vzermimo primer
print "arith.py: program za sestevanje ali odstevanje dveh stevil" print "Vnesi vrednost za a:", a = input() print "Vnesi vrednost za b:", b = input() print "Zelis sestevati ali odstevati?" print "Vnesi '+' za sestevanje, '-' za odstevanje" izbira = raw_input() if izbira=='+': print a, "+", b, "=", a+b elif izbira=='-': print a, "-", b, "=", a-b else: print "Napacna izbira"
|
Vse do vrstice 8 nam je že precej znano. V vrstici 8 pa smo uvedli
funkcijo "raw_input", ki
je verjetno bolj uporabna od funkcije "input". "raw_input" vrne niz
(zaporedje znakov) tako, kot
smo ga vtipkali. Če pa uporabimo funkcijo "input", pa Python interpretira naš
vnos tako,
kot če bi neposredno vnesli v program. Razlika med obema funkcijama je
razvidna iz naslednjih zgledov:
ena = input() ena = raw_input()
|
Če bi v obeh primerih vtipkali "1" in zatem pritisnili
Return, bi dobili naslednji izpis
Če pa bi za naslednja dva stavka vtipkali "Janez"
ime = input() ime = raw_input()
|
bi dobili
ime = Janez ime = "Janez"
|
Prva vrstica je napaka, saj Python ne ve, kaj je to Janez.
No, pa se povrnimo k programu. Naslednja vrstica je
To
zahteva od Pythona, da preveri, ali je vrednost "izbira" enaka nizu
'+'. Pozor da dvojni enačaj. Takega uporabljamo, ker je navaden enačaj
že uporabljen za dodeljevanje oziroma prirejanje vrednosti neki
spremenljivki.
Enojnemu enačaju pravimo tudi operator prirejanja. Fvojni enačaj pa je
operator ennakosti, s pomočjo katerega preverjamo enakost med dvema
vrednostima.
Rezultat operacije enakosti je logična vrednost (strokovno temu
pravimo tudi " boolean"). Logične vrednosti so v računalništvu
ali
"true" ali "false", včasih jih predstavljamo tudi kot 1 in 0. Če je v
našem primeru "izbira" enaka '+' , je logični rezultat "true"
oziroma
1. Če pa smo vtipkali kaj drugega in zato izbira ni enaka '+', bo
rezultat enak 0 (torej false). Naj za nadaljevanje obravnave
našega
programa predpostavimo, da smo vtipkali '+'. Tedaj je zgornji izraz
ekvivalenten:
Za razlago, kaj se nato zgodi, si oglejmo splošno sintakso
stavka if:
if <logična vrednost 1>: prvi blok stavkov.. elif <logična vrednost 2>: drugi blok stavkov.. else: tretji blok stavkov..
|
Če je <logična vrednost 1> enaka true (1), bo Pyton
izvedel stavke, ki so v <prvem bloku stavkov>. Sicer jih bo
Python preskočil do besede "elif" in tu preveril, ali je <logična
vrednost 2> enaka true. Če je, bo Python izvedel stavke v
<drugem bloku stavkov> in preostanek preskočil. Če pa tudi
to ni true, bo Python preskočil vse stavke do vrstice "else" in izvedel
stavke v <tretjem bloku stavkov>.
Ker je v našem primeru prva logična vrednost enaka 1, bo
Python
izvedel prvi blok stavkov. V našem primeru je v tem bloku en sam
stavek:
print a, "+", b, "=", a+b
|
Kaj se s tem stavkom zgodi, lahko uganemo. Preostali stavki pa bodo
preskočeni.
Če bi vtipkali '-' , bi se namesto tega izvedel stavek
print a, "-", b, "=", a-b
|
Če pa bi vnesli karkoli drugega, bi se izvedel stavek
Povejmo še kaj o stavku "if", ki je zelo prilagodljiv
Tako
"elif" kot "else" nista obvezna. Tako je minimalna oblika stavka
"if" naslednja
in "naredi to" bo izveden le, če je <pogoj>
izpolnjen (je torej true).
Stavek "else" kar pogosto uporabljamo skupaj s stavkim "if" (in
ga ne moremo uporabljati samostojno). Imamo torej pogosto obliko:
if <pogoj>: naredi to else: naredi ono
|
"naredi ono" se izvede le, če je <pogojt> neizpolnjen (torej false). Verjetno ste ugotovili,
kako je zamik stavkov v Pythonu pomemben. Z zamikom nakažemo Pythonu,
kaj je to stavčni blok. Poglejmo si naslednji primer:
1 print "Vnesi stevilo manjse od 10:" 2 stevilo = input() 3 if stevilo > 9: 4 print "Stevilo je preveliko!" 5 stevilo = 9 6 print "Stevilo sem avtomatsko popravil." 7 else: 8 print "Dobro si izbral" 9 print "Tvoje stevilo je", stevilo
|
Zamik v zgornjem programu je namenjen temu, da programer vidi, kako
program deluje. Za lazji komentar primera smo vrstice
oštevilčili.
Vrstice , oštevilčene od 4 do 6, že vizualno sodijo skupaj. Tako
jih
skupaj obravnava tudi interpreter Python. Če v našem primeru
vtipkamo
število, večje ofd 9, bo Python izvedel celotni blok zamaknjenih
vrstic
(4-6). Python konča, ko se zamik zaključi (pri stavku "else"). Python
nato preskoči blok, ki pada k "else" , in nadaljuje s
stavkom za tem blokom (torej ko je naskednjega zamika konec (pri stavku
"print" statement)). I Če pa je vnešeno število
manjše ali enako 9,
Python preskoči prvi blok stavkov, ki sodijo k stavku "if" , in
izvede blok stavkov, ki sodijo k stavku "else". Ko zaključi blok
"else", nadaljuje z izvajanjem in torej izvedbo stavka "print".
Druga uporabna razširitev stavka "if" je stavek "elif" kar je
okrajšava za "else if". Zamislimo si, da ima naš
program
naslednji del kode:
... if username == "guest": print "Guest access granted. Some operations are not permitted." security_level = 0 else: if username == "administrator": print "System administrator access granted. No restrictions." security_level = 10 else: print "Normal user", username, "logged in. Good to see you." security_level = 1 ...
|
Najprej opazimo gnezdenje stavka "if" znotraj bloka
stavkov. To je povsem dopustno in celo pričakovano. Paziti moramo na
zamike. Če pa bi imeli še več razredov uporabnikov, bi postalo
zamikanje že kar nepraktično. "elif" nudi poenostavitev, saj lahko isto
napišemo bolj elegantno:
... if username == "guest": print "Guest access granted. Some operations are not permitted." security_level = 0 elif username == "administrator": print "System administrator access granted. No restrictions." security_level = 10 elif username == "operator": print "Operator access granted. User account management enabled." security_level = 2 elif username == "backup": print "Backup access granted. Tape device management enabled." security_level = 3 else: print "Normal user", username, "logged in. Good to see you." security_level = 1 ...
|
Še enkrat se spomnimo, da je "elif" v resnici okrajšava
za "else: if".
Lahko uporabimo tudi kombinacijo else.. if, vendar bi morali paziti na
pravilno uporabo oziroma gnezdenje zamikov.