Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Introduktion til programmering

Lignende præsentationer


Præsentationer af emnet: "Introduktion til programmering"— Præsentationens transcript:

1 Introduktion til programmering
Uge 39 Python I Learning Python, kap 4-7.

2 Plan Hvad er et Python program Udtryk Værdier og Datatyper Øvelse
Lister og dictionarys Stand-up programmering Filer

3 Fortolkning/compilering
Python er et fortolket sprog, der kan afvikles interaktivt i IDLE eller ud fra en fil med programkoden Muliggør en hurtig måde at skrive programmer på, først interaktivt så som script

4 Installering af Python

5 Idle xx Jeres egne kommandoer Pythons prompt

6 Idle Denne menu bruger I til at lave en file der indeholder et python-program Husk at tilføje .py når I gemmer filen

7 Hvad er et Python program?
En sekvens af repræsentationer Udtryk som repræsenterer en værdi De fleste værdier i Python er objekter Sætninger (statements) som udvirker databehandling. Sekvensen udføres i rækkefølge Rækkefølgen styres af kontrolstrukturer Gentagelse, selektion Sekvenser kan grupperes (klasser og funktioner: indkapsling) (søge-algoritme)

8 Muslinge programmet while spand <> []: enmusling = spand[0]
del spand[0] if enmusling == 0: gryde.append(enmusling ) else: affaldspose.append(enmusling ) Rækkefølge Gentagelse Selektion Spand, gryde og affaldspose repræsenterer lister af nuller og etter

9 Programmer Udføres fra start til slut (hele sekvensen)
Kan være i en ventetilstand Typisk for interaktive programmer. De bruger mest af tiden til at vente på brugerinput cpr = raw_input(’Type a word:’) #venter til der tastes input ind Består af udtryk(data) og sætninger(kode) spand = [1,0,0,1,0,1,0,0] gryde = [] affaldspose = [] while spand <> []: Data Kode

10 Værdier Det grundlæggende element i Python er værdier der tilhører bestemte typer Værdier er næsten altid objekter Eksempler på typer: Et tal eller en tekst (string) Nogle typer er indbyggede, andre er defineret af programmøren Tal og tekst er to grundlæggende indbyggede typer Vi refererer til værdier ved hjælp af navne (variable) Interpretant: Python fortolkeren Repræsentamen: navn Objekt: værdi/objekt

11 Værdier og typer >>> navn = 'peter’
Type: tekst (string), markeret ved apostrofferne >>> navn = 'peter’ >>> telefon = >>> navn 'peter‘ >>> telefon >>> type(navn) <type 'str'> >>> type(telefon) <type 'int'> Type: heltal Vi kan checke hvilken type værdien er ved hjælp af ”type”

12 Tildeling (assignment)
Variable “opstår” ved at der bliver tildelt en værdi til dem “ = “ er tildelingsoperatoren Variable skal tildeles en værdi før de kan benyttes >>> navn = ‘Peter’ >>> print navn (OK, navnet er oprettet) >>> print nytnavn (FEJL, nytnavn ikke tildelt en værdi) Traceback (most recent call last): File "<interactive input>", line 1, in ? NameError: name 'nytnavn' is not defined

13 Variabelnavne Først: bogstav eller understregning (_)
Dernæst: et vilkårligt antal bogstaver, understregninger, eller tal. Rigtigt: __builtin__, navn, _navn_, navn1 Galt: 1peter = 'x' ^SyntaxError: invalid syntax Reserverede ord kan ikke benyttes: While, if, elif, print,… Der er 29 i alt (se bogen side 137) Java konvention ”bilFabrik” (variabel), ”BilFabrik” (klasse)

14 Tildeling igen Da variable er indirekte referencer kan to variable referere til den samme objekt Navnet refererer først til en lokation i lageret Lagerlokationen refererer til objektet >>> statsminister = 'fogh’ >>> venstreformand = statsminister Representamen: ’Venstreformand’ Objekt: Representamen Objekt: ‘Fogh’ Representamen: ’Statsminister’

15 Referencer Hvis vi ændrer den første 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 = ’schlüter’ Objekt: Representamen Representamen: ’Venstreformand’ Objekt: ‘Fogh’ Objekt: Representamen Objekt: ‘schlüter’ Representamen: ’Statsminister’

16 Ækvivalens og identitet
>>> venstreformand = 'anders fogh rasmussen’ >>> statsminister = 'anders fogh rasmussen’ To forskellige objekter der har samme bogstaver og derfor er ækvivalente >>> venstreformand is statsminister False Is checker om de to objekter er identiske >>> venstreformand == statsminister True ”==” checker om to objekter er ækvivalente, her: indeholder samme bogstaver >>> venstreformand = statsminister

17 Garbage collection Hvor mange navne refererer til objetket ”fogh”?
>>> sys.getrefcount(statsminister) 3 >>> sys.getrefcount(venstreformand) Vi kan slette ’statsminister’s direkte reference uden at slette den indirekte >>> del(statsminister) >>> statsminister Traceback (most recent call last): File "<interactive input>", line 1, in ?NameError: name 'statsminister' is not defined 2 >>> venstreformand 'fogh’ Når ingen navne refererer til en værdi slettes den. Garbage collection

18 Dynamiske typer I nogle programmeringssprog skal man angive hvilken type en variabel skal have String x = “Anders Fogh Rasmussen” Det gælder ikke i Python. Her kan en variabel indeholde forskellige værdier >>> x = “Anders Fogh Rasmussen” >>> x = 12 Men objekterne har stadig en type! Stærk typet vs dynamisk typet sprog

19 Typer 1 De operationer der kan foretages på et objekt afhænger af hvilken type det er Polymorfi >>> “Peter “ + “ bjerregaard” (sætter strengen sammen) ’Peter bjerregaard’ >>> (lægger tallene sammen) 46 Operatorerne har altså forskellig betydning ud fra den kontekst de er i. Dette kaldes også operator overloading

20 Typer 2 casting Det er muligt at “tvinge” en type til at være en anden type Eks. tvinge en tekst (string) til at være et tal (int) >>> x = “12” >>> y = int(x) >>> str(int('2')+int('3'))+' kroner’ ’5 kroner’ >>> '2'+'3'+' kroner’ '23 kroner' Vi ændrer interpretanten - måden værdien fortolkes på

21 Typer 3 “Umulige” æ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 får vi værdien fra listen) 'a'

22 Typer 4 Simple typer Scalarer vs compound Mutable vs immutable
Tekst (string, str), tal (integer, int …) Scalarer vs compound Scalarer = tal, tekst(string): består ikke af mindre selvstændige dele Compound = lister, tupler, dictionaries: består af mindre selvstændige dele Mutable vs immutable Mutable = lister, dictionaries: kan ændres Immutable = tal, tekst, tupler: kan ikke ændres

23 String Opfører sig lidt som en Compound-type Er immutabel
Kan opfattes som en sekvens af bogstaver >>> navn = “PETER” Vi ser fra nu af bort fra den indirekte reference!

24 Indexering >>> navn = 'PETER’ >>> len(navn)
5 >>> navn[0] 'P’ >>> navn[len(navn)-1] (vær opmærksomme på dette) 'R’ >>> navn[-1] >>> navn[-2] 'E’ >>>navn[len(navn)] Traceback (most recent call last): File "<pyshell#1>", line 1, in <module> a[len(a)] IndexError: string index out of range

25 Ændring af strenge Man kan ikke ændre bogstaverne ved strenge:
>>> 'peter'[1] = 'a' Traceback (most recent call last): File "<pyshell#7>", line 1, in -toplevel- 'peter'[1] = 'a' TypeError: object does not support item assignment Det 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 første forekomst 'peter' >>> b 'pater‘ Eller…. >>> a = a.replace(‘e’, ‘a’, 1) ‘pater’ #vi har dog også mistet referencen til vores gamle instans af a

26 Intervaller, ’slicing’
Navn[fra og med: til men ikke med] >>> navn[0:3] 'PET’ >>> navn[:3] >>> navn[2:4] 'TE’ >>> navn[2:] 'TER’ >>> navn[:] 'PETER’

27 Slicing >>> navn[:] (laver en kopi) >>> navn[::2]
'PETER' >>> navn[::2] 'PTR’ >>> navn[::-1] 'RETEP'

28 String funktioner >>> navn = 'PETER’ >>> tal = '123’
>>> navn.isalpha() True >>> tal.isalpha() False >>> tal.isdigit() Navn.__getslice__(2, 4) <==> navn[2:4]

29 Dot-notationen Alle værdier er objekter der tilhører en klasse (kommer senere!) Et objekt har egenskaber og metoder tilknyttet Help-funktionen giver en liste over klassens metoder >>>help(str) Navn PETER isalpha Navn.isdigit() isdigit Navn.split() split

30 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

31 Stringfunktioner >>> opdeling = 'peter bjerregaard vahlstrup'.split(' ') >>> opdeling ['peter', ’bjerregaard', ’vahlstrup'] y.find(x) returnerer indexet for første forekomst af x in y. >>> andetord = peter bjerregaard vahlstrup'.find(' ') >>> andetord 5 >>> fornavn = 'peter bjerregaard vahlstrup'[0:andetord] >>> fornavn 'peter’ efternavn = peter bjerregaard vahlstrup'[andetord:] >>> efternavn ' bjerregaard vahlstrup'

32 Værdisammenligninger
a < b ; a > b ; a <= b ; a >= b ; a == b; a != b ; a <> b Tal: numerisk sammenligning Tekst: alfabetisk sortering ( a < b < c < d...)

33 Opgave 1 + 2 Løs opgave 1 og 2 Opgave 1 omhandler slicing af tekststrenge og concatenering Opgave 2 omhandler indeksering i lister og dictionarys samt concatenering

34 Boolean Efter George Boole
Alt hvad kan sammenlignes giver svaret True eller False Boolean-typen er ny i python 2.3 Før: 0 og 1 >>> “a” == “ b” False >>> “a” < “b” ... True

35 Sekvenser Containere, kan indeholde mange værdier
String kan opfattes som en form for sekvens slicing, indexering kan kun “indeholde” tegn Andre sekvenser: lister, tupler, dictionaries (kan indeholde alt)

36 Lister Tom liste: L = [] >>> navn = ['peter',’bjerregaard',’vahlstrup'] >>> navn[0] 'peter’ >>> navn[1] ’bjerregaard’ >>> navn[1:] [’bjerregaard', ’vahlstrup'] >>> person = [navn, 59] >>> person [['peter', ’bjerregaard', ’vahlstrup'], 59] Indexering og slicing Lister er heterogene containere der kan indeholde værdier af mange forskellige slags, også andre lister. MEN PAS PÅ MED DET!

37 Lister kan ændres 1 >>> person >>> person.remove(59)
[['peter', ’bjerregaard', ’vahlstrup'], 59] >>> person.remove(59) >>> person.append(60) Kan også gøres således: person[1] = 60 >>> person[1] 60 >>> person[0][1] ’bjerregaard’ >>> del(person[0][1]) [['peter', ‘vahlstrup'], 60]

38 Lister kan ændres 2 >>> person.sort() >>> person
[60, ['peter', ’bjerregaard', ’vahlstrup']] >>> person[1].sort() [60, [’bjerregaard', 'peter’, 'vahlstrup']]

39 Tupler er (næsten) som lister, men er immutable (kan ikke ændres)
Kan derfor bruges som nøgler i et dictionary navn = (”peter”, “vahlstrup”) navn[1]=”Olsen” ikke tilladt TypeError: object does not support item assignment Tupel med et element: (”Peter”,) >>> navn = ('peter') >>> navn 'peter’ >>> type(navn) <type 'str'> >>> navn = ('peter',), (1234, ) (hvis ikke tror den det er et tal) <type 'tuple'>

40 Dictionary/ordbog 1 Associative map: afbilder nøgler på værdier
Indexering efter nøgler, ikke efter position >>> ordbog = {} >>> ordbog['hest'] = 'horse’ (nøgle:værdi) >>> ordbog['ko'] = 'cow’ >>> ordbog {'ko': 'cow', 'hest': 'horse'} >>> ordbog['ko'] ’cow’ Meget anvendelig

41 Dictionary/ordbog 2 >>> ordbog.keys() (returnerer en liste)
['ko', 'hest'] >>> 'ko' in ordbog.keys() True >>> ordbog.values() ['cow', 'horse'] >>> ordbog.get('ko','findes ikke') 'cow’ >>> ordbog.get('so','findes ikke') 'findes ikke' Alternativ til ordbog[”ko”] Hvad returneres hvis nøglen ikke findes

42 Dictionary 3 Værdierne kan selv være en dictionary
>>> medarbejderliste = {} >>> medarbejderliste['peter vahlstrup'] = >>> medarbejderliste {'peter vahlstrup ': {' ': 'telefon': } >>> medarbejderliste['peter vahlstrup'] {' ': 'telefon': } >>> medarbejderliste['peter vahlstrup'][' ']

43 Dictionary 4 dictionary Værdi: dictionary Nøgle: Peter Boegh Andersen
Nøgle: Værdi: Nøgle: telefon Værdi:

44 Stand-up programmering 1
Lav din egen database med et select-kald Databasen: en liste af ordbøger tabel = [{'fornavn':'Peter','efternavn':'Andersen','adresse':'Vestergade'}, {'fornavn':'Karen','efternavn':'Jensen','adresse':'Oestergade'}, {'fornavn':'Hans','efternavn':'Karlsen','adresse':'Vestergade'}] kolonner rækker

45 Stand-up programmering 2
kolonneNavne = ['fornavn'] betingelse = {'adresse':'Vestergade'} Skriv en algoritme der udskriver de ønskede kolonner i alle rækker hvor betingelsen er opfyldt (det er her vi starter) Eks: Udskriv fornavne på alle der bor på vestergade. Problemløsning del og hersk: Opdel et problem i mindre problemer Forsæt indtil du når til små problemer du kan programmere dig ud af.

46 Input cpr = raw_input('¨Skriv Cpr:') ¨Skriv Cpr:

47 Filer Filens navn: entekst.txt Filens indhold:
Der var en gang en mand han boede i en spand og spanden var af ler nu kan jeg ikke mer >>> myfile = open('C:/Python24/pythonfiles/38/entekst.txt','r') >>> myfile.readline() 'Der var en gang en mand\n‘ 'han boede i en spand\n‘ >>> myfile.readlines() ['og spanden var af ler\n', 'nu kan jeg ikke mer'] Den komplette sti ned til filen

48 Filer – hvad kan vi bruge det til?
name = raw_input("name of file: ") myFile = open(name, "r") lines = myFile.readlines() myFile.close() outList = [] for l in lines: if "Slum_x" in l: outList.append("-"*10+l[:-1]+10*"-"+"\n") elif "Ástríður" in l: outList.append("*"*10+l[:-1]+10*"*"+"\n") else: outList.append("\t\t"+l+"\n\n) (\t og \n er escapede karakterer) myFile = open("chatoutput.txt", "w") for l in outList: myFile.write(l) Indlæse fil, formatere indholdet og udskrive det formaterede indhold igen til en ny fil

49 Metoder Open, close Mode: Seek: flytter ’læse og skrivehovedet’
'r’: read 'w’: write 'a’: tilføje til slutningen (append) Seek: flytter ’læse og skrivehovedet’ >>> myfile.readlines() ['og spanden var af ler\n', 'nu kan jeg ikke mer'] [] >>> myfile.seek(0) ['Der var en gang en mand\n', 'han boede i en spand\n', 'og spanden var af ler\n', 'nu kan jeg ikke mer']

50 Metoder Skrivning >>> myfile = open('C:/Python24/pythonfiles/38/entekst.txt','w') >>> myfile.write('Der var ikke nogen mand') >>> myfile.close() >>> myfile = open('C:/Python24/pythonfiles/38/entekst.txt','r') >>> myfile.readlines() ['Der var ikke nogen mand']

51 Opgave 3 Programmet skal ved hjælp af raw_input() indlæse et korrekt cpr-nummer, inddele det i dato, måned, år, løbenummer og køn og udprinte en liste af disse 5 strenge. I skal bruge dette i opgave 4. En kørsel skal se sådan ud: type cpr: ['31', '12', '45', '009', '1'] >>> raw_input er en indbygget funktion der prompter brugeren for input, indlæser det og returnerer en tekststreng: cpr = raw_input('type cpr:')


Download ppt "Introduktion til programmering"

Lignende præsentationer


Annoncer fra Google