Download presentation
Presentation is loading. Please wait.
1
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
2
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
3
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
4
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.
5
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
6
Pot od problema do računalniškega programa
ALGORITEM ZAPIS V PROGRAMSKEM JEZIKU PROGRAM
7
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.
8
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.
9
Algoritem Kako podrobno je algoritem razdeljen, je odvisno od tega, komu je namenjen Zapis algoritma v izbranem programskem jeziku = (računalniški) program.
10
Izrazi Algoritem Program Programski jezik
11
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
12
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.
13
Zaporedje preprostih opravil, ki nas v končnem številu korakov pripelje do rezultata
14
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
15
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).
16
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
17
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
18
prireditveni operator
Prireditev vrednosti V diagramu poteka priredimo spremenljivki vrednost s prireditvenim operatorjem matematični izraz prireditveni operator spremenljivka 1 N
19
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
20
Diagram poteka s prireditvijo vrednosti spremenljivki
Prireditev vrednosti V diagramu poteka uporabimo za prireditev pravokotnik START A STOP Diagram poteka s prireditvijo vrednosti spremenljivki
21
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
22
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
23
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)
24
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)
25
Naloga Narišite diagram poteka, ki prebere dve celi števili (x y), zamenja njuni vrednosti (POMOZNA) med seboj in ju izpiše. V
26
Izrazi Diagram poteka Programiranje Spremenljivka
27
Marjana Pograjc Debevec
Zapis algoritma Cilji: izdelava algoritma z vejitvijo; izdelava algoritma z zanko Izdelava algoritma s tabelarično spremenljivko Marjana Pograjc Debevec
28
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
29
Zanka Za zaporedje enakih ukazov uporabimo v diagramih poteka zanko
START C Zanka
30
Zanka Izvajanje zanke nadziramo z določenim pogojem START Izpiši A * C
Beri A, B C Izpiši A * C C C + 1 ne C > B da Diagram poteka z zanko STOP
31
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…
32
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 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
33
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
34
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
35
Naloge Narišite diagram poteka z zanko, ki prebere poljubno celo število (x) in ga izpiše trikrat. ALI
36
Naloge Narišite diagram poteka, ki prebere dve števili (X, Y). Prvo število izpiše tolikokrat, kot je vrednost drugega števila. ALI
37
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.
38
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.
39
Ali dani diagram poteka predstavlja algoritem?
START korak x x 1 x x > 1 ne da STOP
40
Kakšna vrednost se izpiše?
START x 1 korak x x x < 0,3 ne da Izpiši x STOP
41
Naloga Imamo geometrijsko zaporedje 1,3,9,27, … Razvijmo algoritem,
a) ki izpiše tisti člen, ki prvi preseže vrednost b) izpiše kateri po vrsti je ta člen.
42
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
43
Jeziki Naravni jeziki Problem: razumljivost (kaj jo omogoča?)
sintaksa in semantika Umetni jeziki esperanto, jezik kemijskih formul, jezik aritmetičnih izrazov, pascal
44
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)
45
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
46
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
47
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.
48
Programski jeziki in računalnik Strojni jezik
dve vrednosti napetosti = 0, 1 vsi ukazi = zaporedje 0 in 1 primer programa: ...
49
Seštevanje dveh števil (procesor Pentium)
50
Seštevanje dveh števil (procesor Pentium) Prvi ukaz: mov eax,[$0043F808]
51
Seštevanje dveh števil (procesor Pentium) Drugi ukaz: add eax,[$0043F810]
52
Seštevanje dveh števil (procesor Pentium) Tretji ukaz: mov [$0043F80C],eax
53
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
54
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 ...
55
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…
56
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, ...
57
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
58
Programski jeziki in računalnik
Časovni trak uporabe generacij jezikov
59
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?
60
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
61
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
62
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 –
63
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
64
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
65
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.
66
Postopki pri programiranju
Strukturirano programiranje: razčlenjevanje algoritma (jasna notranja struktura) Objektno (predmetno) programiranje: objekti, lastnosti, metode; razredi objektov, hierarhija, dedovanje Dogodkovno programiranje
67
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
68
Naloge Y: = Izračun Y v strukturnem jeziku! 0, če je n<0
1 *2 * 3 * n, če je n > y=n! START ne da N = 0 da ne N < 1 Y ← 1 Y ← 0 Y ← n! Izpis y end
69
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
70
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
71
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
72
Objektno programiranje
Pri objektnem programiranju sestavlja program množica objektov Objekti so zgrajeni iz podatkov in metod
73
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
74
Objektno programiranje
Zgled razreda objektov sadja
75
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
76
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
77
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
78
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
79
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
80
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 na
81
Jezik Python (imenovan po Monty Python)
82
Namestitev programa Na spletni strani najdemo povezavo na Python, ga naložimo in namestimo. Opomba: Namestimo ga v standardni direktorij, kot predvideva namestitev Opomba: Namesto tega lahko namestimo ActivePython
83
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.
84
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
85
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.
86
ActivePython
87
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.
88
Interaktivne animacije
Visual Python ( 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
89
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.
90
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
91
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
92
Š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 -> L 1j**2 -> (-1+0j)
93
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"
94
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"]
95
Š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]
96
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"}
97
Š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"]}
98
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
99
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
100
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
101
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]
102
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
103
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
104
Krmilne strukture if pogoj: stavki [elif pogoj: stavki] ... else:
while pogoj: stavki for var in zaporedje: break continue
105
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
106
Funkcije, Procedure def ime(arg1, arg2, ...):
"""dokumentacija""" # opcijski opis stavki return # iz procedure return izraz # iz funkcije
107
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
108
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
109
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
110
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]
111
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]
112
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
113
Spremenljivke primerkov in razredov
class Connection: verbose = # 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
114
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
115
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
116
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
117
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)
118
Try-finally: Čiščenje
f = open(file) try: process_file(f) finally: f.close() # se vedno izvede print "OK" # se izvede le ob uspehu
119
Proženje izjem raise IndexError raise IndexError("k out of range")
try: nekaj naredi except: # lovimo karkoli print "Oops" raise # reraise
120
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()
121
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, ...
122
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
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.