Download præsentationen
Præsentation er lastning. Vent venligst
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:')
Lignende præsentationer
© 2024 SlidePlayer.dk Inc.
All rights reserved.