Introduktion til programmering

  • Published on
    24-Feb-2016

  • View
    43

  • Download
    0

Embed Size (px)

DESCRIPTION

Introduktion til programmering. Uge 39 Python I Learning Python, kap 4-7. Plan. Hvad er et Python program Udtryk Vrdier og Datatyper velse Lister og dictionarys Stand-up programmering Filer velse . Fortolkning/compilering. - PowerPoint PPT Presentation

Transcript

Slide 1

Introduktion til programmeringUge 39 Python ILearning Python, kap 4-7.PlanHvad er et Python programUdtrykVrdier og DatatypervelseLister og dictionarysStand-up programmeringFilervelse Fortolkning/compileringPython er et fortolket sprog, der kan afvikles interaktivt i IDLE eller ud fra en fil med programkodenMuliggr en hurtig mde at skrive programmer p, frst interaktivt s som script

Installering af Pythonhttp://www.python.org/Idlexx

Pythons promptJeres egne kommandoerIdle

Denne menu bruger I til at lave en file der indeholder et python-programHusk at tilfje .py nr I gemmer filenHvad er et Python program?En sekvens af reprsentationerUdtryk som reprsenterer en vrdiDe fleste vrdier i Python er objekterStninger (statements) som udvirker databehandling.Sekvensen udfres i rkkeflgeRkkeflgen styres af kontrolstrukturerGentagelse, selektionSekvenser kan grupperes (klasser og funktioner: indkapsling) (sge-algoritme)Muslinge programmetwhile spand []:enmusling = spand[0]del spand[0] if enmusling == 0:gryde.append(enmusling ) else: affaldspose.append(enmusling )

GentagelseRkkeflgeSelektionSpand, gryde og affaldspose reprsenterer lister af nuller og etterProgrammerUdfres fra start til slut (hele sekvensen)Kan vre i en ventetilstandTypisk for interaktive programmer. De bruger mest af tiden til at vente p brugerinputcpr = raw_input(Type a word:) #venter til der tastes input indBestr af udtryk(data) og stninger(kode)spand = [1,0,0,1,0,1,0,0]gryde = []affaldspose = []while spand []:

DataKodeVrdierDet grundlggende element i Python er vrdier der tilhrer bestemte typerVrdier er nsten altid objekterEksempler p typer:Et tal eller en tekst (string)Nogle typer er indbyggede, andre er defineret af programmrenTal og tekst er to grundlggende indbyggede typerVi refererer til vrdier ved hjlp af navne (variable)Reprsentamen: navnObjekt: vrdi/objektInterpretant: Python fortolkerenVrdier og typer>>> navn = 'peter>>> telefon = 86379790>>> navn'peter>>> telefon86379790>>> type(navn)

>>> type(telefon)

Type: tekst (string), markeret ved apostrofferneType: heltalVi kan checke hvilken type vrdien er ved hjlp af typeTildeling (assignment)Variable opstr ved at der bliver tildelt en vrdi til dem = er tildelingsoperatorenVariable skal tildeles en vrdi fr de kan benyttes>>> navn = Peter>>> print navn (OK, navnet er oprettet)>>> print nytnavn (FEJL, nytnavn ikke tildelt en vrdi)Traceback (most recent call last): File "", line 1, in ?NameError: name 'nytnavn' is not definedVariabelnavneFrst: bogstav eller understregning (_)Dernst: et vilkrligt antal bogstaver, understregninger, eller tal. Rigtigt: __builtin__, navn, _navn_, navn1Galt: 1peter = 'x' ^SyntaxError: invalid syntaxReserverede ord kan ikke benyttes:While, if, elif, print,Der er 29 i alt (se bogen side 137)Java konvention bilFabrik (variabel), BilFabrik (klasse)Tildeling igenDa variable er indirekte referencer kan to variable referere til den samme objektNavnet refererer frst til en lokation i lageretLagerlokationen refererer til objektet>>> statsminister = 'fogh>>> venstreformand = statsministerRepresentamen: StatsministerObjekt: 20826464RepresentamenObjekt: FoghRepresentamen: VenstreformandReferencerHvis vi ndrer den frste variable har det ingen indflydelse p den anden som det vil have i C, vi opretter i stedet et nyt objekt og en ny reference>>> statsminister = schlter

Representamen: StatsministerObjekt: 20826465RepresentamenRepresentamen: VenstreformandObjekt: FoghObjekt: schlterObjekt: 20826464Representamenkvivalens og identitet>>> venstreformand = 'anders fogh rasmussen>>> statsminister = 'anders fogh rasmussenTo forskellige objekter der har samme bogstaver og derfor er kvivalente>>> venstreformand is statsministerFalseIs checker om de to objekter er identiske>>> venstreformand == statsministerTrue== checker om to objekter er kvivalente, her: indeholder samme bogstaver>>> venstreformand = statsminister>>> venstreformand is statsministerTrueGarbage collectionHvor mange navne refererer til objetket fogh?>>> sys.getrefcount(statsminister)3>>> sys.getrefcount(venstreformand)3Vi kan slette statsministers direkte reference uden at slette den indirekte>>> del(statsminister)>>> statsministerTraceback (most recent call last): File "", line 1, in ?NameError: name 'statsminister' is not defined>>> sys.getrefcount(venstreformand)2>>> venstreformand'foghNr ingen navne refererer til en vrdi slettes den. Garbage collectionDynamiske typerI nogle programmeringssprog skal man angive hvilken type en variabel skal haveString x = Anders Fogh RasmussenDet glder ikke i Python. Her kan en variabel indeholde forskellige vrdier>>> x = Anders Fogh Rasmussen>>> x = 12Men objekterne har stadig en type!Strk typet vs dynamisk typet sprogTyper 1De operationer der kan foretages p et objekt afhnger af hvilken type det erPolymorfi>>> Peter + bjerregaard (stter strengen sammen)Peter bjerregaard>>> 12 + 34 (lgger tallene sammen)46Operatorerne har alts forskellig betydning ud fra den kontekst de er i. Dette kaldes ogs operator overloadingTyper 2 castingDet er muligt at tvinge en type til at vre en anden typeEks. tvinge en tekst (string) til at vre et tal (int)>>> x = 12>>> y = int(x)>>> str(int('2')+int('3'))+' kroner5 kroner>>> '2'+'3'+' kroner'23 kroner'Vi ndrer interpretanten - mden vrdien fortolkes p Typer 3Umulige ndringer giver en fejl>>> x = Morten>>> y = int(x)Det er ikke altid let at skelne mellem mulige og umulige ndringer>>> x = ['a','b','c'] (liste)>>> x['a', 'b', 'c']>>> y = str(x) (liste -> streng)>>> y['a', 'b', 'c']>>> y[0] (nu er det strengen vi tager index 0 p og ikke listen)'[>>> x[0] (her fr vi vrdien fra listen)'a'Typer 4Simple typerTekst (string, str), tal (integer, int )Scalarer vs compoundScalarer = tal, tekst(string): bestr ikke af mindre selvstndige deleCompound = lister, tupler, dictionaries: bestr af mindre selvstndige deleMutable vs immutableMutable = lister, dictionaries: kan ndresImmutable = tal, tekst, tupler: kan ikke ndresStringOpfrer sig lidt som en Compound-typeEr immutabelKan opfattes som en sekvens af bogstaver>>> navn = PETERVi ser fra nu af bort fra den indirekte reference!

Indexering>>> navn = 'PETER>>> len(navn)5>>> navn[0]'P>>> navn[len(navn)-1] (vr opmrksomme p dette)'R>>> navn[-1]'R>>> navn[-2]'E

>>>navn[len(navn)] Traceback (most recent call last): File "", line 1, in a[len(a)]IndexError: string index out of rangendring af strengeMan kan ikke ndre bogstaverne ved strenge:>>> 'peter'[1] = 'a'Traceback (most recent call last): File "", line 1, in -toplevel- 'peter'[1] = 'a'TypeError: object does not support item assignmentDet kan man godt ved lister>>> a = [1,2,3]>>> a[1] = 6>>> a[1, 6, 3]Hvis man vil ndre p en streng m man bygge en ny af den gamle>>> a = 'peter'>>> b = a.replace('e','a',1) erstat kun den frste forekomst>>> a'peter'>>> b'paterEller.>>> a = a.replace(e, a, 1)>>> apater #vi har dog ogs mistet referencen til vores gamle instans af aIntervaller, slicingNavn[fra og med: til men ikke med]>>> navn[0:3]'PET>>> navn[:3]'PET>>> navn[2:4]'TE>>> navn[2:]'TER>>> navn[:]'PETERSlicing>>> navn[:] (laver en kopi)'PETER'>>> navn[::2]'PTR>>> navn[::-1]'RETEP'String funktioner>>> navn = 'PETER>>> tal = '123>>> navn.isalpha()True>>> tal.isalpha()False>>> tal.isdigit()TrueNavn.__getslice__(2, 4) navn[2:4]Dot-notationenAlle vrdier er objekter der tilhrer en klasse (kommer senere!)Et objekt har egenskaber og metoder tilknyttetHelp-funktionen giver en liste over klassens metoder>>>help(str)

NavnisalphaisdigitPETERNavn.split()splitNavn.isdigit()Help>>> help(str)Help on class str in module __builtin__:

class str(basestring) | str(object) -> string (laver objektet om til en streng) | capitalize(...) | S.capitalize() -> string | | Return a copy of the string S with only its first character | capitalized. | isalpha(...) | S.isalpha() -> bool | | Return True if all characters in S are alphabetic | and there is at least one character in S, False otherwise. | | isdigit(...) | S.isdigit() -> bool | | Return True if all characters in S are digits | and there is at least one character in S, False otherwise. |

Stringfunktioner>>> opdeling = 'peter bjerregaard vahlstrup'.split(' ')>>> opdeling['peter', bjerregaard', vahlstrup']y.find(x) returnerer indexet for frste forekomst af x in y.>>> andetord = peter bjerregaard vahlstrup'.find(' ')>>> andetord5>>> fornavn = 'peter bjerregaard vahlstrup'[0:andetord]>>> fornavn'peterefternavn = peter bjerregaard vahlstrup'[andetord:]>>> efternavn' bjerregaard vahlstrup'Vrdisammenligningera < b ; a > b ; a = b ; a == b; a != b ; a bTal: numerisk sammenligningTekst: alfabetisk sortering ( a < b < c < d...)Opgave 1 + 2Ls opgave 1 og 2Opgave 1 omhandler slicing af tekststrenge og concateneringOpgave 2 omhandler indeksering i lister og dictionarys samt concateneringBooleanEfter George BooleAlt hvad kan sammenlignes giver svaret True eller FalseBoolean-typen er ny i python 2.3Fr: 0 og 1>>> a == bFalse>>> a < b... TrueSekvenserContainere, kan indeholde mange vrdierString kan opfattes som en form for sekven