programiranje

Document Sample
programiranje Powered By Docstoc
					         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.
                  Uvod
 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
Pot od problema do računalniškega
             programa
             PROBLEM



            ALGORITEM



     ZAPIS V PROGRAMSKEM JEZIKU



             PROGRAM
                     Problem

• Opredelitev problema zaradi lažjega razvoja
   programa
  •   jasna opredelitev, kaj že vemo, katere podatke
      poznamo (vhodni podatki), kaj naj bo rezultat
   Algoritem, programiranje in
Cilji:
            program
 poznavanje sestave programa
razumevanje pomena dokumentiranja
  programa;
 poznavanje algoritma in programiranja;
 naštevanje glavnih korakov za
  izdelavo 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
 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
              Zapis algoritma
Cilji:
 poznavanje algoritma izdelanega v
  različnih oblikah (besedni, diagram poteka, ..)
 poznavanje značilnosti algoritma;
 razumevanje postopka izdelave algoritma;
 izdelava algoritma.
            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   Čokolado razlomimo na koščke
                             in omehčamo nad soparo
 algoritma za začetnika
                           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
1. Konstanta       1. Vrednost, ki se med
                      izvajanjem programa
                      ne spreminja

2. Spremenljivka   2. Ime za prostor v
                      pomnilniku, ki je
                      rezerviran za
                      podatke (vsebina),
                      ki je določena s
                      podatkovnim
                      tipom.
        Prireditev vrednosti
 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
         Prireditev vrednosti
 V diagramu poteka priredimo
 spremenljivki vrednost s prireditvenim
 operatorjem

                                matematični
 spremenljivka   prireditveni      izraz
                  operator
     N                              1
        Prireditev vrednosti
 Spremenljivka n na obeh straneh izraza
                 prireditveni   matematični
 spremenljivka
                  operator         izraz
    n                             n+1

spremenljivki n naj se vrednoti poveča za 1
      Prireditev vrednosti
 V diagramu poteka uporabimo za
 prireditev pravokotnik

          START


          A       5

           STOP       Diagram poteka s
                          prireditvijo
                          vrednosti
                        spremenljivki
           Branje ali izpis
 Za prikaz branja in izpisovanja uporabimo
 v diagramih poteka paralelogram
       START

       Beri A

   A            A+5
                       Diagram potek z
       Izpiši A       branjem, z izpisom
                        in s prireditvijo
       STOP
        Simboli diagrama poteka
                PRIMER                      PRIMER
START
                               PRIREDITEV   a     a+1
        POTEK
STOP

                                VEJITEV         a+b<c

 BRANJE
PODATKOV        Beri a,b,c




  IZPIS
                izpiši a,b,c
PODATKOV
    Naloga                     Narišite diagram
                                poteka za izpis
   Narišite diagram            absolutne vrednosti
    poteka, ki prebere in       števila (ST), ki ga
    izpiše poljubno celo        vpišete preko
    število (x)                 tipkovnice..
    Naloga                      Narišite diagram
                                 poteka, ki prebere
   Narišite diagram             poljubno celo število
    poteka, ki izpiše            (X) in ga izpiše
    srednjo vrednost             trikrat.
    (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.
              Izrazi

 Diagram poteka
 Programiranje
 Spremenljivka
         Zapis algoritma

Cilji:
 izdelava algoritma z vejitvijo;
 izdelava algoritma z zanko
Izdelava algoritma s tabelarično
 spremenljivko
                  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                    START

 Izvajanje zanke          Beri A, B
 nadziramo z določenim
 pogojem                   C           1

                           Izpiši A * C

                           C        C+1
                          ne
                               C>B
                                  da
 Diagram poteka z zanko        STOP
      Tabelarična spremenljivka
                             Indeks   Število
 Tabelarične                  1        15
 spremenljivke imajo
                               2        17
 skupno ime, med
 seboj pa jih ločujemo         3        16
 z indeksom                    4        20
                               5        21

                         Vrednost spremenljivke
                               A3 je 16…
         Tabelarična spremenljivka
                                                    C   TC    M
 V algoritmu izvedemo postopek nad enim
  elementom, nato pa le spreminjamo indeks          1   10    10
                                                    2    5    10
  C        1                                        3   15    15
                                                    4   25    25
  M       T(C)
                                      ne            5   17    25
                 da                          da     Na koncu je
      C <= N          C   C+1    M < T(C)         največje število
                                                    shranjeno v
          ne
                                                  spremenljivki M.

  Diagram poteka za iskanje največjega števila med N
          števili tabelarične spremenljivke T
                             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
    START
             algoritem?
                   korak   x
   x 1


      x
   x
      2


              ne
   x>1

         da

   STOP
START      Kakšna vrednost se izpiše?
x 1
                      korak   x
   x
x
   2


           ne
x < 0,3

      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.
           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.
                    Jeziki
1. Naravni jeziki
   Problem: razumljivost (kaj jo omogoča?)
         sintaksa in semantika
2. Umetni jeziki
   esperanto, jezik kemijskih formul, jezik
   aritmetičnih izrazov, pascal
      Razvoj programskih jezikov
1.   strojni jezik (1950)
2.   zbirni jezik (assembler) (1955)
3.   višji programski jeziki (1960)
4.   jeziki 4. generacije ( po1980)
5.   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)
Prevajanje programskih jezikov
                 Program v višjem

 Pomenskih
                programskem jeziku

 ali               prevajanje
 semantičnih
 napak              Ali so v         da   Podatki o napakah
 prevajalnik       programu
                    napake
 ne zna                      ne

 odkriti.           Program v
                  strojnem jeziku



     Podatki   Izvajanje programa

                                          Od programa v
                    rezultat              višjem jeziku do
                                              rezultata
       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 –
   Postopkovno 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;
   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
 Izračun Y v strukturnem jeziku!
                    0, če je n<0

   Y: =           1 če je n = 0

                  1 *2 * 3 * n, če je n > 0             y=n!

          START


  da                      ne
          N=0
                             ne                          da
Y←1                                       N<1
                                                               Y←0
                         Y ← n!

                                              Izpis y

                                              end
              Naloge
 Y: = n!      Y: = 1*2*3*4….z

      START


      Y←1


       I←1


       Y←Y*i


           i←i+1
ne                 da
            N<i           Izpis y   end
                                 Naloge
 Izračun Y v strukturnem jeziku!
                    1 za x=1

   Y: =            1+x+x2 +… za X > 1

                   1+1/x+1/x2 +… za X > 1


          START


                         ne                              ne
          X=1                           X >1




          Y: = 1                  Y: = 1 + 1/x + 1/ x2        Y: = 1 + x + x2



                                        Izpis y

                                            end
Y: = 1 + 1/x + 1/ x2…. 1/ xK   za   X>1         Naloge
Y: = 1+x+x2 +… za X > 1

              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
                                     name = “Janez”
                                     address =             Atributi
                                       “Trzaska 25”        primerkov
                                     budget = 2000
Ime razreda       Kupec
                                    placeOrder( ): void
                 Name: String
   atributi     address: String            janez           primerki
                  budget: int
                                    name = “Metka”
    metode    placeOrder( ): void   address =
                                      “Slovenska 55”
                                    budget = 1000
     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 -
                    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
    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
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?
           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
Običajne stvari
                        Števila
    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)
   "hello"+"world"
                             Nizi
                      "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,
   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"
  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

  a = [1, 2, 3]   a   1   2   3


                  a
  b=a                 1   2   3
                  b

                  a
  a.append(4)         1   2   3   4
                  b
Spreminjanje celoštevilčnega podatka

   a=1        a     1


              a
   b=a              1
              b         new int object created
                        by add operator (1+1)


              a     2
   a = a+1              old reference deleted
                        by assignment (a=...)
              b     1
             Krmilne strukture
if pogoj:             while pogoj:
    stavki              stavki
[elif pogoj:
    stavki] ...       for var in zaporedje:
else:                    stavki
    stavki
                      break
                      continue
                    Zamik skupin
                                                                   0
V jeziku Python:              V jeziku C:                          Zadetek!
                                                                   ---
                                                                   ---
                                                                   ---
                                                                   3

for i in range(20):           for (i = 0; i < 20; i++)             ---
                                                                   ---
                                                                   ---

   if i%3 == 0:               {                                    6
                                                                   ---
                                                                   ---
                                 if (i%3 == 0) {                   ---
       print i                                                     9
                                     printf("%d\n", i);            ---
                                                                   ---
       if i%5 == 0:                                                ---
                                     if (i%5 == 0) {               12

           print “Zadetek!"              printf(“Zadetek!\n"); }
                                                                   ---
                                                                   ---
                                                                   ---
   print "---"                     }
                                                                   15
                                                                   Zadetek!
                                                                   ---
                                                                   ---
                                   printf("---\n");                ---
                                                                   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
                           razredov
           Uporaba s klicem konstruktorja:
Primerek tvorimo preprosto
    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
class Connection:
                  razredov
 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
 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")
 raise IndexError, "k out of range"
 try:
   nekaj naredi
 except: # lovimo karkoli
   print "Oops"
   raise # reraise
                      Objekti File
f = open(filename[, mode[, buffersize])
 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:
 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 -

				
DOCUMENT INFO
Shared By:
Categories:
Stats:
views:287
posted:4/15/2010
language:Slovenian
pages:120