introduktion til programmering n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Introduktion til programmering PowerPoint Presentation
Download Presentation
Introduktion til programmering

Loading in 2 Seconds...

play fullscreen
1 / 51

Introduktion til programmering - PowerPoint PPT Presentation


  • 112 Views
  • Uploaded on

Introduktion til programmering. Uge 39 Python I Learning Python, kap 4-7. Plan. Hvad er et Python program Udtryk Værdier og Datatyper Øvelse Lister og dictionarys Stand-up programmering Filer Øvelse . Fortolkning/compilering.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Introduktion til programmering' - essien


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
introduktion til programmering

Introduktion til programmering

Uge 39 Python I

Learning Python, kap 4-7.

slide2
Plan
  • Hvad er et Python program
  • Udtryk
  • Værdier og Datatyper
  • Øvelse
  • Lister og dictionarys
  • Stand-up programmering
  • Filer
  • Øvelse
fortolkning compilering
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
installering af python
Installering af Python
  • http://www.python.org/
slide5
Idle
  • xx

Jeres egne kommandoer

Pythons prompt

slide6
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

hvad er et python program
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)
muslinge programmet
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

programmer
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

v rdier
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

v rdier og typer
Værdier og typer

Type: tekst (string), markeret ved apostrofferne

  • >>> navn = 'peter’
  • >>> telefon = 86379790
  • >>> navn
    • 'peter‘
  • >>> telefon
    • 86379790
  • >>> type(navn)
    • <type 'str'>
  • >>> type(telefon)
    • <type 'int'>

Type: heltal

Vi kan checke hvilken type værdien er ved hjælp af ”type”

tildeling assignment
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
variabelnavne
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)
tildeling igen
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:
  • 20826464
  • Representamen

Objekt: ‘Fogh’

Representamen:

’Statsminister’

referencer
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:
  • 20826464
  • Representamen

Representamen:

’Venstreformand’

Objekt: ‘Fogh’

  • Objekt:
  • 20826465
  • Representamen

Objekt: ‘schlüter’

Representamen:

’Statsminister’

kvivalens og identitet
Ækvivalens og identitet
  • >>> venstreformand = 'andersfoghrasmussen’
  • >>> statsminister = 'andersfoghrasmussen’
    • 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
  • >>> venstreformand is statsminister
    • True
garbage collection
Garbage collection
  • Hvor mange navne refererer til objetket ”fogh”?
    • >>> sys.getrefcount(statsminister)
    • 3
    • >>> sys.getrefcount(venstreformand)
    • 3
  • 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
    • >>> sys.getrefcount(venstreformand)
    • 2
    • >>> venstreformand
    • 'fogh’
  • Når ingen navne refererer til en værdi slettes den. Garbage collection
dynamiske typer
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
typer 1
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’
    • >>> 12 + 34 (lægger tallene sammen)
    • 46
  • Operatorerne har altså forskellig betydning ud fra den kontekst de er i. Dette kaldes også operator overloading
typer 2 casting
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å
typer 3
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'
typer 4
Typer 4
  • Simple typer
    • 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
string
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!
indexering
Indexering
  • >>> navn = 'PETER’
  • >>> len(navn)
    • 5
  • >>> navn[0]
    • 'P’
  • >>> navn[len(navn)-1] (vær opmærksomme på dette)
    • 'R’
  • >>> navn[-1]
    • 'R’
  • >>> 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

ndring af strenge
Æ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: objectdoes 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ørsteforekomst
  • >>> a
  • 'peter'
  • >>> b
  • 'pater‘
  • Eller….
  • >>> a = a.replace(‘e’, ‘a’, 1)
  • >>> a
  • ‘pater’ #vi har dog ogsåmistetreferencentilvoresgamleinstansaf a
intervaller slicing
Intervaller, ’slicing’
  • Navn[fra og med: til men ikke med]
  • >>> navn[0:3]
    • 'PET’
  • >>> navn[:3]
    • 'PET’
  • >>> navn[2:4]
    • 'TE’
  • >>> navn[2:]
    • 'TER’
  • >>> navn[:]
    • 'PETER’
slicing
Slicing
  • >>> navn[:] (laver en kopi)
    • 'PETER'
  • >>> navn[::2]
    • 'PTR’
  • >>> navn[::-1]
    • 'RETEP'
string funktioner
String funktioner
  • >>> navn = 'PETER’
  • >>> tal = '123’
  • >>> navn.isalpha()
    • True
  • >>> tal.isalpha()
    • False
  • >>> tal.isdigit()
    • True
  • Navn.__getslice__(2, 4) <==> navn[2:4]
dot notationen
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

slide30
Help
  • >>> help(str)
  • Help on class str in module __builtin__:
  • class str(basestring)
  • | str(object) -> string (laver objektetomtil 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
Stringfunktioner
  • >>> opdeling = 'peterbjerregaardvahlstrup'.split(' ')
  • >>> opdeling
    • ['peter', ’bjerregaard', ’vahlstrup']
  • y.find(x) returnerer indexet for første forekomst af x in y.
  • >>> andetord = peterbjerregaardvahlstrup'.find(' ')
  • >>> andetord
    • 5
  • >>> fornavn = 'peterbjerregaardvahlstrup'[0:andetord]
  • >>> fornavn
    • 'peter’
  • efternavn = peterbjerregaardvahlstrup'[andetord:]
  • >>> efternavn
    • ' bjerregaardvahlstrup'
v rdisammenligninger
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...)
opgave 1 2
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
boolean
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
sekvenser
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)
lister
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!

lister kan ndres 1
Lister kan ændres 1
  • >>> person
    • [['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])
  • >>> person
    • [['peter', ‘vahlstrup'], 60]
lister kan ndres 2
Lister kan ændres 2
  • >>> person.sort()
  • >>> person
    • [60, ['peter', ’bjerregaard', ’vahlstrup']]
  • >>> person[1].sort()
  • >>> person
    • [60, [’bjerregaard', 'peter’, 'vahlstrup']]
tupler
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(navn)
    • <type 'tuple'>
dictionary ordbog 1
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
dictionary ordbog 2
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

dictionary 3
Dictionary 3
  • Værdierne kan selv være en dictionary
  • >>> medarbejderliste = {}
  • >>> medarbejderliste['petervahlstrup'] = {'telefon':86196901,'email':'pbvahlst@imv.au.dk'}
  • >>> medarbejderliste
    • {'petervahlstrup ':{'email': 'pbvahlst@imv.au.dk', 'telefon': 86196901}
  • >>> medarbejderliste['petervahlstrup']
    • {'email': 'pbvahlst@imv.au.dk', 'telefon': 86379790}
  • >>> medarbejderliste['petervahlstrup']['email']
    • 'pba@imv.au.dk'
dictionary 4
Dictionary 4

dictionary

Værdi: dictionary

Nøgle: Peter Boegh Andersen

Nøgle: email

Værdi: pba@imv.au.dk

Nøgle: telefon

Værdi: 86379790

stand up programmering 1
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

stand up programmering 2
Stand-up programmering 2
  • kolonneNavne = ['fornavn']
  • betingelse = {'adresse':'Vestergade'}
  • Skriv en algoritme der udskriver de ønskede kolonner ialle 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.
input
Input
  • cpr = raw_input('¨Skriv Cpr:')
  • ¨Skriv Cpr:434343434
filer
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‘
  • >>> myfile.readline()
    • '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

filer hvad kan vi bruge det til
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 erescapedekarakterer)
  • myFile = open("chatoutput.txt", "w")
  • for l in outList:
  • myFile.write(l)
  • myFile.close()

Indlæse fil, formatere indholdetog udskrive det formaterede indhold igen til en ny fil

metoder
Metoder
  • Open, close
  • Mode:
    • '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.readlines()
    • []
  • >>> myfile.seek(0)
  • >>> myfile.readlines()
    • ['Der var en gang en mand\n', 'han boede i en spand\n', 'og spanden var af ler\n', 'nu kan jeg ikke mer']
metoder1
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']
opgave 3
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:3112450091
    • ['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:')