Introduktion til programmering

Slides:



Advertisements
Lignende præsentationer
Introduktion til Javascript – Grundlæggende Webdesign, F2004. Introduktion til Javascript.
Advertisements

Forsiden 1.Denne knap bruges når du vil taste dagens resultater ind. 2.Denne knap skal kun bruges hvis du allerede har gemt data og du finder ud af at.
Velkommen til Softwarekonstruktion
REGISTRERINGSDATABASEN
Instruktion i Animation Shop
Formularer (Access, del 3)
SQL 1 DDL og DML.
Felter og nøgle-felter (databaser, del 6)
Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Array vs. ArrayList. Arrays Et array er en struktureret metode til at gemme flere værdier af den samme datatype. Data’en i et array ligger op ad hinanden.
Grundlæggende programmering Efterår 2001
Hvordan man skriver koden.
Intro Variabler - datatyper. 2. forelæsning Hvad skete sidste gang Hvad er PHP? Kursussammensætning: læse – newsgroup – forelæsning – øvelsestime – aflevering.
Introduktion til Access (Access, del 1)
Introduktion til programmering Uge 40 Python 2 Learning Python, kap 8-12.
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
GP 10, 7/ Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/ kl. 9:15 – 12:00.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Intro Forelæsning 6 Linux Install Party i PC-Cafeen i morgen.
Calc.
Data Dictionary (databaser, del 7)
1 Sortering I elementære metoder. 2 Plan Terminologi Elementære metoder til sortering -sortering ved udvælgelse -sortering ved indsættelse -Shellsort.
Forelæsning 3.1 Collections Javas for-each løkke
Intro til C# apps Kodegennemgang af simpel C# app
Videregående pc-vejledning Modul 03: Harddisken 2 60+Bornholm.
Rapporter (Access, del 5). RHS – Informationsteknologi – Udgangspunkt Vi har oprettet en database Vi har defineret en eller flere tabeller, og.
Program Design – 4 Introduktion til PHP. Dagens lektion Hvad er PHP?  - og lidt historie Hvordan virker PHP? Grundlæggende PHP  Variable  Typer  Løkker.
Introduktion til programmering Uge 38 Python 2 Learning Python, kap 8-12.
Lektion 7 Læsestof: Kopier fra Caranno
Fundamentale datastrukturer
FEN KbP/seminar 1: Specifikationer/Notationen Q 1 Kontraktbaseret programmering: Seminar 1 Om specifikationer Algoritmenotationen Q.
1 Design, analyse og verifikation. 2 Design Bevisteknikker Design ved hjælp at matematisk induktion Analyse O-notation Logaritmer Binær søgning Verifikation.
Introduktion til Access (Access, del 1). RHS – Informationsteknologi – Fra design til udvikling Vi ved nu, hvordan vi finder et design for en database,
DATATYPER. For at tilpasse hvert felt i databasen til dets formål og dermed øge funktionalitet 1 bit er tilstrækkelig til at angive køn (0/1) men for.
10. Datastrukturer. 2 Nordjyllands Erhvervakademi Collections library Datastrukturer i.NET kaldes normalt Collections Findes i namespace System.Collections.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Repetition: Introduktion til OOP med C# og .NET
Procestræ under afvikling af cp init login shell cp cp src dest.
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Paradigmer i Programmering 1. Program for idag : Funktioner og udtryk i SML : Øvelse : Frokost – 14.00: Deklarative.
3. Objekt Orientering og Relations Databaser
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
Paradigmer i Programmering 1. Plan for kurset 4 x Mads R, 4 x Torben B, 2 x opgave MR: Funktionsprogrammering, SML TB: Logikprogrammering, Prolog Opgave:
Oprettelse af tabeller (Access, del 2)
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
PD – kursusgang 3 Introduktion til Java Script. Mål Viden om hvordan JavaScripts indlejres i HTML dokumenter Viden om programmering i JavaScript  Erklæring.
Intro Siden sidst: evaluering på opgaver og virtuel kursus.
Begreber og Redskaber 11. Plan for idag Lidt afrunding: Collections Framework i Java Noget om oversættere og sprog Evaluering Sidste gang øvelser før.
Forelæsning 7.1 – repetition
Tekst filer Tekstfiler opbygges normalt af linier, hvor disse ikke behøver at være samme længde. Når man skal arbejde med tekstfiler, ønsker man metoder.
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
Den relationelle model
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Indledende Programmering Uge 6 - Efterår 2006
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
Klasser og objekter. dIntProg, F08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
Formularer (Access, del 3). RHS – Informationsteknologi – Udgangspunkt Vi har oprettet en database Vi har defineret en eller flere tabeller Vi.
Forelæsning Uge 4 – Mandag
Quiz Uge 2 – mandag.
Quiz Uge 2 – mandag.
Quiz Uge 2 – mandag.
ROBOTTERNE KOMMER - OZOBOTTERNE.
Præsentationens transcript:

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

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

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? 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 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 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’ 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) 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’ Objekt: 20826464 Representamen Objekt: ‘Fogh’ Representamen: ’Statsminister’

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

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

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

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] >>> 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 'peter' >>> b 'pater‘ Eller…. >>> a = a.replace(‘e’, ‘a’, 1) ‘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] >>> navn[2:4] 'TE’ >>> navn[2:] 'TER’ >>> navn[:] 'PETER’

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

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

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

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

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

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

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