{"payload":{"allShortcutsEnabled":false,"fileTree":{"p1/predavanja":{"items":[{"name":"01 izrazi, spremenljivke, program.ipynb","path":"p1/predavanja/01 izrazi, spremenljivke, program.ipynb","contentType":"file"},{"name":"01-repl izrazi, spremenljivke, program.ipynb","path":"p1/predavanja/01-repl izrazi, spremenljivke, program.ipynb","contentType":"file"},{"name":"02a pogoji.ipynb","path":"p1/predavanja/02a pogoji.ipynb","contentType":"file"},{"name":"02b zanke.ipynb","path":"p1/predavanja/02b zanke.ipynb","contentType":"file"},{"name":"03a seznami, terke in zanka for.ipynb","path":"p1/predavanja/03a seznami, terke in zanka for.ipynb","contentType":"file"},{"name":"03b indeksi in rezine.ipynb","path":"p1/predavanja/03b indeksi in rezine.ipynb","contentType":"file"},{"name":"04a funkcije.ipynb","path":"p1/predavanja/04a funkcije.ipynb","contentType":"file"},{"name":"04b uvažanje modulov.ipynb","path":"p1/predavanja/04b uvažanje modulov.ipynb","contentType":"file"},{"name":"04c pisanje modulov.ipynb","path":"p1/predavanja/04c pisanje modulov.ipynb","contentType":"file"},{"name":"05 metode nizov in seznamov.ipynb","path":"p1/predavanja/05 metode nizov in seznamov.ipynb","contentType":"file"},{"name":"06 slovarji in množice.ipynb","path":"p1/predavanja/06 slovarji in množice.ipynb","contentType":"file"},{"name":"07 izpeljani seznami, slovarji, množice.ipynb","path":"p1/predavanja/07 izpeljani seznami, slovarji, množice.ipynb","contentType":"file"},{"name":"07a - zakaj se to učimo.ipynb","path":"p1/predavanja/07a - zakaj se to učimo.ipynb","contentType":"file"},{"name":"07b funkcijske funkcije.ipynb","path":"p1/predavanja/07b funkcijske funkcije.ipynb","contentType":"file"},{"name":"09a oblikovanje nizov.ipynb","path":"p1/predavanja/09a oblikovanje nizov.ipynb","contentType":"file"},{"name":"09b datoteke.ipynb","path":"p1/predavanja/09b datoteke.ipynb","contentType":"file"},{"name":"10 - Rekurzivne funkcije.ipynb","path":"p1/predavanja/10 - Rekurzivne funkcije.ipynb","contentType":"file"},{"name":"10a - Rekurzija - rodbina.ipynb","path":"p1/predavanja/10a - Rekurzija - rodbina.ipynb","contentType":"file"},{"name":"10b - Rekurzija - seznami.ipynb","path":"p1/predavanja/10b - Rekurzija - seznami.ipynb","contentType":"file"},{"name":"10c - Rekurzija naprej in nazaj.ipynb","path":"p1/predavanja/10c - Rekurzija naprej in nazaj.ipynb","contentType":"file"},{"name":"12b objektno programiranje - dedovanje.ipynb","path":"p1/predavanja/12b objektno programiranje - dedovanje.ipynb","contentType":"file"},{"name":"planeti.txt","path":"p1/predavanja/planeti.txt","contentType":"file"},{"name":"rodovnik.pdf","path":"p1/predavanja/rodovnik.pdf","contentType":"file"}],"totalCount":23},"p1":{"items":[{"name":"advent of code","path":"p1/advent of code","contentType":"directory"},{"name":"dodatna predavanja","path":"p1/dodatna predavanja","contentType":"directory"},{"name":"domace-naloge","path":"p1/domace-naloge","contentType":"directory"},{"name":"izpiti","path":"p1/izpiti","contentType":"directory"},{"name":"izzivi","path":"p1/izzivi","contentType":"directory"},{"name":"kratki zapiski","path":"p1/kratki zapiski","contentType":"directory"},{"name":"predavanja","path":"p1/predavanja","contentType":"directory"}],"totalCount":7},"":{"items":[{"name":"aps","path":"aps","contentType":"directory"},{"name":"kz","path":"kz","contentType":"directory"},{"name":"p1","path":"p1","contentType":"directory"},{"name":"pef","path":"pef","contentType":"directory"},{"name":"pn","path":"pn","contentType":"directory"},{"name":"README.md","path":"README.md","contentType":"file"}],"totalCount":6}},"fileTreeProcessingTime":13.699479,"foldersToFetch":[],"repo":{"id":324968588,"defaultBranch":"master","name":"predavanja","ownerLogin":"janezd","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2020-12-28T09:30:36.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/2387315?v=4","public":true,"private":false,"isOrgOwned":false},"symbolsExpanded":false,"treeExpanded":true,"refInfo":{"name":"master","listCacheKey":"v0:1609147898.0","canEdit":false,"refType":"branch","currentOid":"37a9781f38e66d5ffb8ce15ec46bc59b0daa1acf"},"path":"p1/predavanja/01 izrazi, spremenljivke, program.ipynb","currentUser":null,"blob":{"rawLines":["{"," \"cells\": ["," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"Te (in večino prihodnjih) zapiskov lahko pregledujete ter začasno spreminjate in poganjate programe v njih tudi tako, da (ne da bi morali kaj namestiti) uporabite [Binder](https://mybinder.org/v2/gh/janezd/predavanja/HEAD).\\n\","," \"\\n\","," \"## Zaganjanje Notebooka\\n\","," \"\\n\","," \"Za začetek bomo Python zagnali in uporabljali malo drugače kot kasneje. Odprli bomo [Jupyter notebook](https://jupyter.org/), ki ste si ga (upam) [namestili](https://ucilnica.fri.uni-lj.si/mod/page/view.php?id=7607).\\n\","," \"\\n\","," \"Odpremo ... bogve, kako je to po slovensko ... ukazna lupina? Pač Cmd, Shell, Konsole, Terminal, ITerm, bash, zsh ali kakorkoli se že to imenuje na vašem operacijskem sistemu in vašem računalniku). Pokazal se bo \\\"ukazni pozivnik\\\" (uh: *prompt*), kjer bo izpisano ime nekega direktorija (po novem moderno imenovanega \\\"mapa\\\") na vašem disku. Če ste na Windowsih in ta direktorij ni vaš \\\"domači direktorij\\\", se pravi, ne vsebuje vašega imena, vpišite\\n\","," \"\\n\","," \"```\\n\","," \"cd \\\\Users\\\\benjamin\\n\","," \"```\\n\","," \"\\n\","," \"vendar samo, če vam je (na tem računalniku) ime Benjamin. Če vam je kako drugače, vpišite kaj drugega. Če ne uporabljate Windowsov, pa je najbrž itak vse v redu.\\n\","," \"\\n\","," \"```\\n\","," \"jupyter notebook\\n\","," \"```\\n\","," \"\\n\","," \"izpisala se bo ta in ona nepomembna reč, potem pa se bo odprl brskalnik z vsebino vašega domačega direktorija.\\n\","," \"\\n\","," \"Okna z ukaznim pozivnikom ne zaprite, saj bi s tem umrla tudi naša beležnica. Če vas moti, pa ga lahko zmanjšate.\\n\","," \"\\n\","," \"Zgoraj desno poiščemo tipko `New`, kliknemo in izberemo `Python 3`. Odpre se prazna beležnica.\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"## Moj računalnik je lahko tudi kalkulator\\n\","," \"\\n\","," \"Vtipkajmo `1 + 1` in pritisnimo Shift in Enter. \""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 1,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"2\""," ]"," },"," \"execution_count\": 1,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"1 + 1\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"Tole bi znal izračunati vsak z minimalnim znanjem matematike. Poskusimo lahko tudi kaj bolj zapletenega.\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 2,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"56\""," ]"," },"," \"execution_count\": 2,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"8 * 7\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 3,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"8\""," ]"," },"," \"execution_count\": 3,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"1+2 * 3+1\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"Nič posebnega. Temu, kar smo vpisovali, pravimo *izraz*. Pri tem predmetu se sicer ne bomo ukvarjali s pravorečjem; teoretiki nas učijo o razliki med *izrazom*, *stavkom* in bogvečem še, sam pa se tule enkrat za vselej opravičujem, ker bom dal prednost praksi, ne terminologiji. Še definicijo pojma *izraz* bom prepustil kolegu Slivniku, ki bo nekatere od vas v tretjem letniku učil zanimivo snov o jezikih, prevajalnikih in sploh vsem).\\n\","," \"\\n\","," \"Izraz bo za nas pač *nekaj, kar se da izračunati* (kar je ravnokar zaropotalo, je neki [Alan Turing](http://en.wikipedia.org/wiki/Turing), ki se je z jabolkom v ustih obrnil v grobu). In gornje stvari se očitno dajo izračunati. In niti niso preveč zanimive.\\n\","," \"\\n\","," \"Razen, morda, zadnjega izraza. V izrazih lahko uporabljamo presledke in to moramo - kot tudi sicer - početi po občutku. V zadnjem izrazu tega nismo počeli, zato je zapis zavajajoč. Python je dovolj pameten, da ve, da ima *operator* (še ena beseda, ki si jo zapomnimo!) množenja prednost pred operatorjem seštevanja. Kar smo napisali, se računa enako, kot če bi rekli\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 4,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"8\""," ]"," },"," \"execution_count\": 4,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"1+2*3+1\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"ali\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 5,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"8\""," ]"," },"," \"execution_count\": 5,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"1 + 2*3 + 1\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"ali\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 6,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"8\""," ]"," },"," \"execution_count\": 6,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"1 + 2 * 3 + 1\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"Nekoč se bomo dogovorili, da bomo uporabljali zadnjo obliko, dotlej pa postavljajte presledke, kamor vam veleva občutek, le nekaj se zmenimo: nikoli jih ne dajajte na začetek. Dokler vam naslednji teden ne bom rekel, da jih morate. Boste videli, zakaj.\\n\","," \"\\n\","," \"Kakšni operatorji še obstajajo? Očitna sta še `/` za deljenje in `-` za odštevanje. Dvojna zvezdica, `**`, pomeni potenciranje (mednju ne smemo napisati presledka, `**` je kot, recimo, ena *beseda*). Operator `%` izračuna ostanek po deljenju.\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 7,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"25\""," ]"," },"," \"execution_count\": 7,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"5 ** 2\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 8,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"81\""," ]"," },"," \"execution_count\": 8,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"3 ** 4\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 9,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"3\""," ]"," },"," \"execution_count\": 9,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"13 % 5\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"Potenciranje ima prednost pred vsem, kar poznamo doslej. Kadar je treba, pa lahko uporabimo oklepaje.\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 10,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"36\""," ]"," },"," \"execution_count\": 10,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"(4 + 5) * 4\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"Če v isto celico zapišemo več računov, Notebook pokaže samo rezultat zadnjega.\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 11,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"6\""," ]"," },"," \"execution_count\": 11,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"1 + 3\\n\","," \"5 * 6\\n\","," \"8 - 2\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"Čisto druga reč pa je, če v vrstici ostane kak nezaprt oklepaj. V tem primeru Python ve (in pričakuje), da se izraz nadaljuje v naslednji vrstici.\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 12,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"24\""," ]"," },"," \"execution_count\": 12,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"(4 + 2 * (3\\n\","," \"+ 8)-\\n\","," \"2)\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"Tule ni lepo, a kdaj drugič nam bo prišlo še zelo prav, boste videli.\\n\","," \"\\n\","," \"Pri množenju je nujno uporabiti zvezdico. Se pravi, pisati moramo `7 * (2 + 3)` in ne `7(2 + 3)`.\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"Za deljenje imamo poleg operatorja `/` tudi `//`, ki deli celoštevilsko.\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 13,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"3.5\""," ]"," },"," \"execution_count\": 13,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"7 / 2\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 14,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"3\""," ]"," },"," \"execution_count\": 14,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"7 // 2\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"7 gre v 2 trikrat, in ena ostane. A celoštevilskega deljenja ostanek ne zanima.\\n\","," \"\\n\","," \"Celoštevilsko lahko delimo tudi necela števila:\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 15,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"3.75\""," ]"," },"," \"execution_count\": 15,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"4.5 / 1.2\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 16,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"3.0\""," ]"," },"," \"execution_count\": 16,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"4.5 // 1.2\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"Pozornejšemu je padlo v oči še nekaj zanimivega: če delimo 7 z 2 dobimo 3, če 4.5 z 1.2, pa 3.0. Za prvo predavanje bi lahko to tudi preskočili, a se vseeno pomudimo: Python loči med celimi in necelimi števili. Lepše kot pri deljenju to pravzaprav vidimo pri seštevanju.\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 17,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"4.0\""," ]"," },"," \"execution_count\": 17,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"2.3 + 1.7\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 18,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"4\""," ]"," },"," \"execution_count\": 18,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"2 + 2\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"Če seštejemo realni števili 2.3 in 1.7 dobimo realno število 4.0. To število je sicer \\\"celo\\\", vendar je tako zgolj \\\"slučajno\\\". Rezultat seštevanja dveh realnih števil je realno število, in četudi je celo, ga bo Python \\\"interno\\\" shranil kot necelo število in tudi pri izpisu dodal `.0`. Da se ve. Če seštejemo celi števili 2 in 2, dobimo celo število 4.\\n\","," \"\\n\","," \"Podobno je bilo pri deljenju. Rezultat (celoštevilskega) deljenja necelih števil je necelo število, rezultat celoštevilskega deljenja celih števil pa je celo število.\\n\","," \"\\n\","," \"Kako hitro napredujemo! To, kar smo pravkar spoznali, so \\\"podatkovni tipi\\\". Točneje, spoznali smo dva podatkovna tipa *cela števila* in *števila s plavajočo vejico*. V angleščini se jima reče *integer* in *floating point number* v Pythonu pa `int` in `float`. Odkod ta čudna imena boste nekateri izvedeli pri kakem drugem predmetu.\\n\","," \"\\n\","," \"Vsaka reč v Pythonu je reč nekega tipa, in če je ta reč število, je bodisi tipa `int` bodisi `float`. (So števila lahko še kakega drugega tipa? Lahko, nekateri jeziki imajo celo kupe številskih tipov. Vendar nas za zdaj ne brigajo.)\\n\","," \"\\n\","," \"Neučakanega študenta morda pograbila radovednost. Kateri podatkovni tipi pa še obstajajo - razen številskih? Le malo naj počaka, kmalu bodo na vrsti.\\n\","," \"\\n\","," \"Preden gremo naprej, samo opozorimo, kaj vas čaka v večini drugih jezikov: v skoraj vseh drugih jezikih deljenje celih števil vrača celo število; v Javi, ki se jo boste učili v drugem semestru, bo 7 / 2 enako 3. Obratno opozorilo, seveda, velja za tiste, ki že znate programirati in ste morda vajeni drugače: v Pythonu izraz 7 / 2 vrne 3.5. Je to pametno? Najbrž je: ko delimo, večinoma hočemo \\\"pravo\\\" deljenje in le redko celoštevilskega. Še več, pri programiranju velikokrat naredimo napako, ko brezskrbno delimo, ne da bi pomislili na to, s kakšnimi števili - celimi ali ne - delamo. Avtorji Pythona so se zato odločili, naj bo deljenje vedno \\\"pravo\\\", kadar hočemo celoštevilsko, pa moramo to posebej povedati tako, da namesto `/` uporabimo `//`.\\n\","," \"\\n\","," \"\\n\","," \"## Moj računalnik je lahko tudi kalkulator - s spominom\\n\","," \"\\n\","," \"V Notebooku je preprosto uporabiti rezultat zadnjega izračuna.\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 19,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"5\""," ]"," },"," \"execution_count\": 19,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"2 + 3\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 20,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"35\""," ]"," },"," \"execution_count\": 20,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"(2 + _) * _\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"Vidimo? Tam kjer napišemo `_`, se \\\"vstavi\\\" tisto, kar se je izpisalo nazadnje. Tako `(2 + _) * _` v bistvu pomeni `(2 + 5) * 5`. To lahko nadaljujemo.\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 21,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"37\""," ]"," },"," \"execution_count\": 21,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"_ + 2\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"Zdaj je bil `_` enak 35. In zdaj je `37`; to lahko vidimo tudi tako, da napišemo \\\"račun\\\", ki ne vsebuje drugega kot `_`. :)\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 22,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"37\""," ]"," },"," \"execution_count\": 22,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"_\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"Kako pa pridemo nazaj, do rezultata izračuna `2 + 3`, nekaj celic višje? En način, ki pa ni najbolj praktičen, je, da uporabimo številko celice. Zgoraj piše `In [19]` in `Out[19]`, torej gre za celico 19. Njen rezultat je v\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 23,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"5\""," ]"," },"," \"execution_count\": 23,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"_19\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"Torej lahko pišemo stvari kot\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 24,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"40\""," ]"," },"," \"execution_count\": 24,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"_19 + _20\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"Kar počnemo zdajle, je posebnost Notebooka in nima veliko zveze s Pythonom (ali kakim drugim programskim jezikom). Pa še nepraktično je.\\n\","," \"\\n\","," \"Če hočemo shraniti rezultat nekega izračuna za kasnejšo rabo, to storimo tako:\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 25,"," \"metadata\": {},"," \"outputs\": [],"," \"source\": ["," \"x = 2 + 3\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"Temu pravimo *prireditveni stavek*. Rezultat izraza `2 + 3` smo poimenovali `x`.\\n\","," \"\\n\","," \"Tole zdaj je najbolj pomembna stvar v današnjem predavanju. Ne spreglejte je, čeprav je slišati trivialna, da ne bo kdaj kasneje postala kamen spotike (predvsem tistim, ki že znate programirati in si pod prirejanjem predstavljate nekaj drugega, kot v resnici je).\\n\","," \"\\n\","," \"Da hočemo nekaj prirejati, povemo z enačajem (očitno). Na njegovi desni je nek izraz - torej nekaj, kar se da izračunati. Včasih bo to `2 + 3`, včasih bo kaj veliko bolj zapletenega, pogosto pa bo na desni strani samo številka, kot, recimo, v prirejanju `x = 42`. Python bo, tako kot v našem dosedanjem igranju z njim, izračunal tisto na desni in dobil `5` ali `42` ali karkoli že.\\n\","," \"\\n\","," \"Na levi strani enačaja je neko ime. Python bo temu imenu (recimo `x`) priredil tisto, kar je izračunal.\\n\","," \"\\n\","," \"OK? Prireditveni stavek priredi imenu na levi strani enačaja rezultat izraza na desni.\\n\","," \"\\n\","," \"Levo in desno od enačaja praviloma pišemo presledke, zaradi preglednosti.\\n\","," \"\\n\","," \"Python tokrat ni izpisal ničesar v odgovor. Rezultat si je le zapomnil, shranil ga je pod imenom `x`. Kaj lahko počnemo s tem `x`? Lahko ga uporabljamo v drugih izrazih.\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 26,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"12\""," ]"," },"," \"execution_count\": 26,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"x + 7\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 27,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"25\""," ]"," },"," \"execution_count\": 27,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"x ** 2\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 28,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"3\""," ]"," },"," \"execution_count\": 28,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"13 % x\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 29,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"5\""," ]"," },"," \"execution_count\": 29,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"x\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"Kadar rečem `x`, Python poišče, tisto, kar je priredil `x`-u. Če smo `x`-u priredili 5 in rečemo `x + 7`, je to isto, kot če bi rekli `5 + 7`.\\n\","," \"\\n\","," \"Temu `x` Slovenci ponosno rečemo *spremenljivka*. Angleži temu namreč pravijo *variable*, Madžari pa változó. (Predvsem slednje ni posebej pomembno in ne pride v poštev kot izpitno vprašanje, čeprav ne bo nobene škode, če veste. Koristi pa pravzaprav tudi ne. ;))\\n\","," \"\\n\","," \"(Medklic: da, temu bom govoril *spremenljivka*, a bolj prav bi bilo uporabljati besedo *ime*. Tudi Python temu reče *name*. Besedo spremenljivka bom uporabljal, ker smo programerji tako navajeni in železno srajco navade je težko sleči. Čez nekaj mesecev pa bomo izvedeli, kakšna je razlika in zakaj se sploh spotikati ob to.)\\n\","," \"\\n\","," \"Spremenljivko lahko seveda uporabljamo tudi za računanje novih spremenljivk.\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 30,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"7\""," ]"," },"," \"execution_count\": 30,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"y = x + 2\\n\","," \"y\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"Vidite, kaj smo storili tu? V prvi vrstici smo priredili vrednost `y`-u, v drugi smo to vrednost izpisali.\\n\","," \"\\n\","," \"Spremenljivka pri programiranju (v večini jezikov) ne pomeni istega kot v matematiki. Spremenljivke v matematiki se, roko na srce, pravzaprav ne spreminjajo. V matematiki *x* ne more biti v eni vrstici 5, v naslednji pa 8. Pri programiranju pa lahko.\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 31,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"5\""," ]"," },"," \"execution_count\": 31,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"x = 5\\n\","," \"x\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 32,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"8\""," ]"," },"," \"execution_count\": 32,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"x = 8\\n\","," \"x\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"Še huje. Če matematiki ne bi znali programirati (pa navadno znajo in to dobro), bi jih utegnilo pretresti tole:\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 33,"," \"metadata\": {},"," \"outputs\": ["," {"," \"data\": {"," \"text/plain\": ["," \"7\""," ]"," },"," \"execution_count\": 33,"," \"metadata\": {},"," \"output_type\": \"execute_result\""," }"," ],"," \"source\": ["," \"x = 5\\n\","," \"x = x + 2\\n\","," \"x\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"Napišite `x = x + 2` pred profesorjem matematike, če si upate!\\n\","," \"\\n\","," \"Kako je *x* lahko enak *x + 2*? Saj ni. Ta enačaj ne predstavlja *enakosti*, kot v matematiki, temveč *prirejanje*. Ja? V drugi vrstici Python izračuna vrednost izraza `x + 2`, to je, `7`, in to priredi imenu, spremenljivki `x`. Izraz `x = x + 2` torej pomeni, preprosto, povečaj `x` za `2`.\\n\","," \"\\n\","," \"Tiste, ki že znajo vsaj malo programirati v kakem drugem jeziku, je morda zmotilo, da spremenljivk nismo nikjer *deklarirali*. (Tisti, ki jim beseda *deklarirati* ne pomeni ničesar, naj ostanejo v umestni nevednosti.) V Pythonu tega (skoraj) ne moremo narediti. Spremenljivka (točneje, ime) se pojavi, ko jo uporabimo, in izgine, ko je ne potrebujemo več.\\n\","," \"\\n\","," \"Tem, ki že znajo programirati - posebej, če so uporabljali kak C# ali Javo - povejmo še, da se Pythonove spremenljivke tudi sicer bistevno razlikujejo od spremenljivk, ki so jih vajeni od ondod. Predvsem ni dobro, da so vas najbrž učili, da so \\\"*spremenljivke kot nekakšne škatlice*\\\". Če imamo\""," ]"," },"," {"," \"cell_type\": \"code\","," \"execution_count\": 34,"," \"metadata\": {},"," \"outputs\": [],"," \"source\": ["," \"x = 42\\n\","," \"y = x\""," ]"," },"," {"," \"cell_type\": \"markdown\","," \"metadata\": {},"," \"source\": ["," \"imamo v nekaterih jezikih dve škatlici (in v obeh številko `42`), v nekaterih jezikih, med katerimi je tudi Python, pa imamo eno samo škatlico z dvema imenoma, `x` in `y`. Več o tem bomo izvedeli kasneje, ko bomo to zmožnejši prebavljati in bomo videli tudi konkretno zmotnost ideje, da je \\\"*spremenljivka kot nekakšna škatlica*\\\".\\n\","," \"\\n\","," \"Ostali, tisti, ki niso še nikoli programirali, pa se sprašujejo nekaj drugega. Kakšna so lahko imena spremenljivk? Vedno le ena črka? Angleške abecede?\\n\","," \"\\n\","," \"Takole: imena (angleško govoreči jim pravijo *identifier*) so lahko poljubno dolga. Vsebujejo lahko črke angleške abecede, številke in podčrtaj, `_`, vendar se morajo začeti s črko ali podčrtajem, s številko pa ne. Python, kot skoraj vsi drugi jeziki, razlikuje med malimi in velikimi črkami: `x` in isto kot `X`. (V resnici smemo uporabljati tudi šumnike in cirilico in kitajske pismenke, vendar se tega ne navadite, ker je nezaželeno in ker tega ne boste mogli početi v skoraj nobenem drugem jeziku kot v Pythonu, zato naj vam ne pride v kri.)\\n\","," \"\\n\","," \"Poleg tega obstaja še par dogovorov. Vsak jezik ima namreč poleg obveznih pravil tudi želeni slog. (Razen nekaterih, ki jih imajo več; najbolj notorično brezvladje je najbrž v C in C++.) Predvsem pa - in to vas bo kot računalnikarje prej ko slej zadelo - vsako resno podjetje določi pravila oblikovanja kode. Google, recimo, jih je predpisal za vse jezike, ki jih pogosteje uporablja ([Google Style Guides](http://google.github.io/styleguide/)). Vsi, ki programirajo v tem podjetju, se morajo teh pravil držati.\\n\","," \"\\n\","," \"1. **Imena naj se vedno začnejo z malo črko.** Nekateri ste se učili drugih jezikov, kjer so navade drugačne. Ali pa so vas učili Python učitelji, ki nikoli niso brali pravil za Python. Kasneje bomo spoznali določene stvari, ki jih poimenujemo z veliko začetnico; dotlej pa - mala.\\n\","," \"\\n\","," \"2. **Če je ime sestavljeno iz več besed, jih ločimo s podčrtajem,** , na primer `velikost_cevlja`. Obliko `velikostCevlja` boste videli le v starejših programih v Pythonu.\\n\","," \"\\n\","," \"3. **Ime naj pove vsebino, ne vrste spremenljivke,** npr. `pospesek = 9.8`. Spremenljivke ne poimenujte `stevilka`, ceprav morda res vsebuje številko. Ko bomo začeli uporabljati sezname, vas bo veliko uporabljalo ime `seznam`, in če bodo v programu trije seznami, jih obste poimenovali `seznam1`, `seznam2`, `seznam3`. Da, to vam bo zelo pomagalo razumeti, kaj ste shranili kam. To je približno tako, kot če bi na knjigah pisalo \\\"Knjiga\\\" namesto, kaj je v njej. (Ni pa zelo drugače od steklenic v Mercatorju, na katerih preprosto piše \\\"Vino\\\".)\\n\","," \"\\n\","," \"4. **Kratka imena.** Izogibajte se imen, kot so `a`, `aa`, `asd`... ki ne povedo nič. Sicer me boste videli, da bom uporabljal kratka imena na predavanjih, vendar le zato, ker bom tipkal v živo in nimate časa gledati, kako tipkam `imena_nekih_studentov`. Program, v katerem je deset spremenljivk z imeni `a`, `b`, `aa`, `a2`, `a3`, `a4` je nemogoče brati.\\n\","," \"\\n\","," \"5. **Dogovorjena imena spremenljivk.** Po drugi strani pogosto uporabljamo kratka imena za \\\"nepomembne\\\" spremenljivke, ki \\\"živijo\\\" le nekaj vrstic. Kot v matematiki bodo tudi tu spremenljivke z imeni `i`, `j`, `k` pogosto števci, se pravi, nekaj, kar bo teklo od, recimo, 1 do 10. Po eni strani neinformativno, po drugi pa vedno, ko vidimo `i`, `j`, `k` vemo, da gre za števec. `e` bo element kakega zaporedja. `x` in `y` bosta argumenta (tako kot matematiki vedno rečejo `sin(x)`). Imena `s`, `t`, `u` bodo pogosto seznami. Nekateri imajo za seznam raje `xs` (kot angleška množina imena `x`), saj je `xss` potem seznam, ki vsebuje sezname. To boste videli predvsem v nalogah na vajah. Ime `s` bo sicer pogosto predstavljalo tudi besedilo.\\n\","," \"\\n\","," \"Tega se vam niti slučajno ni potrebno zapomniti. Glejte, kako bom pisal na predavanjih in v zapiskih, pa se boste navadili.\\n\","," \"\\n\","," \"Na to temo bi se dalo povedati še veliko in morda nekoč bomo. Za zdaj pa vam resno polagam na srce, kar je napisano tu. Predvsem tistim, ki že znate programirati in se vam zdi najlepše tako, kot delate zdaj. Meni se zdijo v Pythonu lepa Pythonova pravila, v JavaScriptu pa pravila JavaScripta.\\n\","," \"\\n\","," \"Kdor razmišlja drugače, je kot Francoz, ki iz patriotizma namerno govori angleško s francoskim naglasom. Ali Štajerc, ki jo zavija po štajersko.\\n\","," \"\\n\","," \"Vsi našteti dogovori (in še veliko podobnih bomo spoznali sproti) so samo dogovori. Če se jih ne držimo, bodo programi še vedno delovali. Pythonu je vseeno. Ni pa vseeno nam: če se držimo takšnih dogovorov, bodo naši programi preglednejši tako za nas, kot za druge, ki upoštevajo enaka pravila pisanja in bodo morali brati naše programe za nami.\\n\","," \"\\n\","," \"![XKCD](https://imgs.xkcd.com/comics/license_plate.png)\\n\","," \"\\n\","," \"