1 / 51

Introduktion til programmering

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.

essien
Download Presentation

Introduktion til programmering

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation 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 • Øvelse

  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 • http://www.python.org/

  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 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”

  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: • 20826464 • 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: • 20826464 • Representamen Representamen: ’Venstreformand’ Objekt: ‘Fogh’ • Objekt: • 20826465 • Representamen Objekt: ‘schlüter’ Representamen: ’Statsminister’

  16. Æ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

  17. 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

  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’ • >>> 12 + 34 (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 • 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] • '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

  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: 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

  26. 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’

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

  28. String funktioner • >>> navn = 'PETER’ • >>> tal = '123’ • >>> navn.isalpha() • True • >>> tal.isalpha() • False • >>> tal.isdigit() • True • 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 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. • |

  31. 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'

  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 • [['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]

  38. Lister kan ændres 2 • >>> person.sort() • >>> person • [60, ['peter', ’bjerregaard', ’vahlstrup']] • >>> person[1].sort() • >>> person • [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(navn) • <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['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'

  43. 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

  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 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.

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

  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‘ • >>> 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

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

  49. 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']

  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']

More Related