Prvi pravi program
Zaporedje računov
Če se je komu zdelo, da to, kar smo počeli doslej, ni bilo programiranje temveč kramljanje z računalnikom (mi sprašujemo, on odgovarja), ima prav in nima prav. Ima prav: res je bilo kramljanje. Nima prav: to je programiranje. Edina razlika med tem in programiranjem je, da pri programiranju "sprašujemo" na zalogo: namesto da bi spraševali in odgovarjali sproti, računalniku že vnaprej damo vsa vprašanja - ali ukaze, ali kakor že hočemo to imenovati.
Naredimo lahko tole: odpremo urejevalnik besedil. Word ne bo pravi; na MS Windows bi bil primeren Notepad, na Macu pa, recimo, Textedit. Vanj vtipkamo, recimo, izračun indeksa telesne teže.
To shranimo, recimo, pod imenom indeks_teze.py. Zdaj pa predpostavimo, da uporabljamo MS Windows (če ga ne, nič hudega - tako ali tako tegale, kar bom opisal zdaj, v resnici ne bomo počeli). V "Raziskovalcu" (Explorer) poklikamo ime datoteke. Tako kot datoteko z, recimo, končnico .docx odpre Word in datoteko s končnico .xlsx Excel, tako datoteko s končnico .py odpre Python. V datoteki mora biti zaporedje ukazov (in tudi je). Prebere ga, lepo vrstico za vrstico, in izvede. Potem pa se zapre.
Ne da bi karkoli izpisal.
Ker nismo v "kramljalnem načinu", Python izpiše le stvari, za katere mu
eksplicitno naročimo, naj jih izpiše. To storimo s funkcijo
print
. Tej lahko damo poljubno število argumentov in funkcija
jih izpiše. print
je lep primer funkcije, ki ni takšna
kot matematične funkcije: print
nima vrednosti in ko
jo pokličemo, ničesar ne vrne, temveč le nekaj naredi. Konkretno,
izpisuje.
Celoten program, skupaj z izpisom, bi bil torej takšen.
Ponovimo vajo. Poklikamo, da se reč požene in ... no ja, odpre okno, vanj izpiše, kar izpiše, potem pa se zapre hitreje, kot moremo prebrati, ali smo anoreksični ali zavaljeni.
Razvojno okolje
Razvojno okolje je jako učena beseda za program, v katerem pišemo programe. Tule smo izbrali PyCharm; lahko bi tudi katerega drugega.
Odpremo torej PyCharm. Povemo, da bi začeli nov projekt; "projekt" bo vse, kar bomo delali na tej delavnici. V resnici bo to pomenilo mapo na disku in v njej bo kup programčkov, ki jih bomo napisali. Projekt poimenujmo, recimo, teden_programiranja in izberimo primerno mapo zanj. Pri vas bo reč imela malo drugačna imena in namesto python 3.3.3 bo pisalo 3.4.1 ali kaj takega.
Naredimo novo datoteko in ji, tako kot prej, damo ime indeks_teze.py.
Spet se znajdemo v urejevalniku besedil (točneje, programov - a program je itak samo neke vrste besedilo v nečloveškem jeziku). Vanj pretipkamo program. Poženemo ga tako, da pritisnemo Ctrl-Shift-F10 v Windowsih ali Ctrl-Shift-R na Os X (ali pa v menuju Run izberemo Run, vendar se raje navadite na bližnjice, saj boste tole naredili res velikokrat). PyCharm bo rekel Pythonu, naj izvede program. Rezultat se bo izpisal v spodnjem delu okna.
Program z vpisom podatkov
Na srečo niso vsi ljudje na svetu veliki 1.85 m in težki 75 kg, saj bi bil takšen svet dolgočasen kot severnokorejske pričeske. Napišimo program tako, da bo uporabnik (torej ta, ki ga požene) vpisal svojo težo in višino.
Tega pa še ne znamo... Kako naročiti računalniku, naj uporabnika nekaj
vpraša? Za vsako stvar obstaja funkcija. Ta, ki jo potrebujemo zdaj, se
imenuje input
. Kot argument ji damo besedilo z vprašanjem, ki
naj ga zastavi. Kot "rezultat" vrne besedilo, ki ga je vpisal uporabnik.
Funkcijo spoznajmo na preprostejšem primeru.
Tole najbrž ne potrebuje razlage, ne? Uporabnik vpiše svoje ime, recimo
Benjamin
, funkcija vrne kot rezultat niz 'Benjamin'
in shranimo ga v spremenljivko z zgovornim imenom ime
. V naslednji
vrsti pokličemo funkcijo za izpisovanje, print
, ki ji naročimo
izpisati niz "Pozdravljen,"
in ime, ki ga je program pravkar
izvedel.
Zdaj pa nazaj k indeksu telesne teže. Novi, uporabnejši program je videti takole.
Pravzaprav bi bil ta program res uporabnejši od prejšnjega le, če bi deloval. Pa ne. Tole reče:
Na tej delavnici nimamo, časa, da bi se poglabljali v napake, tale pa bo
kar pogosta, zato si jo le oglejmo. Rečem, kot so
+
, -
, /
, *
in
**
, pravimo operatorji, tisto, kar je levo in desno od njih
(ponavadi številke) pa so operandi. V, recimo, 2 + 3
, je
+
operator, 2
in 3
pa operanda.
Če se spomnimo še, da je str
okrajšava za niz in
int
za število, razumemo napako. Python pravi, da str
in int
, nista prava operanda za operator **
. Z drugimi
besedami, potencirati poskušamo niz.
Sporočilo o napaki pravi tudi, da se je to zgodilo v tretji vrstici programa.
To bi bila sicer koristna informacija, tule pa je skoraj odveč, saj je edino
potenciranje tako ali tako v tretji vrstici. Kaj pa tam potenciramo? Izračunamo,
koliko je visina
na 2. Torej je visina
niz? Mar ni
številka? Saj je uporabnik menda vpisal številko, ne? Recimo 1.85?
Je. Ampak funkcija input
vedno vrne niz. Tudi, če je ta niz
videti kot število. Dobili smo torej niz "1.85"
. Nizov
pa pač ni možno kvadrirati.
Na srečo smo čisto slučajno (ali pa tudi ne) spoznali funkcijo
float
. Uporabimo jo lahko, recimo, tako, da spremenimo niza
teza
in visina
v števili kar med računanjem:
Ali pa ju pretvorimo pred njim:
Lahko pa ju celo takoj po branju: