Programiranje Od problema do programa Cilji: razumevanje, da je računalnik le en od pripomočkov, ki jih uporabljamo pri reševanju problemov; ugotavljanje, katere probleme lahko rešujemo z računalnikom; poznavanje, da za reševanje problemov z računalnikom potrebujemo navodila in podatke; poznavanje opredelitve programa; ugotavljanje kakšne programe poznamo, kakšne probleme rešujejo, za kateri problem bi bil računalnik primeren, vendar nimamo programa. Marjana Pograjc Debevec
Uvod Za svoje delo računalnik potrebuje program: Računalnik premešča bite iz ene lokacije na drugo Za svoje delo računalnik potrebuje program: Gre za zaporedje navodil, ki jih procesor v računalniku razume in izvede
Problem Opredelitev problema zaradi lažjega razvoja programa jasna opredelitev, kaj že vemo, katere podatke poznamo (vhodni podatki), kaj naj bo rezultat Zapis algoritma v programskem jeziku informacijska sistemska analiza se ukvarja s tem kako je potrebno smiselno in učinkovito opredeliti probleme za katere naj se izdelajo računalniški programi Testiranje programa
Programiranje Rešitev problema z izvajanjem programa Programiranje je proces izdelave računalniškega programa Poznavanje programiranja pomaga razumeti računalnike Znanje programiranja uporabimo tudi na področjih, ki niso neposredno povezana z računalništvom.
Algoritem, programiranje in program Cilji: poznavanje sestave programa razumevanje pomena dokumentiranja programa; poznavanje algoritma in programiranja; naštevanje glavnih korakov za izdelavo programa. Marjana Pograjc Debevec
Pot od problema do računalniškega programa ALGORITEM ZAPIS V PROGRAMSKEM JEZIKU PROGRAM
Algoritem programiranje in program Glavni koraki za izdelavo programa: Opredelitev problema Načrtovanje postopka rešitve (algoritma) Zapis postopka rešitev v programskem jeziku; Izvršitev programa na računalniku; Preverjanje programa Izdelava dokumentacije programa.
Algoritem Rešitev načrtujemo, ko je problem dovolj podrobno opredeljen Problem nadgradimo na manjše probleme dokler ne pridemo do zaporedja preprostih navodil – algoritma, ki privede do rezultata Algoritem je spisek navodil za izvedbo kakega postopka; vsako navodilo (= korak algoritma) mora biti DOBRO poznana operacija Algoritmi morajo biti: nedvoumni končati se morajo v KONČNEM številu korakov.
Algoritem Kako podrobno je algoritem razdeljen, je odvisno od tega, komu je namenjen Zapis algoritma v izbranem programskem jeziku = (računalniški) program.
Izrazi Algoritem Program Programski jezik
Marjana Pograjc Debevec Zapis algoritma Cilji: poznavanje algoritma izdelanega v različnih oblikah (besedni, diagram poteka, ..) poznavanje značilnosti algoritma; razumevanje postopka izdelave algoritma; izdelava algoritma. Marjana Pograjc Debevec
Zapis algoritma Algoritem zapišemo: s slikami z besedami znaki, ki jih le mi razumemo Da je algoritem razumljiv, uporabljamo za njegovo izdelavo dogovorjene znake in označbe.
Zaporedje preprostih opravil, ki nas v končnem številu korakov pripelje do rezultata
Potrebujemo 5 jajc, 20 dag sladkorja, ščepec soli, 20 dag jedilne čokolade, 25 dag masla. Algoritem za poznavalca je drugače razčlenjen od algoritma za začetnika Čokolado razlomimo na koščke in omehčamo nad soparo Umešamo maslo sol in sladkor. Dodamo omehčano čokolado in rumenjake Stepamo, dokler zmes ne postane penasta. Zmes zlijemo v pekač Beljake stepemo v trd sneg. Sneg nanesemo na čokoladno zmes Pečemo na 150° 20 min
Zapis algoritma V računalništvu zapisujemo algoritme z diagramom poteka, ki ga izvajamo tako, da sledimo puščicam v diagramu. Lastnosti algoritma: sestavljen iz zaporedja korakov ustavljiv (pri različnih kombinacijah vhodnih podatkov) nedvoumen splošen (rešuje čim več podobnih problemov).
PODATKI Konstanta Spremenljivka Vrednost, ki se med izvajanjem programa ne spreminja Ime za prostor v pomnilniku, ki je rezerviran za podatke (vsebina), ki je določena s podatkovnim tipom. Konstanta Spremenljivka
Prireditev vrednosti Vsaka spremenljivka ima svoje Ime Vrednost Kadar ne vemo kakšno vrednost ima podatek, uporabimo v algoritmu spremenljivko spremenljivke omogočajo, da sestavimo diagram poteka ne glede na to, kakšno vrednost imajo. Vsaka spremenljivka ima svoje ime in vrednost Ime Vrednost
prireditveni operator Prireditev vrednosti V diagramu poteka priredimo spremenljivki vrednost s prireditvenim operatorjem matematični izraz prireditveni operator spremenljivka 1 N
prireditveni operator Prireditev vrednosti Spremenljivka n na obeh straneh izraza prireditveni operator matematični izraz spremenljivka n n + 1 spremenljivki n naj se vrednoti poveča za 1
Diagram poteka s prireditvijo vrednosti spremenljivki Prireditev vrednosti V diagramu poteka uporabimo za prireditev pravokotnik START A 5 STOP Diagram poteka s prireditvijo vrednosti spremenljivki
Diagram potek z branjem, z izpisom in s prireditvijo Branje ali izpis Za prikaz branja in izpisovanja uporabimo v diagramih poteka paralelogram START Beri A A A + 5 Diagram potek z branjem, z izpisom in s prireditvijo Izpiši A STOP
Simboli diagrama poteka PRIMER PRIMER START PRIREDITEV a a + 1 POTEK STOP VEJITEV a + b < c BRANJE PODATKOV Beri a,b,c IZPIS PODATKOV izpiši a,b,c
Naloga Narišite diagram poteka za izpis absolutne vrednosti števila (ST), ki ga vpišete preko tipkovnice.. Narišite diagram poteka, ki prebere in izpiše poljubno celo število (x)
Naloga Narišite diagram poteka, ki prebere poljubno celo število (X) in ga izpiše trikrat. Narišite diagram poteka, ki izpiše srednjo vrednost (SR) treh prebranih celih števil (A, B, C)
Naloga Narišite diagram poteka, ki prebere dve celi števili (x y), zamenja njuni vrednosti (POMOZNA) med seboj in ju izpiše. V
Izrazi Diagram poteka Programiranje Spremenljivka
Marjana Pograjc Debevec Zapis algoritma Cilji: izdelava algoritma z vejitvijo; izdelava algoritma z zanko Izdelava algoritma s tabelarično spremenljivko Marjana Pograjc Debevec
Vejitev Za prikaz vejitve uporabljamo v diagramih poteka deltoid. START Beri A, B A > B C B C A Izpiši C STOP Diagram poteka z vejitvijo
Zanka Za zaporedje enakih ukazov uporabimo v diagramih poteka zanko START C 5 Zanka
Zanka Izvajanje zanke nadziramo z določenim pogojem START Izpiši A * C Beri A, B C 1 Izpiši A * C C C + 1 ne C > B da Diagram poteka z zanko STOP
Tabelarična spremenljivka Indeks Število 1 15 2 17 3 16 4 20 5 21 Tabelarične spremenljivke imajo skupno ime, med seboj pa jih ločujemo z indeksom Vrednost spremenljivke A3 je 16…
Tabelarična spremenljivka C TC M 1 10 2 5 3 15 4 25 17 V algoritmu izvedemo postopek nad enim elementom, nato pa le spreminjamo indeks C 1 M T(C) ne Na koncu je največje število shranjeno v spremenljivki M. da C <= N M < T(C) da C C + 1 ne Diagram poteka za iskanje največjega števila med N števili tabelarične spremenljivke T
Naloge I ← 1 J = J + 1 I = I + 1 Branje matrike reda 3 x 3! A (I,J) A(1,1) A(1,2) A(1,3) A(2,1) A(3,2) A(3,3) A(3,1) A(3,2) A(3,3) A (I,J) START I ← 1 J ← 1 BRANJE A (I, J) ne J ← 3 J = J + 1 da ne I ← 3 I = I + 1 da end
Naloge Seštevanje dveh matrik reda 3 x 3! I ← 1 A (I, J) B (I, J) A(1,1) A(1,2) A(1,3) A(2,1) A(3,2) A(3,3) A(3,1) A(3,2) A(3,3) B(1,1) B(1,2) B(1,3) B(2,1) B(2,2) B(2,3) B(3,1) B(3,2) B(3,3) A (I, J) B (I, J) START I ← 1 J ← 1 BRANJE A (I, J) ne J ← 3 J = J + 1 da ne I ← 3 I = I + 1 da end
Naloge Narišite diagram poteka z zanko, ki prebere poljubno celo število (x) in ga izpiše trikrat. ALI
Naloge Narišite diagram poteka, ki prebere dve števili (X, Y). Prvo število izpiše tolikokrat, kot je vrednost drugega števila. ALI
Naloge Napišite algoritem, ki prebere celo število. Če je prebrano število deljivo z 2 in s 3, ga izpiše. Algoritem predstavite z diagramom poteka.
Naloge Narišite diagram poteka, ki pri danem podatku X izračuna vrednost funkcije Y. Vrednost funkcije določimo po pravilu: -če je X manjši od 1, naj bo Y=X*10, -če je X večji ali enak 1, naj bo Y=X.
Ali dani diagram poteka predstavlja algoritem? START korak x x 1 x x > 1 ne da STOP
Kakšna vrednost se izpiše? START x 1 korak x x x < 0,3 ne da Izpiši x STOP
Naloga Imamo geometrijsko zaporedje 1,3,9,27, … Razvijmo algoritem, a) ki izpiše tisti člen, ki prvi preseže vrednost 10 000. b) izpiše kateri po vrsti je ta člen.
Marjana Pograjc Debevec Programski jeziki Cilji: spoznajo programski jezik; opišejo funkcijo programskega jezika; naštejejo vrste (strojni, …) programskih jezikov in opredeliti njihove funkcije; spoznajo, da računalnik neposredno »razume« le strojni jezik; razlikujejo med prevajanjem in tolmačenjem. Marjana Pograjc Debevec
Jeziki Naravni jeziki Problem: razumljivost (kaj jo omogoča?) sintaksa in semantika Umetni jeziki esperanto, jezik kemijskih formul, jezik aritmetičnih izrazov, pascal
Razvoj programskih jezikov strojni jezik (1950) zbirni jezik (assembler) (1955) višji programski jeziki (1960) jeziki 4. generacije ( po1980) jeziki, podobni naravnemu jeziku ali jeziki UI (po 1990)
Programski jeziki Programski jezik mora omogočiti Opis problema zajema opredelitev izhodiščnih podatkov in končni rezultat Opis postopka za njegovo rešitev vsebuje opis korakov, ki nas od izhodiščnih podatkov pripelje k rezultatom
Programski jeziki in človek Nepostopkovni programski jezik (Prolog, LISP, SQL) vsebujejo sredstva za opis podatkov in relacije med njimi Postopkovno programiranje (Pascal, Basic, Pyton, C, Java, Javascript,) Vsebujejo izrazna sredstva za opredelitev podatkov in algoritmičnih gradnikov za opis postopka rešitve
Programski jeziki in računalnik Računalnik razume le program napisan v strojnem jeziku Strojni jezik ima vsaj dve veliki nerodnosti: Človeku težko razumljiv dvojiški zapis, Odvisnost od uporabljenega mikroprocesorja.
Programski jeziki in računalnik Strojni jezik dve vrednosti napetosti = 0, 1 vsi ukazi = zaporedje 0 in 1 primer programa: 01110010 10011001 00100101 11001100 ...
Seštevanje dveh števil (procesor Pentium)
Seštevanje dveh števil (procesor Pentium) Prvi ukaz: mov eax,[$0043F808]
Seštevanje dveh števil (procesor Pentium) Drugi ukaz: add eax,[$0043F810]
Seštevanje dveh števil (procesor Pentium) Tretji ukaz: mov [$0043F80C],eax
Programski jeziki in računalnik Simbolno označevanje ukazov strojnega jezika imenujemo zbirni jezik ali assembler Zbirni jezik je za človeka bolj razumljiv kot strojni jezik
Programski jeziki in računalnik Zbirni jezik Vsakemu strojnemu ukazu so priredili besedno oznako (mnemonik) npr. ADD, JP, INC, … Program ZBIRNIK - prevajalnik Vsak procesor ima svoj zbirni jezik move acc, #5 add acc, #1 move acc, #145 ...
Programski jeziki in računalnik -Višji programski jeziki Višji programski jeziki so se razvili z združitvijo več ukazov zbirnega jezika. Neodvisni od procesorja - PRENOSLJIVOST Prevajalnik! PRIMERI: C, Java, JavaScript, Basic, Python, pascal, COBOL, Perl, PHP…
Programski jeziki in računalnik Jeziki četrte generacije Jeziki četrte generacije so namenjeni reševanju posebnih problemov Za reševanje problemov na določenem področju Značilnosti: usmerjeni so k rezultatu, hitri namenjeni so natančno določenim nalogam zmogljiva strojna oprema tolmači Npr.: za generiranje raznih poročil (poslovnih) - delo z bazami podatkov Focus, SQL, ...
Jeziki pete generacije – jeziki UI Podobni naravnim (angleščina) Strogo specializirani (sestavni deli programov za delo z bazami podatkov) Dovoljujejo slovnične napake (zahtevajo dodatna pojasnila) PRIMER: Cash Managment System
Programski jeziki in računalnik Časovni trak uporabe generacij jezikov
Prevajanje programskih jezikov S prevajalnim programom računalnik prevede program , zapisan v programskem jeziku, v strojni jezik. Zahtevnost prevajalnikov Npr.: ukaz zbirnega jezika LA C1 prevajalnik namesto oznake LA napiše ustrezno dvojiško zaporedje, npr 1001 namesto imena spremenljivke C1 pa naslov, npr. 0011 Problem sintaktičnih napak Načini prevajanja: Prevajanje - prevajalnik (compiler) Tolmačenje - tolmač (interpreter) Kaj pa semantične?
Prevajanje programskih jezikov Program v višjem programskem jeziku Pomenskih ali semantičnih napak prevajalnik ne zna odkriti. prevajanje Ali so v programu napake Podatki o napakah da ne Program v strojnem jeziku Podatki Izvajanje programa Od programa v višjem jeziku do rezultata rezultat
Prevajalniki in tolmači Prevajalnik celoten program naenkrat prevede v strojni jezik. Tolmač ali interpreter kaže sproti, tolmači v ukaze strojnega jezika. Razlika med prevajalnikom in tolmačem je predvsem v hitrosti izvajanja programa Tolmač stavke v notranjosti zanke vedno znova prevaja, prevajalnik pa to stori le enkrat Pri jezikih, ki se tolmačijo, pa laže odkrivamo napake v programu
Izrazi Jeziki četrte generacije – Nepostopkovno programiranje – Prevajalni program – Prevajanje – Semantična napaka – Sintaktična napaka – Strojni jezik – Strukturirano programiranje – Tolmačenje – Višji programski jezik – Zbirni jezik –
Izbira programskega jezika Cilji: znajo opredeliti pojme strukturirano programiranje, objektno programiranje in uporabniški vmesnik; poznajo nekaj programskih jezikov (Cobol, C++, Pascal, Visual Basic, Java, JavaScript, Pyton…) in znajo opredeliti, kaj vpliva na njihov izbor; Marjana Pograjc Debevec
Izbira programskega jezika Programski jezik izberemo glede na problem, ki ga rešujemo. jezik mathematica je primeren za reševanje problemov, ki zahtevajo uporabo mat. postopkov jezik SQL uporabljamo pri delu z bazami podatkov jezik Java je primeren za programe, ki se uporabljajo na različnih računalnikih v omrežju
Pisanje programa Pisanje programa se lotimo, ko imamo: opredeljen problem, izdelan algoritem in izbran programski jezik Algoritmi so hitro tako obsežni, da izgubimo pregled nad tem, kaj se v njih dogaja.
Postopki pri programiranju Strukturirano programiranje: razčlenjevanje algoritma (jasna notranja struktura) Objektno (predmetno) programiranje: objekti, lastnosti, metode; razredi objektov, hierarhija, dedovanje Dogodkovno programiranje
Strukturirano programiranje Pri strukturiranem programiranju razgrajujemo problem, dokler ne pridemo do preprostih problemov. Strukturirano urejanje pričeske Pri urejanju pričeske frizerka lasišče najprej razdeli v pramene, nato se osredotoči na en sam pramen las, drugi pa jo ne zanimajo
Naloge Y: = Izračun Y v strukturnem jeziku! 0, če je n<0 1 *2 * 3 * n, če je n > 0 y=n! START ne da N = 0 da ne N < 1 Y ← 1 Y ← 0 Y ← n! Izpis y end
Naloge Y: = n! Y: = 1*2*3*4….z Izpis y end START Y ← 1 I ← 1 Y ← Y * i i ← i + 1 ne da Izpis y end N < i
Naloge Y: = Izračun Y v strukturnem jeziku! 1 za x=1 1+x+x2 +… za X > 1 1+1/x+1/x2 +… za X > 1 START ne ne X = 1 X >1 Y: = 1 + 1/x + 1/ x2 Y: = 1 + x + x2 Y: = 1 Izpis y end
Naloge Y: = 1 + 1/x + 1/ x2…. 1/ xK za X > 1 Y: = 1+x+x2 +… za X > 1 Naloge START NE X > 1 DA X ← 1/X Y ← 0 Z ← 1 DA NE Y ← Y + Z Z < = V Izpis y end Z ← X * Z
Objektno programiranje Pri objektnem programiranju sestavlja program množica objektov Objekti so zgrajeni iz podatkov in metod
Objektno programiranje Osnovni element objektnega programiranja je razred. Razred je skupek pravil, ki opredeljujejo, katere spremenljivke in metode vsebujejo objekti tega razreda Razred predmetov ima določene lastnosti skupine, v nekaterih pa se razlikujejo V razredu so predmeti organizirani hierarhično Objekti dedujejo podatke in metode od svojih predhodnikov
Objektno programiranje Zgled razreda objektov sadja
Objekti in razredi Atributi primerkov Ime razreda Kupec atributi name = “Janez” address = “Trzaska 25” budget = 2000 Atributi primerkov Ime razreda Kupec placeOrder( ): void Name: String address: String budget: int atributi janez primerki name = “Metka” address = “Slovenska 55” budget = 1000 metode placeOrder( ): void razred placeOrder( ): void metka referenca
Dogodkovno programiranje Programer med programiranjem ne predvidi, kako bo program tekel od začetka do konca, ampak o njegovem poteku neposredno odloča uporabnik programa Pri dogodkovnem programiranju se določen program sproži, ko se izvrši ustrezen dogodek. Program je razdeljen na več manjših delov, od katerih vsak vsebuje navodila, potrebna za izvršitev določenega dogodka
Izrazi Strukturirano programiranje – Objektno programiranje – Dogodkovno programiranje - Strukturirano programiranje – pristop k programiranju, kjer problem postopoma razgrajujemo v enostavnejše probleme Objektno programiranje – pristop k programiranju, kjer uporabljamo objekte Dogodkovno programiranje – pristop k programiranju, kjer program razdelimo na dele, ki se izvršijo, ko se zgodi ustrezen dogodek
Marjana Pograjc Debevec Pyton Cilji: razumejo delovanje programa (npr. izpiše neko številko), ki ga vnesejo v računalnik ob razlagi učitelja; za aritmetične operacije znajo uporabiti operatorje; znajo uporabljati spremenljivko in jo primeru napake popraviti: Znajo zapisati niz in uporabiti knižnjico z moduli Marjana Pograjc Debevec
Programski jezik za uvod v programiranje Programski jeziki: Fortran, Algol, Lisp, Basic, Pascal/( Delphi, Kylix), C, Logo, Elica, Squeak / Smalltalk, Java, Javascript, Scheme, ML, Python. enostavnost koncepti prosta dostopnost
Pyton Python je potomec programskega jezika ABC, ki so ga v drugi polovici osemdesetih let razvili Leo Guerts, Lambert Meertens, Steven Pemberton na CWI v Amsterdamu. Python je razvil Guido van Rossum v začetku devetdesetih. Zakaj Python? CP4E – Computer Programming for Everybody. Na Pythonu temelji Zope – orodje za upravljanje z gradivi in njegove nadgradnje Plone, ZopeWiki, . . . Različica 2.3.4 na http://www.python.org/ http://www.activestate.com/Python.plex
Jezik Python (imenovan po Monty Python)
Namestitev programa Na spletni strani http://www.python.org/ najdemo povezavo na Python, ga naložimo in namestimo. Opomba: Namestimo ga v standardni direktorij, kot predvideva namestitev Opomba: Namesto tega lahko namestimo ActivePython
Razvojno okolje IDLE Lupina za interaktivno delo. Urejevalnik teksta za tvorbo datotek Python. Nudi barvanje kode in avtomatske zamike. Menujski ukazi za spreminjanje nastavitev sistema in za izvajanje datotek.
Interaktivna “lupina” Lahkotno učenje jezika Lahkotno preskušanje knjižnic Lahkotno preskušanje lastnih modulov Stavke tipkamo kot odgovor na “prompt”: >>> print “Pozdrav vsem" Pozdrav vsem >>> x = 12**2 >>> x/2 72 >>> # to je komentar
Standardna knjižnica Python GUI – grafični uporabniški vmesniki Nizi Regularni izrazi Povezljivost s podatkovnimi bazami HTTP, CGI, HTML, XML Numeriče obdelave Razhroščevalnik objekti There are modules in the standard library to support all of these functions.
ActivePython
Vpython – Visual Python VPython združuje Python, Numerical Python, Tcl/Tk in grafični paket, ki temelji na OpenGL. Je enostaven sistem za programiranje 3D grafike v realnem času.
Interaktivne animacije Visual Python (http://www.vpython.org) Python je prost, interaktiven, objektno usmerjen jezik (spominja na Javo). Ima preprosto in konsistentno sintakso. Visual python (vpython) je Pythonov modul, ki izvaja 3D simulacije v realnem času. Crystal.py Simulacija kristala
Knjige in druga gradiva? I got tired of cutting and pasting in pictures. This selection is possibly one-third of the Python books on the market in May of 2003. One way to judge the acceptance of a language is by how many O'Reilly books cover it! Note that there are several O'Reilly books on this page, including "Python in a Nutshell" (a VERY good book), and there are others not shown – "Learning Python" by Lutz, the "Python Cookbook", etc.
Kratek učbenik Interaktivna “lupina" Osnovni tipi: števila, nizi Vsebovalniki: seznami, slovarji, tuples Spremenljivke Krmilne strukture Funkcije in procedure Razredi in primerki (instance) Moduli in paketi Izjeme Datoteke in standardna knjižnica
Interaktivna “lupina” Lahkotno učenje jezika Lahkotno preskušanje knjižnic Lahkotno preskušanje lastnih modulov Stavke tipkamo kot odgovor na “prompt”: >>> print “Pozdrav vsem" Pozdrav vsem >>> x = 12**2 >>> x/2 72 >>> # to je komentar
Števila Običajne stvari Pomikanje in maskiranje v stilu C 12, 3.14, 0xFF, 0377, (-1+2)*3/4**5, abs(x), 0<x<=5 Pomikanje in maskiranje v stilu C 1<<16, x&0xff, x|1, ~x, x^y Celoštevilčno deljenje 1/2 -> 0 # 1./2. -> 0.5, float(1)/2 -> 0.5 Dolga cela števila, kompleksna števila 2L**100 -> 1267650600228229401496703205376L 1j**2 -> (-1+0j)
Nizi "hello"+"world" "helloworld" # konkatenacija "hello"*3 "hellohellohello" # ponavljanje "hello"[0] "h" # indeksiranje "hello"[-1] "o" # (od konca) "hello"[1:4] "ell" # del len("hello") 5 # velikost "hello" < "jello" 1 # primerjanje "e" in "hello" 1 # iskanje "escapes: \n etc, \033 etc, \if etc" 'single quotes' """triple quotes""" r"raw strings"
Seznami Fleksibilna polja, Isti operatorji kot za nize a = [99, "bottles of beer", ["on", "the", "wall"]] Isti operatorji kot za nize a+b, a*3, a[0], a[-1], a[1:], len(a) Prirejanje enot in delov enot a[0] = 98 a[1:2] = ["bottles", "of", "beer"] -> [98, "bottles", "of", "beer", ["on", "the", "wall"]] del a[-1] # -> [98, "bottles", "of", "beer"]
Še več operacij s seznami >>> a = range(5) # [0,1,2,3,4] >>> a.append(5) # [0,1,2,3,4,5] >>> a.pop() # [0,1,2,3,4] 5 >>> a.insert(0, 42) # [42,0,1,2,3,4] >>> a.pop(0) # [0,1,2,3,4] 5.5 >>> a.reverse() # [4,3,2,1,0] >>> a.sort() # [0,1,2,3,4]
Slovarji Hash tabele, "asociativna polja" Lookup: d = {"duck": "eend", "water": "water"} Lookup: d["duck"] -> "eend" d["back"] # sprozi KeyError exception Delete, insert, overwrite: del d["water"] # {"duck": "eend", "back": "rug"} d["back"] = "rug" # {"duck": "eend", "back": "rug"} d["duck"] = "duik" # {"duck": "duik", "back": "rug"}
Še več operacij s slovarji Ključi, vrednosti, elementi: d.keys() -> ["duck", "back"] d.values() -> ["duik", "rug"] d.items() -> [("duck","duik"), ("back","rug")] Preverjanje prisotnosti: d.has_key("duck") -> 1; d.has_key("spam") -> 0 Values of any type; keys almost any {"name":"Guido", "age":43, ("hello","world"):1, 42:"yes", "flag": ["red","white","blue"]}
Podrobnosti o seznamih Ključev ne smemo spreminjati: števila, nizi, tuples konstant Po tvorbi jih ne smemo več spreminjati Razlog je hashing (tehnika hitrega iskanja) ne seznami ali drugi slovarji Te tipe objektov lahko spreminjamo “na mestu" Ni omejitev pri vrednostih Ključe lahko navajamo v poljubnem zaporedju Spet zaradi hashing
Tuples ključ = (priimek, ime) tocka = x, y, z # lahko tudi z oklepaji x, y, z = tocka # razpakiranje lastname = key[0] singleton = (1,) # vejica na koncu!!! empty = () # oklepaji! V primerjavi tuples s seznami tuples niso spremenljivi
Spremenljivke Ni potrebna deklaracija Potreba po prirejanju (inicializacija) Uporaba neinicializiranih spremenljivk povzroči izjemo Ni tipov if prijateljsko: pozdrav = “Dober dan" else: pozdrav = 12**2 print pozdrav Vse so “spremenljivke": Tudi funkcije, razredi, moduli
Pomen referenc Prirejanje dela z referencami x = y #ne naredi kopije y x = y # x naslavlja objekt, ki ga naslavlja y Zelo uporabno; toda previdnost! Primer: >>> a = [1, 2, 3] >>> b = a >>> a.append(4) >>> print b [1, 2, 3, 4]
Spreminjanje souporabljenega seznama 1 2 3 a = [1, 2, 3] a 1 2 3 b b = a a 1 2 3 a.append(4) 4 b
Spreminjanje celoštevilčnega podatka 1 a = 1 a 1 b = a b new int object created by add operator (1+1) 2 a a = a+1 old reference deleted by assignment (a=...) 1 b
Krmilne strukture if pogoj: stavki [elif pogoj: stavki] ... else: while pogoj: stavki for var in zaporedje: break continue
Zamik skupin V jeziku Python: for i in range(20): if i%3 == 0: print i print “Zadetek!" print "---" V jeziku C: for (i = 0; i < 20; i++) { if (i%3 == 0) { printf("%d\n", i); if (i%5 == 0) { printf(“Zadetek!\n"); } } printf("---\n"); Zadetek! --- 3 6 9 12 15 18
Funkcije, Procedure def ime(arg1, arg2, ...): """dokumentacija""" # opcijski opis stavki return # iz procedure return izraz # iz funkcije
Primer funkcije def gcd(a, b): "greatest common divisor" while a != 0: a, b = b%a, a # paralelno prirejanje return b >>> gcd.__doc__ 'greatest common divisor' >>> gcd(12, 20) 4
Razredi class ime: "dokumentacija" stavki -ali- class ime(osnova1, osnova2, ...): ... Stavki so večinoma definicije metod: def ime(self, arg1, arg2, ...): Lahko pa so tudi prireditve rezrednih spremenljivk
Primer razreda class Sklad: “zelo znana podatkovna struktura…" def __init__(self): # konstructor self.items = [] def push(self, x): self.items.append(x) # ni omejitve def pop(self): x = self.items[-1] # kaj se zgodi, ce je prazen? del self.items[-1] return x def empty(self): return len(self.items) == 0 # Boolov rezultat
Uporaba razredov Primerek tvorimo preprosto s klicem konstruktorja: x = Sklad() # Ni operatorja 'new'! Klicanje metod primerka z uporabo notacije s piko: x.empty() # -> 1 x.push(1) # [1] x.empty() # -> 0 x.push("hello") # [1, "hello"] x.pop() # -> "hello" # [1] Uporaba spremenljivk primerka s pomočjo notacije s piko: x.items # -> [1]
Dedovanje class PosebenSklad (Sklad): “sklad z dodano možnostjo vpoglrda v spodnje elemente" def peek(self, n): "peek(0) vrne zgornji element; peek(-1) vrne element pod njim itd." velikost = len(self.items) assert 0 <= n < velikost # test predpogoj return self.items[velikost1-n]
Dedovanje (2) class OmejenSklad(PosebenSklad): “PosebenSklad z omejitvijo velikosti sklada" def __init__(self, limit): self.limit = limit PosebenSklad.__init__(self) # Konstruktor dedovanega razreda def push(self, x): assert len(self.items) < self.limit PosebenSklad.push(self, x) # klic metode dedovanega razreda
Spremenljivke primerkov in razredov class Connection: verbose = 0 # spremenljivka razreda def __init__(self, host): self.host = host # spremenljivka primerka def debug(self, v): self.verbose = v # tvorba spremenljivke primerka! def connect(self): if self.verbose: # spremenljivka razreda ali primerka? print "connecting to", self.host
Pravila za spremenljivke primerka Pri uporabi primerka (self.x) je vrstni red iskanja: (1) primerek, (2) razred, (3) dedovani razredi Tako je tudi pri iskanju metod Pri prirejanju preko primerka (self.x = ...): Vedno tvorimo spremenljivko primerka Razredne spremenljivke lahko uporabljamo v primerkih Toda...! Razredna spremenljivka: ena kopija, ki jo uporabljajo vsi Spremenljivka primerka: vsak primerek ima svojo
Moduli Zbirka stvari v datoteki blabla.py file Uvoz modulov: funkcije, razredi, spremenljivke Uvoz modulov: import re; print re.match("[a-z]+", s) from re import match; print match("[a-z]+", s) Uvoz s preimenovanjem: import re as regex from re import match as m
Paketi Zbirka modulov v direktoriju Imeti moramo datoteko __init__.py Lahko imamo podpakete Sintaksa za uvoz: from P.Q.M import foo; print foo() from P.Q import M; print M.foo() import P.Q.M; print P.Q.M.foo() import P.Q.M as M; print M.foo() # new
Lovljenje izjem def deljenje(x): return 1/x def bar(x): try: print deljenje(x) except ZeroDivisionError, message: print “Ne morem deliti z 0:", message bar(0)
Try-finally: Čiščenje f = open(file) try: process_file(f) finally: f.close() # se vedno izvede print "OK" # se izvede le ob uspehu
Proženje izjem raise IndexError raise IndexError("k out of range") try: nekaj naredi except: # lovimo karkoli print "Oops" raise # reraise
Objekti File f = open(filename[, mode[, buffersize]) metode: mode je lahko "r", "w", "a" (kot pri C); privzeto "r" append "b" za text translation mode append "+" za read/write open buffersize: 0=unbuffered; 1=line-buffered; buffered metode: read([nbytes]), readline(), readlines() write(string), writelines(list) seek(pos[, how]), tell() flush(), close() fileno()
Standardna knjižnica Jedro: Regularni izrazi: Internet: Razno: os, sys, string, getopt, StringIO, struct, pickle, ... Regularni izrazi: re module; pravila ujemanja v stilu Perl-5 Internet: socket, rfc822, httplib, htmllib, ftplib, smtplib, ... Razno: pdb (debugger), profile+pstats Tkinter (Tcl/Tk vmesnik), audio, *dbm, ...
Izrazi Strukturirano programiranje – Objektno programiranje – Dogodkovno programiranje - Strukturirano programiranje – pristop k programiranju, kjer problem postopoma razgrajujemo v enostavnejše probleme Objektno programiranje – pristop k programiranju, kjer uporabljamo objekte Dogodkovno programiranje – pristop k programiranju, kjer program razdelimo na dele, ki se izvršijo, ko se zgodi ustrezen dogodek