Osnove

V tem poglavju si bomo ogledali osnove programiranja, s katerimi lahko vzpostavimo osnovno komunikacijo z računalnikom in naredimo zelo enostavne programe.

Spremenljivke

Spremenljivke so prostori v spominu z določenim imenom, v katere lahko spravimo neko vrednost. Tako lahko npr. pod ime leta spravimo vrednost 5. V osnovi ločimo več tipov spremenljivk, npr. float (realna števila), int (cela števila) in string (nize znakov). Začetek in konec stringa je označen z dvojnim ali enojnim narekovajem (" ali '). Python tipe spremenljivk določa samodejno.

Spremenljivke se definira na naslednji način:

1
2
3
4
5
6
# -*- coding: utf-8 -*-

x = 2
y = 5
ime = "Andreja"
leta = x + y

Hint

Znak = v programiranju nima istega pomena kot v matematiki. = pravzaprav pomeni “vrednost na desni zapiši v spremenljivko na levi”. Torej bo ukaz x = x + 2 dejansko pomenil “x povečaj za 2”.

Komentarji

Komentarji so programerjeve opombe v kodi, namenjene bralcu – sebi ali nekomu drugemu, ki bo to bral za njim. Interpreter jih ignorira. V Pythonu (tako kot v veliko drugih jezikih) obstajajo enovrstični in večvrstični komentarji. Enovrstični komentarji se začnejo z znakom #, vse za tem znakom v vrsti se ignorira (tako lahko # uporabimo na začetku vrste ali pa pozneje). Večvrstični komentarji se začnejo in končajo s trojnim narekovajom """, vse med začetkom in koncem pa se ignorira.

Komentarje se ponavadi napiše za uvod/obrazložitev programa, pred manj razumljiv del kode, da obrazložimo njeno delovanje, ali pa če želimo kakšen del kode trenutno umakniti iz programa, ne da bi ga izbrisali. Komentarji pogosto tudi obrazložijo in dokumentirajo kodo in narekujejo njeno uporabo.

Primer:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# -*- coding: utf-8 -*-

"""
Dobiti želimo absolutno vrednost spremenljivke x.

To naredimo tako da ...
"""

ime = "Janez"  # ime naj bo brez presledkov in se začne z veliko začetnico
# v absx shranimo absolutno vrednost x
x = -8
if x < 0:
    absx = -x
else:
    absx = x

Input in output

Input in output pomeni branje uporabnikovega vpisa in izpisovanje na zaslon. Uporabili smo funkcije input, int, print, format.

input(niz_znakov)

Izpiše niz_znakov in vrne niz znakov, ki ga je vtipkal uporabnik.

print(objekt)

Izpiše niz objekt objekt. Objekt je lahko število, niz znakov, ...

class str
format(niz, p1, p2, p3, ...)

Na mesto ki je v niz-u označeno z ‘{0}’ vstavi p1, na ‘{1}’ vstavi p2, ...

Ogledate si lahko tudi, kaj počne funkcija int().

Primer uporabe funkcije input in print:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# -*- coding: utf-8 -*-

"""
How to get input from the user. Note that this is Python 3+, the Python 2.7
version is in the "input.py" file.
"""

if __name__ == '__main__':
    # Get an integer from the user (will error on non-integer)
    x = int(input("Write an integer: "))
    print(x)

    # Get a float (will error on non-number)
    y = float(input("Write a float: "))
    print(y)

    # Get a string
    z = input("Write something: ")
    print(z)

Primer uporabe metode format:

1
2
3
4
5
6
7
# -*- coding: utf-8 -*-

x = 5
y = 10

# Izpišimo '5 plus 10 je enako 15'
print('{0} plus {1} je enako {2}'.format(x, y, x + y))

If stavki

Če želimo, da se naš program pod drugačnimi pogoji obnaša različno, uporabimo if stavek. Če je pogojev več, lahko za if uporabimo še elif (else if), ki doda dodatne pogoje. Če imamo pogojev veliko, elif uporabimo večkrat. Za konec pa lahko damo še else, ki se izvede takrat, ko ni bil izpolnjen noben od pogojev v if in elif stavkih. elif in else deli niso obvezni.

Sintaksa if stavkov je naslednja (pazljivi moramo biti na zamik po if stavku - dobimo ga tako, da pritisnemo tabulator, ki se nahaja nad CAPS LOCK tipko na tipkovnici):

1
2
3
4
5
6
7
8
if pogoj:
    # Se izvede če je izpolnjen pogoj
elif pogoj2:
    # Se izvede če je izpolnjen pogoj2 (in ni izpolnjen pogoj)
elif pogoj3:
    # Se izvede če je izpolnjen pogoj3 (in nista izpolnjena prejšnja pogoja)
else:
    # Se izvede če ni izpolnjen noben od zgornjih pogojev

Attention

Bodite pazljivi na dvopičje za pogojem in zamik v naslednji vrsti. Zamiki so v Pythonu zelo pomembni, saj z njimi označimo del kode, ki spada pod določen if stavek (in druge podobne stvari). Brez zamikov vaša koda ne bo delovala! Kodo zamaknete z uporabo tabulatorja, ki se nahaja nad tipko caps lock.

Pogoji

Pogoji so lahko enostavni ali sestavljeni. Enostavni pogoji so npr. primerjanje enakosti (je enako ==, ni enako !=), primerjanje vrednosti (večje >, večje ali enako >=, manjše >, manjše ali enako <=), sestavljeni pa so narejeni iz kombinacije enostavnih z uporabo logičnih operacij not, and, or, xor itd.

Primer:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# -*- coding: utf-8 -*-

x = int(input("Vpisite stevilo: "))
if x > 0:
    if x > 100:
        print("x je vecji od 100")
    else:
        print("x je pozitiven in manjsi ali enak 100")
elif x == -5:
    print("x je -5")
else:
    print("x je negativen in ni enak -5")

Zanke

Zanke se uporablja takrat, ko moramo neko stvar ponoviti večkrat. Če moramo npr. izpisati vsa števila med 1 in 100 uporabimo zanko. Če hočemo isto stvar ponoviti 3-krat, uporabimo zanko. Če bi radi, da se nekaj dogaja, dokler ni izpolnjen nek pogoj (npr. vtipkavaj geslo, dokler ne vtipkaš pravilnega), uporabimo zanko.

While zanka

1
2
while pogoj:
    # Se izvaja dokler je pogoj izpolnjen

while zanko uporabimo takrat, ko se mora nekaj izvajati dokler je pogoj izpolnjen. Pri while zanki moramo biti zelo pozorni na neskončne zanke. Neskončna zanka se zgodi takrat, ko je pogoj vedno izpolnjen, program pa bo tekel v neskončnost. Če se nam to slučajno zgodi, pritisnemo kombinacijo tipk ctrl+c, s čimer program prekinemo.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# -*- coding: utf-8 -*-

"""
Uporabnik vpisuje geslo.
"""

geslo = 123
x = int(input("Vpisi geslo: "))

while x != geslo:
    x = int(input("Ponovno vpisi: "))

print("Bravo!")

Primer neskončne zanke:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# -*- coding: utf-8 -*-

"""
Želeli smo spremenljivko x iz 0 manjšati dokler ni enaka -100 in takrat zanko
prekiniti, a smo se zmotili in namesto - napisali +. Seveda smo dobili
neskončno zanko, ki x povečuje (in izpisuje) v neskončnost.
"""

x = 0
while x != -100:
    print(x)
    x = x + 1

Hint

Če se kdaj zataknete v neskončno zanko, pritisnite CTRL + c, ki prekine trenutno izvajani program.

For zanka

1
2
for spremenljivka in zbirka:
    # Se izvaja dokler spremenljivka ne preteče vseh elementov zbirke.

for zanko uporabimo takrat, ko želimo, da naša spremenljivka preteče vse elemente neke zbirke. Zbirka je lahko seznam, niz znakov, slovar, iterator ali kaj podobnega, bolj podrobno si bomo to pogledali pozneje. Zaenkrat bomo for zanko večinoma uporabljali skupaj s funkcijo range(x), ki vrne vse elemente od 0 do x-1 (torej range(5) vrne [0, 1, 2, 3, 4]).

Preprost primer:

1
2
3
4
5
6
7
8
# -*- coding: utf-8 -*-

"""
Program izpiše števila od 0 do 49.
"""

for i in range(50):
    print(i)

Bolj kompliciran primer:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# -*- coding: utf-8 -*-

"""
Created on 2014-09-16
:author: Natan Žabkar (nightmarebadger)

A for loop is usually used when we want to repeat a piece of code 'n' number of
times, or when we want to iterate through the elements of a list (or something
similar).

In this example our program will 'sing' out the 99 bottles of beer song
(http://en.wikipedia.org/wiki/99_Bottles_of_Beer). We use .format() to put the
number of bottles in the text and we use an if sentance for the last two
verses.
"""

if __name__ == '__main__':
    for i in range(100):
        bottle_num = 99 - i
        song = ("{0} bottles of beer on the wall, {0} bottles of beer.\n" +
                "Take one down, pass it around, {1} bottles of beer on the " +
                "wall ...\n")
        song_one = ("1 bottle of beer on the wall, 1 bottle of beer.\n" +
                    "Take it down, pass it around, there are no bottles " +
                    "left on the wall ...\n")
        song_no = ("No more bottles of beer on the wall, no more bottles of " +
                   "beer.\nGo to the store and buy us some more, 99 bottles " +
                   "of beer on the wall ...\n")
        if i == 99:
            print(song_no)
        elif i == 98:
            print(song_one)
        else:
            print(song.format(bottle_num, bottle_num - 1))

Break

Če kjerkoli v zanki napišemo ukaz break, bo zanka takrat prekinjena. Občasno se programira tudi tako, da zanalašč naredimo neskončno zanko, in potem ob določenih pogojih pokličemo break.

Ukaz break prekine le ‘najbližjo’ zanko – če imamo gnezdenih več zank (npr. for zanka znotraj while zanke) se bo prekinila le notranja zanka (v našem primeru for zanka).

Primer:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# -*- coding: utf-8 -*-

"""
Uporabnik vpisuje geslo. Če 5x zaporedoma vpiše napačno geslo je izključen iz
sistema (za to poskrbi spremenljivka stevec)
"""

geslo = 123
stevec = 0
x = int(input("Vpisi geslo: "))

while x != geslo:
    stevec = stevec + 1
    if stevec > 4:
        break
    x = int(input("Ponovno vpisi: "))

if x != geslo:
    print("Preveckrat si poskusil, zaklenjen si iz sistema!")
else:
    print("Bravo!")

Continue

Continue je podoben stavku break, le da ne prekine najbolj notranje zanke, ampak preskoči vse do konca trenutne iteracije in takoj začne izvajanje naslednje. To je uporabno na primer za filtriranje neveljavnih podatkov:

1
2
3
4
5
6
7
8
# -*- coding: utf-8 -*-

a = "sajkdfs adfjkhasdf jkasdkfjas dfkjhasd fasdlfkjsa dflkjsadf"
veljavno = "aeiou"
for i in a:
    if a not in veljavno:
        continue
    # tukaj zelo veliko kode, ki procesira veljavne podatke

Kot ste morda opazili, se da continue vedno nadomestiti z ustreznim if else stavkom, a je to lahko veliko manj berljivo.