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.

teza = 75 visina = 1.85 bmi = teza / visina ** 2

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.

teza = 75 visina = 1.85 bmi = teza / visina ** 2 print("Indeks vaše telesne teže je", bmi)

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.

ime = input("Kako ti je ime? ") print("Pozdravljen,", ime)

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.

teza = input("Teža: ") visina = input("Telesna višina: ") bmi = teza / visina ** 2 print("Indeks vaše telesne teže je", bmi)

Pravzaprav bi bil ta program res uporabnejši od prejšnjega le, če bi deloval. Pa ne. Tole reče:

Traceback (most recent call last): File "/Users/janez/Desktop/teden_programiranja/indeks_teze.py", line 3, in <module> bmi = teza / visina ** 2 TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'

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:

bmi = float(teza) / float(visina) ** 2

Ali pa ju pretvorimo pred njim:

teza = float(teza) visina = float(visina)

Lahko pa ju celo takoj po branju:

teza = float(input("Teža: ")) visina = float(input("Telesna višina: ")) bmi = teza / visina ** 2 print("Indeks vaše telesne teže je", bmi)
Zadnja sprememba: nedelja, 12. oktober 2014, 23.03