1 / 51

Introduktion til programmering

Introduktion til programmering. Uge 40 Python 2 Learning Python, kap 8-12 . Plan. Opsamling ER-diagrammer og SQL Sidste gang Sætninger og udtryk Kontrolstrukturer Selektion If…: Gentagelse While …: For …: Øvelse 1 Funktioner Stand-up programmering Dokumentation Øvelse 2.

ivie
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 40 Python 2 Learning Python, kap 8-12.

  2. Plan • Opsamling ER-diagrammer og SQL • Sidste gang • Sætninger og udtryk • Kontrolstrukturer • Selektion • If…: • Gentagelse • While…: • For…: • Øvelse 1 • Funktioner • Stand-up programmering • Dokumentation • Øvelse 2

  3. ER-diagrammer og SQL • En tabel består typisk af mindst to kolonner • Intern repræsentation (ID) ændrer sig aldrig. Det gør ekstern repræsentation såsom nummeret på et sæde osv. Hvis der f.eks. Kommer flere sæder eller færre

  4. Afleveringer • Har alle afleveret deres øvelsesopgaver? • Husk det! Det har betydning for hvilken eksamensform i skal gå op i

  5. Html og css bog? • Har bogen som e-book

  6. Sidste gang • Navne, værdier og typer • Objekter • Type(værdi) (string) • Id(variabel) (x45hx344) • Simple typer (scalarer) • Tekst (string), index, slicing • Tal (int, float) • Sammensatte typer • List [] • Tuple () • Dictionary () • Udtryk – skabe nye værdier (”peter”[::-1])

  7. Repetition af udtryk • 'Peter'[1:3][::-1] = 'te’. Hvorfor?

  8. Udtryk • Udtryk (expression): noget der repræsenterer en værdi • 1 repræsenterer et heltal • ’Peter’ repræsenterer en tekst (string) • Et sammensat udtryk er en kombination af andre udtryk og operatorer der repræsenterer og producerer en (ny) værdi • 1 + 2 repræsenterer 3 –et tal (1 og 2 = udtryk, + = operator) • 'Peter'[1:3] repræsenterer 'et’ – en tekst • [1,2,3][1] repræsenterer 2 – et tal • [1,2,3][0:2] repræsenterer [1, 2] – en liste • [1:3] repræsenterer en operation

  9. 'Peter'[1:3][::-1] = 'te’. Hvorfor? • Fortolkningen af udtryk består i at frembringe det objekt de repræsenterer Fortolkning Objekt Repræsentation

  10. O O O O I I I I R R R R 'Peter'[1:3][::-1] = 'te’. Hvorfor? te Repræsentationer der er aflæselige for maskinen et slicing O slicing Peter I R Repræsentationer der er aflæselige for mennesker 'Peter' [1:3] [::-1]

  11. Sætninger og udtryk • Programmer består af et eller flere moduler • Moduler består af sætninger (statements) • Sætninger indeholder udtryk • Udtryk repræsenterer og producerer værdier • Sætninger • Sætninger repræsenterer ikke værdier • Sætninger regulerer hvordan værdierne produceres • Eksempel • >>> len('peter') • 5 • >>> x = 'peter’ • >>> Udtryk: producerer 5 sætning: producerer ingenting men ændrer variables værdier

  12. Påstande – Boolske udtryk • Udtryk der repræsenterer værdierne sand eller falsk. • De repræsenterer værdierne 1 og 0 (i nyere versioner True og False) • Naturlige sprog: påstande • Bussen går kl. 9.13. • Det er løgn! • Nogle sproghandlinger som ordrer kan hverken være sande eller falske • Gå nu op i bussen. • Det er løgn – lyder mærkeligt, men kan siges. • >>> 1 + 3 == 4 • True • >>> 'Peter' == 'Karl’ • False • >>> 'Peter' <> 'Karl’ • True

  13. Sandhedsværdier • Boolske operatorer • And, or, not • Boolske udtryk producerer nye sandhedsværdier af gamle sandhedsværdier • >>> 1+2 == 3 and 4+5 == 9 • True • >>> not (1+2 == 3 and 4+5 == 9) • False • >>> (1+2 == 3 or 1+2 == 9) • True

  14. Sandhedstabeller

  15. Nye operatorer kan defineres ved de gamle

  16. Naturlige sprog og logiske • Naturlige sprog lægger en årsagsfortolkning ind i hvis-så • Det gør logikken ikke • Hvis 2 + 3 = 5, så vinder socialdemokraterne næste valg • Logisk: altid sand fordi 2 + 3 = 5 • Naturligt sprog: nonsens (eller ironisk) fordi der ikke er nogen årsagssammenhæng

  17. If-kontrolstruktur (sætning) if <boolsk udtryk> : <handling1> <handling2> • if <boolsk udtryk>: er en selektionsstruktur • <boolsk udtryk> skal repræsentere en sandhedsværdi • Handlingssætningerne udgør en blok • Blokke er indenteret med tabulator eller mellemrum • Brug tabulator ikke mellemrum det bliver noget rod

  18. ’if’ • if-sætninger kan indeholde mange forskellige betingelser if<noget> : #indledende <h1> <h2> <hn> elif<nogetAndet> : #ellers hvis <h1> <hn> else: #hvis intet var sandt <h1>

  19. Porfyrs træ • ifraw_input('Legemlig substans?') == 'ja': • print 'Ja. Legemlig substans' • ifraw_input('levende?')== 'ja': • print 'Ja.Levende organisme' • ifraw_input('Ja. Sansende?')== 'ja': • print'Ja. Et dyr' • ifraw_input('rationelt?')== 'ja': • print 'Ja. Rationelt dyr' • ifraw_input('dødelig?')== 'ja': • print 'Ja. Et menneske' • else: • print 'Nej. Gud' • else: • print 'Nej. Et dyr' • else: • print 'Nej. En plante' • else: • print 'Nej. Død natur (sten, jord)' • else: • print 'Nej. Et begreb'

  20. Eksempler • Eksempel 1 • Legemlig substans? • Ja. Kropslig • levende? • Ja.Levende organisme • Sansende? • Ja. Et dyr • rationelt? • Ja. Rationelt dyr • doedelig? • Nej. Gud • Eksempel 2 • Legemlig substans? • Ja. Kropslig • levende? • Ja.Levende organisme • Sansende? • Nej. En plante

  21. While-loop • While <boolsk udtryk>: • Statement • Statement • … • Checker om <boolsk udtryk> er sandt. • Hvis det er, udføres den efterfølgende blok. • Ellers springes til det statement der følger efter blokken

  22. While i et program (optælling) • filename = raw_input('Indtastnavnpå file: ') • if filename == '': • filename = 'entekst.txt' • myfile = open(filename,'r') ##open the file • aline = myfile.readline() ##read the first line from the file • nol = 0 #number of lines • now = 0 #number of words • while aline <> '': • #as long as aline is not empty • nol += 1 #increase the linecounter • thewords = aline.split(' ')#split the line into words • now = now + len(thewords)#increase the word counter by the number of words • aline = myfile.readline()#read the next line from the file • print 'The number of lines is ' + str(nol) • print 'The number of words is ' + str(now)

  23. For-loop • For <navn> in <sequence>: • Statement • Statement • … • Navn kommer til at referere til medlemmerne af <sequence>, fra første til sidste • Meget hyppigt brugt

  24. Select med OR-betingelse SELECT * FROM tabel WHERE adresse = ”Vestergade OR efternavn = ”Jensen” requirement= {'adresse':'Vestergade', 'efternavn':'Jensen'} • resultat = [] • #gennemløb alle rækker i tabellen • for rowin tabel: • #gæt på at rækken ikke duer • success = False • #gennemløb alle stikord i betingelsen • for keywordin requirement.keys(): • #hvis værdien af stikordet i betingelsen = værdien af stikordet i rækken • ifrequirement [keyword] == row[keyword]: • #rækken duede alligevel • success = True • #hop ud af løkken • break • ifsuccess == True: • #hvis rækken duede, tilføj rækken til resultatet • resultat.append(row) tabel = [{'fornavn':'Peter','efternavn':'Andersen','adresse':'Vestergade'}, {'fornavn':'Karen','efternavn':'Jensen','adresse':'Oestergade'}, {'fornavn':'Hans','efternavn':'Karlsen','adresse':'Vestergade'}]

  25. Afbrud af løkker • Break: hopper ud af den inderste loop • Continue: hopper op til loopens betingelse • Pass: gør ingenting. Kan også bruges i if-konstruktioner, funktioner osv. Kan bruges hvis vi ikke helt ved hvad der skal stå i sætningen endnu, men vi ved den skal med

  26. Øvelse 1 • Lav en pengemaskine der kan give tilbage på et hvilket som helst beløb i mønterne 1, 2, 5, 10, 20 • Øvelsen ligger på hjemmesiden

  27. Funktioner • Funktioner er en måde at gruppere sætninger så de kan kaldes igen og igen • Et funktionsnavn repræsenterer et funktionsobjekt (callableobject) • Det er en måde at strukturere et program i overskuelige enheder • To keywords: • def: sætter et navn til at referere til et funktionsobjekt • return: får funktionen til at returnere en værdi (et objekt)

  28. Funktioner • def funktionsnavn ( param1, param2, ..., paramN): • sætning1 • sætning2 • ... • sætningN • return resultat

  29. Eksempel Funktionens navn Parametrene • defudskrivOmvendt(tekst): • return tekst[::-1] • >>>x = udskrivOmvendt('peter') • >>> x • 'retep’ Beskrivelse af selve funktionen (callable object) Vi kan give alle typer af parametre med der kan slices også lister

  30. Pass by reference • Parameternavne refererer til samme objekt som de aktuelle parametre • Samme objekt hedder to forskellige ting • Pas på! • x = [1,2,3] • def func(y): • del(y[0]) • >>> func(x) • >>> x • [2, 3] Intern repræsentation i funktionen funktion x R O [1,2,3] O y R

  31. Scope • Navne der oprettes inden i en funktion er forskellige fra identiske navne der bruges uden for funktionen • Det område hvor et navn gælder kaldes dets scope • Det er altid det mindste scope der gælder • Deres reference er også forskellige • Analogi: • I familiens skød betyder ’Anders’ snothvalpen henne i sofaen • I den politiske offentlighed betyder ’Anders’ Danmarks statsminister • Sæt nuværende_scope til det omgrænsende scope af navnets forekomst • Så længe vi ikke har fundet navnet: • Findes navnet i nuværende_scope: • Ja. Bruge dette navns reference • Nej: sæt nuværende_scope til det omgrænsende scope af nuværende_scope • Hvis vi ikke har fundet navnet • Giv en fejlmeddelelse

  32. Eksempel a = "karsten" def funktion(): a = "anders" print a funktion() #kald funktionen print a #udskriv det der står uden for funktionen >>> #output anders karsten

  33. Globale og lokale variable • def func(): • z =[] • z = [1,2,3] • func() • z • [1, 2, 3] • def func() • global z • z = [] • func() • z • [] [] 1,2,3 Hvis ikke opretter vi en ny lokal variabel Ingen assignment derfor leder den opad i scopet

  34. Funktionsværdier • Et funktionsnavn refererer til en værdi med typen ’function’ • >>> type(func) • <type 'function'> • >>> • Derfor kan man tildele et andet navn funktionsobjektet som værdi

  35. To funktioner • def union (sekvens1, sekvens2): #foreningsmængde • resultat = sekvens1[:] • for x in sekvens2: • if not(x in sekvens1): • resultat.append(x) • return resultat • defintersection(sekvens1,sekvens2):#overlap • resultat = sekvens1[:] • for x in sekvens1: • if not(x in sekvens2): • resultat.remove(x) • return resultat

  36. Funktionsnavne • Man kan sætte et andet navn til at referere til funktionsobjektet • >>> foreningsmængde = union • >>> foreningsmængde([1,2,3],[4,6]) • [1, 2, 3, 4, 6] • Man kan også bruge et funktionsnavn som parameter i en anden funktion [1, 2, 3, 4, 5, 6] foreningsmængde funktion [1,2,3] [4,5,6] union

  37. Funktioner som parametre • def do(sekvens1,funktion, sekvens2): • return funktion(sekvens1, sekvens2) • I overskriften optræder funktionen som parameter - som data der flyttes • I kroppen optræder funktionen som noget der kan kaldes • Von Neumann igen!

  38. Funktionsnavn og funktionsresultater • doer en metafunktiondersætterandrefunktionersammen med deresargumenter • print do([1,2,3],union,[3,4,5]) • [1, 2, 3, 4, 5] • Funktionsnavnetunionbrugessom parameter ogdetsværdiudføresidofunktionen. • Resultatetaffunktionskaldkanogsåogsåbrugessom parameter • print intersection(union([1,2,3],[3,4,5]),[1,4]) • [1, 4] • Resultatet af Union ([1,2,3],[3,4,5]),nemlig[1, 2, 3, 4, 5], gives som parameter til Intersection hvis anden parameter er [1,4] • Union repræsenterer en funktion • Union ([1,2,3],[3,4,5])repræsenterer en liste.

  39. Returnering af flere værdier fra enfunktion • Brug en tupel • Brug tupel-unpacking • def funktion(a,b): • res1 = a+b • res2 = a* b • res3 = a-b • return (res1,res2,res3) • x,y,z = funktion(23,34)

  40. Funktionsnavne • Giv altid funktioner sigende navne der beskriver hvad funktionen gør • Hvis det er svært at finde på et navn, eller navnet bliver meget langt, er det fordi at flere funktioner er blevet indlejret i den samme funktion og funktionen bør derfor splittes op i flere funktioner • sorterUdskrivOgGemTeksten() #ikke et godt navn, hvad nu hvis vi kun ville gemme

  41. if __name__ == “__main__”: • Hvordan undgår man at få udført eventuelle sætninger i et modul? • def f1(): pass • def f2(): print “Morten” • if __name__ ==”__main__”: • f1() • f2() Bruges typisk til tests

  42. Opsummering • Store dele af Python kan forstås gennem følgende simple model: • En repræsentation/udtryk står for et objekt/en værdi • Fortolkningen af et udtryk producerer det objekt som repræsentationen står for • Kombinationen af en funktion/operation plus andre værdier producerer en nye værdi • Et funktionsnavn står for et funktionsobjekt • print intersection • <function intersection at 0x011851B0>

  43. Moduler • Moduler er Python-programmerder kan bruges fra andre Python-programmer • Læg jeres moduler i den samme mappe • De ”importeres” ved at bruge kommandoen import. • Import <modulnavn> • From <modulnavn> import * • Moduler kan indkapsle en verden man ønsker at bruge men ikke at forstå. • Modulet beskriver hvordan dets verden fungerer i detaljer men man behøver kun at vide hvordan man bruger dets verden • Vi tager alle funktionerne ud af programmet og lægger dem i et modul. Når vi skal skrive et program der benytter sig af modulets funktionalitet, importerer vi modulet. • typisk samle funktioner inde for samme problemdomæne, f.eks. Math, persistens osv. så vi ved hvad modulet kan bruges til

  44. Stand-up programmering • Lav et modul der kan analysere tekster • Modulet skal kunne: • Fjerne alle karakterer der ikke er ord • Give mulighed for at ændre hvilke karakterer der ikke er ord • Analysere hvor mange antal ord der er i teksten • Give svar på antal forekomster af hvert ord i teksten

  45. Sigende funktionsnavn igen • Hvert funktionsnavn havde i vores tekst analyse_modul sigende navne hvilket gør det nemt for andre at forstå hvad modulet gør og hvordan det skal bruges • stripNonCharacters • getWordCount • getWordCountDictionary Hvis funktioner havde hedet a, b, c havde de været svære at forstå

  46. Kommentarer & Docstring • Kommentarer i pythonprogrammer starter med # • Kommentarer ignoreres af fortolkeren • Docstring er en kommentar der gemmes med koden • def funktion(): • “”” Dette er en docstring “”” • Pass • Eksempel fra text_module_finished

  47. Docstring • dir(str), dir(list) liste over attributter og funktioner • help(str.startswith) hjælp til den specifikke funktion • Dir(text_module) • Help(text_module) • Help(text_module.stripNonCharaters)

  48. Dir • >>> dir(text_module_finished) • ['__builtins__', '__doc__', '__file__', '__name__', 'getWordCount', 'getWordCountDictionary', 'nonWords', 'nonWordsSpeciels', 'setNonWordsList', 'stripNonCharacters']

  49. Help • >>> help(text_module_finished) • Help on module text_module_finished: • NAME • text_module_finished - # -*- coding: ISO-8859-1 -*- • FILE • d:\documents\ito e07\peter bv\uge 40\programs\text_module_finished.py • FUNCTIONS • getWordCount(string, strip=True) • string => a string containing words for counting • strip => optional, default = True: should the string be stripped for non-word • characters before count i performed? • return: an integer value representing the count • getWordCountDictionary(string, strip=True) • string => a string containing words for counting • strip => optional, default = True: should the string be stripped for non-word • characters before count i performed? • return: a dictionary where each word in the string represent a key • and each value is the count of the specific word • setNonWordsList(nonW, nonWordsS) • nonW => a list of characters which should not be treated as words • and therefore should be replaced with "" • nonWordsS => a list of characters which should not be treated as words • but represent a special character which should followed by a space e.g. • newline, tab, slash • stripNonCharacters(string) • string => the string which should be stripped from non-word characters • return: a string stripped from non-word characters • DATA • nonWords = [',', '.', '!', '?', '"', "'", '(', ')', ';', '_', '-', '--... • nonWordsSpeciels = ['\n', '\r', '\t', '/']

  50. Docstrings • I text analyse modulet • def stripNonCharacters(string): • """ • string => the string which should be stripped from non-word characters • return: a string stripped from non-word characters • ""“ • I prompten>>>help(text_module_finished.stripNonCharacters) • Help on function stripNonCharacters in module text_module_finished: • stripNonCharacters(string) • string => the string which should be stripped from non-word characters • return: a string stripped from non-word characters

More Related