Najprej si poglejmo učilnico. Za vse začetnike lahko tukaj najdete čudovito knjigo Python za programiranje. Poda odlično iztočnico za učenje. Priporoč

Podobni dokumenti
Strojna oprema

Microsoft Word - UP_Lekcija04_2014.docx

MATLAB programiranje MATLAB... programski jezik in programersko okolje Zakaj Matlab? tipičen proceduralni jezik enostaven za uporabo hitro učenje prir

Diapozitiv 1

Microsoft Word - CNR-BTU3_Bluetooth_vmesnik

Microsoft PowerPoint - Java_spremenljivke

Poročilo za 1. del seminarske naloge- igrica Kača Opis igrice Kača (Snake) je klasična igrica, pogosto prednaložena na malce starejših mobilnih telefo

Microsoft Word - M docx

Turingov stroj in programiranje Barbara Strniša Opis in definicija Definirajmo nekaj oznak: Σ abeceda... končna neprazna množica simbolo

Microsoft PowerPoint - Objekti_gradnja.ppt

Delavnica Načrtovanje digitalnih vezij

Datum in kraj

RAM stroj Nataša Naglič 4. junij RAM RAM - random access machine Bralno pisalni, eno akumulatorski računalnik. Sestavljajo ga bralni in pisalni

(Microsoft Word - U\350enje telegrafije po Kochovi metodi.doc)

RAČUNALNIŠKI PRAKTIKUM d o c. d r. A N D R E J T A R A N E N K O Kdo bo z vami? Predavatelj: dr. Andrej Taranenko

1 MMK - Spletne tehnologije Vaja 5: Spletni obrazci Vaja 5 : Spletni obrazci 1. Element form Spletni obrazci so namenjeni zbiranju uporabniških podatk

Navodila za uporabo Mini prenosna HD kamera s snemalnikom

Navodila za programsko opremo FeriX Namestitev na trdi disk Avtor navodil: Martin Terbuc Datum: December 2007 Center odprte kode Slovenije Spletna str

NEVTRIN d.o.o. Podjetje za razvoj elektronike, Podgorje 42a, 1241 Kamnik, Slovenia Telefon: Faks.: in

Diapozitiv 1

Navodila za uporabo Mini snemalnik

Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Verjetnost Pisni izpit 5. februar 2018 Navodila Pazljivo preberite

Vaja04_Ver02

NAJRAJE SE DRUŽIM S SVIČNIKOM, SAJ LAHKO VADIM ČRTE IN KRIVULJE, PA VELIKE TISKANE ČRKE IN ŠTEVILKE DO 20. Preizkusite znanje vaših otrok in natisnite

RAČUNALNIŠTVO VARNOSTNA KOPIJA IN SLIKA DISKA Aleš Ovsenek Uvajanje novih izobraževalnih programov v srednjem poklicnem in strokovnem izobraževanju s

Microsoft Word - SI_vaja1.doc

ŠTEVCI PROMETA IN NJIHOVA UPORABA ZA NAMENE STATISTIK ČRT GRAHONJA

Navodila za uporabo programske opreme OTRS verzija Administracijska navodila Avtor navodil: Sebastijan Šilec Datum: December 2007 Center odprte

Kazalo 1 DVOMESTNE RELACIJE Operacije z dvomestnimi relacijami Predstavitev relacij

PowerPointova predstavitev

Vprašanja za 2. izpitno enoto poklicne mature Strokovni predmet NPA Vprašanja Visual C# (4. letnik) 1. Uporabniški vmesnik razvojnega okolja Visual C#

STAVKI _5_

PowerPoint Presentation

Nameščanje Adopt Open Java Development Kit 8

BYOB Žogica v vesolju Besedilo naloge Glavna ideja igre je paziti, da žoga ne pade na tla igralne površine, pri tem pa zbrati čim več točk. Podobno ig

PowerPointova predstavitev

INTERAKTIVNE REŠITVE PROMETHEAN

TNUV Lab

Poročanje izdanih računov pri gotovinskem poslovanju

Space Invaders Opis igre: Originalna igra: Space Invaders je arkadna igra, ki so jo ustvarili leta Bila je ena izmed prvih streljaških iger, v k

PowerPoint Presentation

(Microsoft Word - MSDN AA Navodila za \232tudente FS.doc)

Nameščanje Adopt Open Java Development Kit 8

Zavod sv. Stanislava Škofijska klasična gimnazija Programiranje v Pythonu: računalniška igra»kača«maturitetna seminarska naloga iz informatike Avtor:

Urejevalna razdalja Avtorji: Nino Cajnkar, Gregor Kikelj Mentorica: Anja Petković 1 Motivacija Tajnica v posadki MARS - a je pridna delavka, ampak se

Spoznajmo PowerPoint 2013

Chapter 1

6.1 Uvod 6 Igra Chomp Marko Repše, Chomp je nepristranska igra dveh igralcev s popolno informacijo na dvo (ali vec) dimenzionalnem prostoru

PowerPointova predstavitev

Vaja 2 Virtualizacija fizičnih strežnikov in virtualni PC A. Strežnik Vmware ESX Namestitev strežnika VMware ESX 3.5 na fizični strežnik 2. Nas

Microsoft Word - M docx

Navodila za študente

Microsoft Word - CN-BTU4 Quick Guide_SI

Priloga 1: Pravila za oblikovanje in uporabo standardiziranih referenc pri opravljanju plačilnih storitev Stran 4012 / Št. 34 / Uradni lis

Zadeva: Ponudba

LABORATORIJSKE VAJE IZ FIZIKE

TNUV Lab5

INFORMATOR BIROKRAT 1/2011

Microsoft PowerPoint _12_15-11_predavanje(1_00)-IR-pdf

Microsoft Word - M _mod..docx

7. VAJA A. ENAČBA ZBIRALNE LEČE

Obračun storitev v vrtcu in šoli

INFORMATOR BIROKRAT 1/2011

Slide 1

Komisija za študijske zadeve UL Medicinske fakultete Vrazov trg 2 SI-1000 Ljubljana E: T: Režim študija Predmet: Uvod

Šolski center Celje Gimnazija Lava IZDELAVA SPLETNEGA BRSKALNIKA Raziskovalna naloga Avtor David Simunič, 2. e Mentor Tomislav Viher, univ. dipl. org.

_ _BDA_CapitalSports_CS-Timer.indd

Prekinitveni način delovanja PLK Glavni program (OB1; MAIN) se izvaja ciklično Prekinitev začasno ustavi izvajanje glavnega programa in zažene izvajan

Vaja 3 Kopiranje VM in namestitev aplikacij - strežnik SQL 2000 SP3a A. Lokalni strežnik Vmware ESX Dodajanje uporabnikov vajexx v skupino Vaje

Navodila Trgovina iCenter

Zavod sv. Stanislava Škofijska klasična gimnazija Programiranje v Pythonu Program za računanje Maturitetna seminarska naloga iz informatike Kandidat:

NAVODILA ZA IZPOLNJEVANJE OBRAZCA

Univerza v Mariboru Fakulteta za naravoslovje in matematiko Oddelek za matematiko in računalništvo Enopredmetna matematika IZPIT IZ VERJETNOSTI IN STA

Microsoft Word - CNC obdelava kazalo vsebine.doc

Orodje za izvoz podatkov

Učinkovita izvedba algoritma Goldberg-Tarjan Teja Peklaj 26. februar Definicije Definicija 1 Naj bo (G, u, s, t) omrežje, f : E(G) R, za katero v

Podatkovni model ER

Namesto (x,y)R uporabljamo xRy

Microsoft Word - M docx

Logični modul LOGO!

Iztok KOSEM in Špela ARHAR HOLDT Trojina, zavod za uporabno slovenistiko ANALIZA BESEDIŠČA IN SKLADNJE V BESEDILIH TESTA BRALNE PISMENO

Računalniški praktikum Projektna naloga - Izdelava spletne strani Avtor: Matej Tekavčič Skupina: Matej Tekavčič - koordinator Simon Vrhovnik Tine Kavč

Navodila za namestitev odjemalca ibsreport2 produkcijsko okolje (poročanje Banki Slovenije) Avgust 2017

Uporaba preglednic za obdelavo podatkov B. Golli, PeF 15. november 2010 Kazalo 1 Uvod 1 2 Zgled iz kinematike Izračun hitrosti

Slide 1

Microsoft Word - Seštevamo stotice.doc

N HERMES OVICE Številka 26, oktober

EKVITABILNE PARTICIJE IN TOEPLITZOVE MATRIKE Aleksandar Jurišić Politehnika Nova Gorica in IMFM Vipavska 13, p.p. 301, Nova Gorica Slovenija Štefko Mi

DIGITALNE STRUKTURE Zapiski predavanj Branko Šter, Ljubo Pipan 2 Razdeljevalniki Razdeljevalnik (demultipleksor) opravlja funkcijo, ki je obratna funk

Microsoft PowerPoint - petek A-sambolicbeganovic [Read-Only] [Compatibility Mode]

Microsoft Word - SI_vaja5.doc

seminarska_naloga_za_ev

ISOFT , računalniški inženiring

VAJE RID 1 (4), program PTI, šol

Microsoft Word - ELEKTROTEHNIKA2_ junij 2013_pola1 in 2

Zbornica zdravstvene in babiške nege Slovenije Zveza strokovnih društev medicinskih sester, babic in zdravstvenih tehnikov Slovenije Stanje:

Microsoft Word - ELEKTROTEHNIKA2_11. junij 2104

Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Statistika Pisni izpit 6. julij 2018 Navodila Pazljivo preberite be

Miluma Trader Miluma Trader navodila: V nadaljevanju sledijo osnovna navodila, kako začeli uporabljati Miluma Trader. 1. Preverite spletno stran Ta po

Transkripcija:

Najprej si poglejmo učilnico. Za vse začetnike lahko tukaj najdete čudovito knjigo Python za programiranje. Poda odlično iztočnico za učenje. Priporočam vam, da si v začetnih tednih vzamete par dni in se res dobro naučite Python. V nasprotnem primeru boste imeli skozi celoten semester velike težave z delom na domačih nalogah. Tukaj je tudi povezava na PyCharm, ki je odličen IDE. Za vse tiste, ki uporabljate Linux ali macos imate Python že inštaliran. Opozorit vas morem le na to, da obstajata dve verziji Pythona: 2+ in 3+. Prva je starejša in ni kompatibilna z novejšo. Zaradi velike razširjenosti pa je uradno podprta še vse do leta 2020. Mi bomo pri tem predmetu uporabljali novejšo verzijo. Načeloma veljajo vse vezje od 3.3 naprej za stabilne in se niso preveč spreminjale, da pa ne bi prišlo do nepotrebnih napak pri testiranju je boljše, da se poenotimo in rečemo, da razvijamo v verziji 3.6 ali 3.7. Uporabniki Windowsa namestite Python s pomočjo inštalacijskega programa, ki ga najdete na spletu. Python je visoko-nivojski programski jezik, ki se interpretira. Omogoča pisanje tako objektno kot funkcijsko orientirane kode. Znan je predvsem po berljivosti kode. Je dinamično tipiziran, kar pomeni, da spremenljivke nimajo določenih primitivnih tipov kot so int, float, char... Vse v Pythonu je objekt. Če odpremo Python v lupini dobimo interaktivno Python lupini, kjer lahko izvajamo kodo vrstico po vrstici. Interpreter pa nam vrača rezultate. Začnimo najprej z nekaj enostavnimi primeri. 1+1 2**10 3+4j print( abc ) a = 10, a + 20 [ abc, 24, None, True] Premaknimo se v PyCharm. Najprej ustvarimo novi projekt. Ker smo prej ugotovili, da imamo lahko več Python interpreterjev moramo nastavit katerega bomo uporabljali. To naredimo v nastavitvah projekta. Za nas Linux in masos uporabnike je pomembno, da ustvarimo novo virtualno okolje. Kaj točno to je bom razložil kasneje. Na levi strani imamo seznam datotek, na desni se bo prikazovala koda. Preden začnemo pisat kodo v datoteke pa si poglejmo še spodnjo orodno vrstico. Tukaj namreč najdemo Python interaktivno lupino. Ta pa nam omogočen še malo več kot tista od prej. Imamo namreč autocomplet ter seznam trenutno nastavljenih spremenljivk ter njihove vrednosti. Preden začnemo pisat programe v datoteko si poglejmo še nekaj primerov kode. Za začetek si poglejmo sezname, tej boste namreč veliko uporabil pri domačih nalogah: s = [3, 1, 2, 4] len(s) s.append(5) s.remove(3) s.sort() s[0] s[-2] s[1:3] s[:-1] Zelo podobno kot seznam se obnaša tudi podatkovni tip terka le, da je njegova lastnost nespremenljivost (immutable). Ne moremo dodajat ali odstranjevat elementov. Podobna struktura so

tudi množice. Pri njih imamo lahko vedno samo eno primer elementa. Podobno kot seznam se obnaša tudi nizi, ki je če pomislimo samo seznam črk. Veliko bomo pa tudi uporabljali podatkovno strukturo slovar. starost = {} starost[ Robi ] = 24 starost[ Jaka ] = 23 print(starost[ jaka ]) starost.keys() starost.values() starost.items() Nadaljujemo programiranje v datoteki. Ustvarimo novo datoteko. Tradicionalno jo poimenujemo foo, našo prvo funkcijo pa bar. def bar(x): return x**2 if name == main : print(bar(5)) Definirali smo funkcijo, ki prejme en argument ter vrne njen kvadrat. Telo funkcije je zamaknjeno s tabulatorjem ali štetimi presledki. PyCharm avtomatsko tabulatorje preslika v presledke. Ta del vam je zagotovo očiten. Drugi del je if stavek, ki pa mogoče ni čist jasen na prvi pogled. V spremenljivki name je shranjeno ime programa. Ta je enak main, kadar poganjamo skripto kot glavni program. Spremenljivka je nastavljen tudi na ime skripte, kadar se funkcije in razredi uvažajo v drugo kodo. Več o tem tudi še kasneje. Mimogrede, Python zna avtomatsko testirat ali je podan izraz resničen (True). Tako na primer lahko namesto a==true napišeš samo a. Sedaj, ko ste dobit malo občutka koko delat s Pythonmo nadaljujmo na začetek reševanja domače naloge. Poglejmo si navodila za prvo domačo nalogo in kaj pravijo zapiski. Ustvarimo novo datoteko naloga1.py kamor bom pisal kodo. Pogledamo si v zapiske, kako se izvaja hierarhično razvrščanje v skupine. Pretipkam v Python komentarje, katere funkcionalnosti moremo sprogramirat. Pričnem z branjem datoteke. Pokažem jim kako zgleda datoteka. Vidimo, da so stolpci ločeni z tabulatorjem. Pričnem najprej v konzoli. Kar je dobro v tej konzoli je tudi to, da lahko uporabljamo relativen dostop do datotek. Odprem datoteko. Python ima bogat nabor vgrajenih funkcij ( python builtin functions in python reading files ). Prav tako bogat je tudi nabor metod objekta niz ( python string object ). f = open('1.domaca/data/grades.csv') s = f.readline() f.close() s = s.rstrip() s = s.split( \t ) header = s[1:] print(line)

Prestavim v datoteko: with open(file_name) as f: header = f.readline().strip().split("\t")[1:] row = line.strip().split("\t") return data Sedaj moramo to samo še zapakirat v neko strukturo, recimo slovar. Ključ bo kar ime osebe, torej prvi element v seznamu, preostanek seznama pa so ocene, dejanski podatki, ki jih potrebujemo za primerjavo. Ne smemo pozabit, da iz datoteke beremo podatke kot nize, zato jih moramo še spremenit v številke. To lahko naredimo z enostavno for zanko. numbers = [] for n in row[1:]: numbers.append(float(n)) Ampak Python zna takšne enostavne for zanke tudi lepše napisat. Načinu se reče list comprehension numbers = [float(n) for n in row[1:]] Tega seveda ne rabite uporabljat. Osebno se mi zdi, da je koda tako veliko bolj jasna, dejansko pa je tudi kanček hitrejša, saj se čas izvajanja zmanjša za čas klica append funkcije. Končno združimo to vse v funkcijo, ki prebere podano datotek ter shrani podatke v slovar in ga vrne. To je sicer malo banalen primer ampak v splošnem vam priporočam, da najprej spišete košček programa v lupini, jih testirate in nato združite v celoto. def read_file(file_name): with open(file_name) as f: header = f.readline().strip().split("\t")[1:] data = {} row = line.strip().split("\t") data[row[0]] = [float(x) for x in row[1:]] return data Sedaj ko smo sprogramirali prvo večjo funkcijo je čas, da si pogledamo najpomembnejši aspekt programiranja razhroščevanje. Poglejmo kako se to pravilno počne v PyCharm-u. Nastavim točko zaustavitve. Poženem razhroščevalnik, pokažem kako se premikaš po kodi, pokažem izpis spremenljivke, pokažem kako vstopit v interaktivno lupino in kako spremembe vplivajo na izvajanje programa. Nadaljujem z izpisom komentarjev v razred in posamezne metode. Pojasnim, da je init metoda funkcija, ki se požene ob inicializaciji objekta. Pojasnim, da vse metode kot prvi argument prejmejo spremenljivko self v kateri se nahaja instanco objekta. Pri inicializaciji nastavimo skupine v katerih so po en primer. Zopet uporabimo list comprehentin. Shranimo v spremenljivko self.clusters. Ok, sedaj začnimo pri najenostavnejši funkciji row_distance. Želimo si, da bi jo lahko poklicali kot: self.row_distance("polona", "Rajko"), ta pa nam bi vrnila evklidsko razdaljo med vektorjema ocen. Pa se spomnimo na hitro kaj je evklidska razdalja. Ok, torej vem že kako bomo dobili dva seznama ocen iz slovarja. Sedaj moremo samo sprogramirat del, ki iz dveh seznamov (ali vektorjev)

izračuna razdaljo. Da nam bo lažje si zopet najprej pomagajmo s interaktivno lupino. Lahko bi šli po c-jevsko in v for zanki povečevali števec ter tako preko indeksa dobili posamezne elemente. Mogoče se da v Pythonu to kako lepše naredit. Poggoglaj python pair elements from two lists xs = [1, 2, 3] ys = [2, 3, 4] s = [] for x, y in zip(xs, ys): s.append((x y) ** 2) Aha zopet smo uporabil zgolj append, to sedaj znamo že krajše napisat: s = [(x y) ** 2 for x, y in zip(xs, ys)] Sedaj moremo to vse samo seštet in korenit. Sumim, da bi morala obstajat funkcija, ki bi seštela seznam in izračunala koren. Res je med build-in funkcijami sum(), korena pa ne najdem. Pogooglajmo python square. Očitno obstaja v knjižnici math funkcija sqrt, ki počne ravno to. No natančneje knjižnicam rečemo moduli. Nekaj je takšnih, ki že pridejo skupaj z Pythonom. Pogooglajmo python buildin modules. Modul lahko uvozimo na več načinov. import math from math import sqrt No pa združimo kar smo do sedaj naredili. Dejansko lahko zapišemo celotno kodo v eni vrstici. Pri klicu funkcije sum ne rabimo dodat oglatih oklepajev. Za tiste, ki jih zanima zakaj si naj pogledajo kaj so generatorji v Pythonu. math.sqrt(sum((x y) ** 2 for x, y in zip(xs, ys))) Sedaj moremo v svojem programu samo še zamenjat xs in ys z vektorji iz slovarja. Funkcijo cluster_distance boste morali spisat sami. Tukaj boste morali najprej razstavit gnezden seznam seznamov v en sam seznam elementov nato pa po formuli izračunat želen linkage. Prav tako boste morali sami napisat funkcijo run in plot_tree. Sedaj bomo na hitro spisali samo še closest_clusters. Se pravi najti moramo tak par skupin, ki so si najbližje. Drugače povedano izračunati moremo razdaljo med vsemi kombinacijami trenutnih skupin, ter izmed njih izbrat tak par, katere razdalja je najmanjša. Ok, začnimo pri kombinacijah, to se sliši kot nekaj, za kar bi morala že obstajat funkcija, poglejmo kaj pravi google. Uporabimo combinations funkcijo iz modula itertools. Ta nam vrača terke ki jih podobno kot prej razpakiramo vsako v svojo spremenljivko. Med njimi izračunamo razdaljo, za to že imamo funkcijo. [cluster_distance(c1, c2) for c2, c2 in combinations(clusters, 2)] Očitno moremo tej vrednosti shranit, saj bomo morali kasneje najt najmanjšo. Ker pa nas ne zanima samo najkrajša razdalja ampak tudi par skupin, ki ima to razdaljo si moramo shranit oboje. Prav v takih primerih se ponavadi uporabljajo terke. Torej naredimo: [(cluster_distance(c1, c2), (c1, c2)) for c2, c2 in combinations(clusters, 2)]

Sedaj moramo najt najmanjši element v seznamu. Python pri urejanju terk upošteva najprej prve elemente nato druge in tako naprej. Ker že vemo, da ima Python bogat nabor standardnih funkcij smo prepričani, da mora obstajat funkcija min. In res da :). Za lažje razumevanje nazaj odpakirajmo končno vrednost. dis, pair = min((cluster_distance(c1, c2), (c1, c2)) for c2, c2 in combinations(clusters, 2)) Ok to je vse, kar vam lahko pokažem od domače naloge. Dolžan pa sem vam še nekaj pojasnitev. Nismo si namreč še ogledali testov. Odprem datoteko in pokažem teste. Razložim, da je vsaka metoda, ki se začne z besedo test eden od testov. Pojasnim, da se znotraj testa ponavadi izvede del kode ter s pomočjo assert stavkov preveri pravilnost izhodov. Poizkusim pognat in ne dela :( Oh očitno testi uporabljajo zunanje knjižnice. Tej je potrebno dodatno inštalirat. Tukaj se morem vrnit tudi nazaj na virtualna okolja. To so kopije Python interpreterja skupaj z dodatno inštaliranimi knjižnicami. Tako kadar inštaliraš dodaten modul se ta namesti samo v to določeno okolje. Obstaja več razlogov zakaj jih je dobro uporabljat glavni izmed katerih je, da ne onesnažujemo sistemske inštalacije Pythona. Dobra praksa je, da imaš ločene inštalacije Pythona za vsak projekt na katerem delaš. Na spletni strani pypi lahko najdete ogromen nabor paketov za Python. Paketi se namestijo s pomočjo orodja pip. Pozor, vsako virtualno okolje ima svoj pip. Nekateri paketi imajo del kode implementiran v C-ju in ta se ob inštalaciji prevede. Tako lahko nastanejo problemi, če nimate potrebnih programov za prevajat. Windows uporabniki imate lahko še posebej probleme. Za vas v takih primerih priporočam uporabo programa miniconda, ki omogoča inštalacijo že prevedenih knjižnic. Sedaj, ko smo inštalirali naše dodatne module lahko končno poženemo teste. Pokažem grafičen vmesnik testov.