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

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

Lær Python dag 1 - modul 1

Python programmering. Per Tøfting. MacFest

Lær Python - Dag 4, modul 2 Objektorienteret programmering

Introduktion til programmering. Uge 38.1 Python 2 Learning Python, kap 8-12.

Abstrakte datatyper C#-version

2) Det er let at være produktiv med Python, da Python som regel kun har mellem 67 og 80% færre linier end tilsvarende C eller Java kode.

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

Programmering for begyndere Lektion 2. Opsamling mm

Python 3 kursus lektion 1:

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16,

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

Lær Python - Dag 3, modul 1 Læse og skrive filer

Kapitel 4 Løkker i C#

Øvelse 9. Klasser, objekter og sql-tabeller insert code here

Introduktion til programmering. Programmeringssprog Uge 44 Computer Science, kap 6. Learning Python: kap 13, 14.

Programmering og Problemløsning, 2017

SWC eksamens-spørgsmål. Oversigt

Jeg har i forbindelse med it og programmering designet og udviklet et it-produkt, som kan beregne rødder i en anden gradsligning.

Software Construction 1 semester (SWC) Spørgsmål 1

Introduktion til funktioner, moduler og scopes i Python

Introduktion til programmering. Afslutning

Introduktion Til Konkurrenceprogrammering

Sammenlign og byt. Et eksempel på dokumentering af et program

Dokumentation af programmering i Python 2.75

Kommentarer til opgave 4-6

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Kursusarbejde 3 Grundlæggende Programmering

DM507 Algoritmer og datastrukturer

Introduktion til programmering. Intro

DDD Runde 2, 2015 Facitliste

DM507 Algoritmer og datastrukturer

#AlleKanKode. Lektion 2 - Konstanter og Variabler

Computer Science Camp

Lær Python - Dag 4, modul 1 Objektorienteret programmering

Programmeringscamp. Implementer funktionerne én for én og test hele tiden.

JavaScript. nedarvning.

Programmering C RTG

Programmering I Java/C#

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

DM507 Algoritmer og datastrukturer

klient Webside Forespørgsel/ Nye data Python program Database kommando svar Database

Forelæsning Uge 2 Mandag

Hent filoplysninger fra billeder og filer

DM507 Algoritmer og datastrukturer

Kapitel 3 Betinget logik i C#

DM507 Algoritmer og datastrukturer

Løsning af møntproblemet

Indholdsfortegnelse Forord...8 Makroer samt aktivere Udvikler-fanen...10 Makrosikkerhed (Sikkerhedsindstillinger)...13

Skriftlig eksamen i Datalogi

Introduktion til ActionScript, fortsat

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen

Programmering og Problemløsning, 2017

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

PUT og INPUT funktionerne

Enigma. Et programmeringssprog. Forfatter: Niels Serup X. Y Vejleder: A B C. Fag: Programmering Uddannelsessted: N M

PHP Snippets. De små korte. Skrevet af Daniel Pedersen

Side 1. Databaser og SQL. Dagens gang. Databasebegreber. Introduktion til SQL Kap 1-5

DM507 Algoritmer og datastrukturer

vil jeg blive mindet om det af VBA allerede mens jeg skriver koden, da der er tale om en såkaldt kompileringsfejl:

Klasser og Objekter i Python. Uge 11

Sortering. Sortering ved fletning (merge-sort) Del-og-hersk. Merge-sort

Transkript:

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

Idle xx Jeres egne kommandoer Pythons prompt

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

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 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 Data Kode 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 <> []:

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 >>> navn = 'peter >>> telefon = 86379790 >>> navn 'peter >>> telefon 86379790 >>> type(navn) <type 'str'> >>> type(telefon) <type 'int'> Type: tekst (string), markeret ved apostrofferne Type: heltal Vi kan checke hvilken type værdien er ved hjælp af type

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 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 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 Representamen: Statsminister Objekt: 20826464 Representamen Objekt: Fogh

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

Æ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 >>> venstreformand is statsminister True

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 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 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 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 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 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 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 >>> 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 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 >>> a 'peter' >>> b 'pater Eller. >>> a = a.replace( e, a, 1) >>> a pater #vi har dog også mistet referencen til vores gamle instans af a

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 >>> 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() True Navn. getslice (2, 4) <==> navn[2:4]

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 Navn.isdigit() Navn.split() isalpha isdigit split

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

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 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 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 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 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 >>> 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 >>> person.sort() >>> person [60, ['peter', bjerregaard', vahlstrup']] >>> person[1].sort() >>> person [60, [ bjerregaard', 'peter, 'vahlstrup']]

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 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 >>> 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 Værdierne kan selv være en dictionary >>> medarbejderliste = {} >>> medarbejderliste['peter vahlstrup'] = {'telefon':86196901,'email':'pbvahlst@imv.au.dk'} >>> medarbejderliste {'peter vahlstrup ': {'email': 'pbvahlst@imv.au.dk', 'telefon': 86196901 } >>> medarbejderliste['peter vahlstrup'] {'email': 'pbvahlst@imv.au.dk', 'telefon': 86379790} >>> medarbejderliste['peter vahlstrup']['email'] 'pba@imv.au.dk'

Dictionary 4 dictionary Nøgle: Peter Boegh Andersen Værdi: dictionary Nøgle: email Værdi: pba@imv.au.dk Nøgle: telefon Værdi: 86379790

Stand-up programmering 1 rækker Lav din egen database med et select-kald Databasen: en liste af ordbøger tabel = kolonner [{'fornavn':'peter','efternavn':'andersen','adresse' :'Vestergade'}, {'fornavn':'karen','efternavn':'jensen','adresse':'o estergade'}, {'fornavn':'hans','efternavn':'karlsen','adresse':'v estergade'}]

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.

Input cpr = raw_input(' Skriv Cpr:') Skriv Cpr:434343434

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 Den komplette sti ned til filen >>> 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']

Filer hvad kan vi bruge det til? name = raw_input("name of file: ") Indlæse fil, formatere indholdet myfile = open(name, "r") og udskrive det formaterede lines = myfile.readlines() indhold igen til en ny fil 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) myfile.close()

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

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