Računi in spremenljivke, besedila in številke
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
.
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 %
.
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.
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
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.
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.
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:
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:
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
smemo nadalje spraševati stvari, kot
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:
Primer, ki je za oči matematika še bolj boleč, je tale:
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.
Kadar računalniku kaj ni prav, to pove. Tule je rekel, da ne pozna imena
Ljubljana
. Problem je v tem: recimo, da bi rekli
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
bomo spremenljivki mesto
priredili besedilo 'x'
(kar sicer ni bil naš prvotni namen) in če rečemo
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...
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
č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
č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"
:
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.
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
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.
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
.
Drugi: sestavimo novi spremenljivki, recimo jima xx
in
yy
, v katerih bosta x
in y
,
pretvorjeni v števila. Nato ju seštejemo.
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.
Ne naredite pogoste napake: ne pišite le float(x)
, temveč
x = float(x)
. Funkcija float(x)
ne spremeni
x
a 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
.