Jezik Python

Malo (a ne zelo) poenostavljeno: računalnik - se pravi čipi, ki so v njem - razumejo en sam jezik. Ta ima le par ukazov, a tako osnovnih, da moramo napisati tisoče in tisoče vrstic, da napišemo program, ki pravzaprav počne kaj čisto osnovnega. V tem jeziku dandanes ne programiramo skoraj nikoli. Problem pa je ... da računalnik razume le ta jezik.

Računalnikarji so zviti ljudje, zato so napisali program, ki so mu rekli "prevajalnik". Ta je napisan onem, zoprnem jeziku, počne pa tole: damo mu program, napisan v nekem drugem, za ljudi preprostejšem in učinkovitejšem jeziku, pa ga prevede v oni zoprni jezik, tako da ga računalnik razume in ga lahko izvede. Temu programu se je reklo "prevajalnik formul" ali "formula translator" ali "Fortran". Pravzaprav so tako rekli tudi onemu, preprostejšemu jeziku.

Tako lahko ljudje programiramo v lepih jezikih, računalniki pa si naše programe kar sami prevajajo v jezik, ki ga razumejo.

Računalnikarji niso le zviti, temveč tudi leni. Kreativno leni. Ugotovili so, da je tudi Fortran kar zoprn in si izmislili par jezikov, ki so - sicer morda ne za čisto vsako rabo, za mnoge pa - boljši od Fortrana. Imenovali so jih Algol, Cobol, C...

Ker lenoba ne pozna meja, sploh če je kreativna, so v naslednjega pol stoletja sestavili tisoče jezikov. Eni so bolj primerni za eno, drugi za drugo rabo. Eni so takšni, da je v njih zelo težko narediti napako; programi napisani v njih se redko sesujejo. Take jezike ima posebej rada letalska industrija. En jezik je narejen tako, da je zelo primeren za splet, zato teče v brskalnikih. En jezik je primeren za računalnike, ki so vdelani v različne naprave; v njem je sprogramiran vaš avto...

Python je jezik, v katerem je mogoče narediti zelo veliko z zelo kratkim programom, obenem pa so programi v njem zelo pregledni. Zato je primeren tako za začetnike (kot prvi jezik ga uporablja vedno več univerz, med njimi večina najboljših ameriških univerz) kot za resne programerje. V njem je napisan, recimo, YouTube.

Dva namena je imel tale uvod. Prvi je, da izvemo, kaj je računalniški jezik, zakaj je računalniški jezik in zakaj jih je toliko. Drugi je, da izvemo, da za vsak jezik potrebujemo prevajalnik, to je, program, ki prevede naš program v jezik, razumljiv računalniku. Programu za prevajanje je pogosto ime kar tako kot jeziku. Program, ki "razume" jezik Python, se imenuje "python".

Moj računalnik je lahko tudi kalkulator

Moj računalnik ne more biti balon in tudi v vlogi dežnika se obnese klavrno. Lahko pa je kalkulator. Pravzaprav je bolj ali manj samo kalkulator. Vsaj ko poženem program z imenom Python, dobim ... kar dober kalkulator.

Python je, kot smo se ravnokar pogovarjali, program, ki razume jezik z imenom python. Tipkamo mu stvari v Pythonu in računalnik jih zna izvesti. Izračunati, če hočete.

Lahko napišem, recimo, 2 + 2 in python bo odgovoril 4.

>>> 2 + 2 4

Znake >>> napiše python in pomenijo "kwa čš". Vtipkali smo svoje vprašanje, 2 + 2 in pritisnili znak za novo vrsto, Python pa je odgovoril.

Kot da to še ne bi bilo dovolj imenitno, zna tudi odštevati, množiti in deliti. Za množenje uporabljamo znak * in za deljenje /. Zna tudi potencirati; za potenciranje napišemo dvojno zvezdico; tako, recimo 5 ** 3 pomeni 5 na tretjo. Zna tudi še druge čudovite stvari. Med njimi nam bo tule vsaj včasih prišel prav ostanek po deljenju, ki ga označimo z %.

>>> 13 % 5 3

Python tudi ve, da 1+2 * 3+4 ni 21 temveč 11. Ve, da imata množenje in deljenje prednost pred seštevanjem in odštevanjem, potenciranje pa ima prednost pred vsem. Kadar nam to ni prav, lahko, kot smo vajeni iz šole, uporabimo oklepaje, (1 + 2) * (3 + 4).

Indeks telesne teže

Indeks telesne teže izračunamo tako, da telesno težo delimo s kvadratom telesne višine v metrih. Če je dobljena številka večja od 25, ne smemo jesti čokolade.

Vzemimo primer osebe, ki tehta 75 kg in je visoka 1,85 metra. Opremljeni s Pythonom hitro izvemo, kaj mu smemo ponuditi, ko pride na obisk.

>>> 75 / 1.85 ** 2 21.913805697589478

Oseba ima idealno postavo. Zasluži si eno vrstico, lahko z lešniki.

Mimogrede ne spreglejte: uporabili smo decimalno piko, ne vejice. Vejica Pythonu pomeni nekaj drugega.

Moj kalkulator ima tudi funkcije

Pravi kalkulatorji imajo tudi reči, kot so sinus, kosinus, koren, logaritem in še veliko takšne šare. Tudi Python jo ima, le povedati mu moramo, da jih bomo potrebovali. To storimo z magičnimi besedami

>>> from math import *

Python ima nekaj zelo osnovnih funkcij že kar "vdelanih", ostale pa so zbrane v nekakšnih paketih. S from math import * mu povemo, da bomo uporabljali funkcije s paketa math, torej matematične funkcije.

S temi funkcijami lahko dobimo odgovor na številna globoka vprašanja, kot so, na primer, koliko je kosinus od 0, koren iz 12 in fakulteta 100. Le imena funkcij moramo poznati.

>>> cos(0) 1.0 >>> sqrt(12) 3.4641016151377544 >>> factorial(100) 9332621544394415268169923885626670049071596826438162146859296389521759999322991 5608941463976156518286253697920827223758251185210916864000000000000000000000000

Funkcije imajo lahko tudi več argumentov. Primer je funkcija za zaokrožanje, round. Prvi argument je število, ki naj ga zaokroži in drugi število decimalnih mest, ki jih želimo.

>>> round(75 / 1.85 ** 2, 1) 21.9 >>> round(75 / 1.85 ** 2, 3) 21.914 >>> round(75 / 1.85 ** 2, 5) 21.91381

Matematiki se izrazijo, da ima funkcija to in to vrednost. Posebej, če bi naredili najhujšo možno kombinacijo, to je, matematika križali s pravnikom, bi dobili osebo, ki ne bi bila pripravljena reči niti, da je kosinus od 0 enak 1, temveč, da ima funkcija kosinus v točki 0 vrednost 1.

Računalnikarji na to gledamo drugače. Računalnikarji rečemo, da smo poklicali funkcijo in ji dali določene argumente ali pa, da smo jo poklicali z določenimi argumenti. Funkcija naredi, kar pač dela (recimo izračuna zaokroženo število), in potem vrne nek rezultat (ali več rezultatov ali nobenega, pač odvisno od tega, za kakšno sorto funkcije gre).

Moj računalnik je kalkulator ... s spominom

Rezultate izračunov si bomo pogosto želeli zapomniti, da jih bomo uporabljali v nadaljnjih izračunih. Recimo, da bi hoteli shraniti gornji indeks telesne teže pod imenom bmi. Naredili bi takole:

>>> bmi = 75 / 1.85 ** 2

Ko Python vidi takšnole reč, izračuna, kar je na desni strani enačaja, in to priredi imenu na levi strani.

V odgovor ne napiše ničesar. Tokrat mu namreč nismo dali le računa, temveč mu ukazali, naj izračunano shrani pod imenom bmi. Takim stvarem, kot je bmi, rečemo spremenljivke, vsaj jaz jim bom iz stare navade pravil tako. Python jim uradno reče kar ime (name).

Zdaj lahko primer z zaokrožanjem telesne teže zapišemo enostavneje:

>>> round(bmi, 1) 21.9 >>> round(bmi, 3) 21.914 >>> round(bmi, 5) 21.91381

Ime je lahko sestavljeno iz črk, števk in podčrtaja, pri čemer se ne sme začeti s številko. Navadno uporabljamo le črke angleške abecede, čeprav nam Python pusti tudi slovenske ali, če hočete korejske. Python loči med velikimi in malimi črkami: bmi ni isto kot BMI ali Bmi.

Spremenljivke lahko uporabljamo tako, kot da bi bile številke. Če imamo, recimo

>>> x = 12 + 13 >>> y = 5

smemo nadalje spraševati stvari, kot

>>> x 25 >>> y 5 >>> x + y 30 >>> x / y 5.0 >>> z = x ** y >>> z 9765625

Pri prirejanju ne spreglejte, da mora biti ime vedno na levi. Ker tole ni delavnica matematike, temveč računalništva, x = 5 ni isto kot 5 = x. Prvo pomeni, da imenu x priredimo vrednost 5, drugo pa, da imenu 5 priredimo vrednost x. Slednje ne deluje že zato, ker 5 ne more biti ime, saj se očitno začne s števko (poleg tega je 5 več kot očitno številka, in sicer 5, zato ne bo nikoli postala kaj drugega, recimo x).

Od matematikov se računalnikarji razlikujemo še po nečem. Ko matematik reče spremenljivka, to naredi s figo v žepu. Ko matematik enkrat reče, da je x enak 5, se v svojem računanju ne more par vrstic kasneje premisliti in se odločiti, da bo x po novem 6. Če se x torej ne more spreminjati - s kakšno pravico mu matematik reče spremenljivka? To je vendar ... nespremenljivka!

Spremenljivke v programu pa se v resnici spreminjajo. Tule imamo primer spremenljivke x, ki bo najprej enaka 1, nato 2, nato 42:

>>> x = 1 >>> x 1 >>> x = 2 >>> x 2 >>> x = 42 >>> x 42

Primer, ki je za oči matematika še bolj boleč, je tale:

>>> x = x + 1 >>> x 43 >>> x = x + 1 >>> x 44

Ko matematik uporabi enačaj, hoče povedati, da sta dve stvari enaki. Matematik, ki bi napisal x = x + 1, je zrel za grmado. Ko enačaj uporabimo računalnikarji, pa naročimo računalniku, naj izračuna reč na desni strani enačaja in jo priredi imenu na levi. Tu torej izračuna, koliko je x + 1 in to shrani nazaj v x.

Moj kalkulator ne pozna le številk

Kot pozornemu uporabniku računalnika gotovo ni ušlo, se na računalniških zaslonih ne pojavljajo le številke, temveč sem ter tja tudi kaka beseda. Zaporedju znakov računalnikarji rečejo niz (pravzaprav lažem, brez izjeme mu rečejo string, natančno tako kot zidarji vodni tehtnici in svinčnici rečejo vaservaga in plajba).

Recimo, da bi hoteli spremenljivki mesto prirediti niz Ljubljana. Pri tem bi naleteli na naslednjo neprijetnost.

>>> mesto = Ljubljana Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'Ljubljana' is not defined

Kadar računalniku kaj ni prav, to pove. Tule je rekel, da ne pozna imena Ljubljana. Problem je v tem: recimo, da bi rekli

>>> mesto = x

To deluje, saj računalnik ve, kaj je x - spremenljivka, s katero smo se igrali prejle in ima vrednost 44. Če napišemo mesto = x, je to (v tem trenutku) isto, kot če bi napisali mesto = 44. Ko napišemo mesto = Ljubljana, pa računalnik misli, da želimo spremenljivki mesto prirediti vrednost spremenljivke Ljubljana, te pa ni.

Med imeni spremenljivk in besedili ločimo tako, da besedila (nize) vedno napišemo pod narekovaje. Če torej rečemo

>>> mesto = 'x'

bomo spremenljivki mesto priredili besedilo 'x' (kar sicer ni bil naš prvotni namen) in če rečemo

>>> mesto = "Ljubljana" bo spremenljivka mesto vsebovala besedilo "Ljubljana".

Z besedili je mogoče tudi računati. Na nek način: lahko jih seštevamo. Če seštejemo nize "1231 ", "Ljubljana" in " - Črnuče", bomo dobili...

>>> "1231 " + mesto + " - Črnuče" '1231 Ljubljana - Črnuče'

Ne spreglejte, da smo 1231 in - Črnuče pisali pod narekovaji, mesto pa ne: prvo dvoje sta niza, mesto pa spremenljivka (ki, jasno, vsebuje, niz). Če bi pisali pod narekovaji tudi mesto, bi dobili

>>> "1231 " + "mesto" + " - Črnuče" '1231 mesto - Črnuče'

česar nismo hoteli (razen, če je med nami kateri od onih lokal patriotov, ki na desno stran savskega mostu vsake toliko let nabijejo krajevno tablo "Črnuče"). Če pa bi pisali brez narekovajev, bi dobili

>>> 1231 + mesto - Črnuče Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'str'

česar še bolj nismo hoteli. Konkretno, tule se Python pritoži, da poskušamo k številki (int je okrajšava za integer number, celo število) prišteti niz (str je okrajšava za string, niz).

Nize lahko tudi množimo s števili. "Ana" * 3 je, kot bi človek pričakoval, isto kot "Ana" + "Ana" + "Ana":

>>> "Ana" * 3 'AnaAnaAna'

Iz besedil v številke in nazaj

Računalnik ni pameten, temveč prav neznosno ubogljiv. Vedno bo namesto tistega, kar smo hoteli narediti, naredil tisto, kar smo napisali.

>>> a = 1 + 2 >>> b = "1 + 2" >>> c = "1" + "2"

Kakšne vrednosti imajo po tem a, b in c?

Glede a ni dvomov; enaka je 3. Spremenljivki b smo priredili besedilo "1 + 2", torej vsebuje besedilo "1 + 2". Pythonu ni nihče naročil, naj izračuna, koliko je to, torej tega tudi ne bo računal. Spremenljivka c ima, frustrirajoče, vrednost "12". Sešteli smo besedili "1" in "2" ter dobili besedilo "12". Čisto tako, kot smo s seštevanjem "Ljubljana" in " Črnuče" bodili "Ljubljana Črnuče". Da besedili "1" in "2" pravzaprav vsebujeta številki in da ju morda hočemo zares sešteti, Pythona ne briga. Navsezadnje - kako pa naj ve, da si v resnici ne želimo pridelati prav "12"?

Pa recimo, da se nam je slučajno primerilo, da imamo niza "1" in "2", recimo takole

>>> x = "1" >>> y = "2"

in bi ju radi sešteli. Kako to storiti?

Za vsako reč obstaja funkcija, le poznati jo je potrebno. Tule lahko uporabimo float. Kot argument ji podamo niz (ki mora biti v resnici število) in vrne "zaresno" število.

>>> float(x) 1.0

Zakaj se imenuje ravno float (in kaj ta beseda sploh pomeni?!) in zakaj se je izpisalo 1.0 in ne 1, nas bo morda zanimalo naslednjič.

Oboroženi s float lahko x in y seštejemo na vsaj tri načine.

Prvi: namesto da bi seštevali x in y, seštejemo števili, ki ju vrne funkcija float, ko jo pokličemo z x in z y.

>>> float(x) + float(y) 3.0

Drugi: sestavimo novi spremenljivki, recimo jima xx in yy, v katerih bosta x in y, pretvorjeni v števila. Nato ju seštejemo.

>>> xx = float(x) >>> yy = float(y) >>> xx + yy 3.0

Tretji: x in y spremenimo v števili. To je pravzaprav isto kot ono zgoraj, le da ne naredimo novih spremenljivk xx in yy, temveč povozimo stare.

>>> x = float(x) >>> y = float(y) >>> x + y 3.0

Ne naredite pogoste napake: ne pišite le float(x), temveč x = float(x). Funkcija float(x) ne spremeni xa v število, temveč vrne število, ki je zapisano v besedilu x. Če želimo v resnici spremeniti x v številu, mu moramo prirediti število, ki ga vrne float.

Zadnja sprememba: nedelja, 12. oktober 2014, 23.16