Løse reelle problemer

Like dokumenter
Løse reelle problemer

Hvordan løse problemer med programmering?

Løse reelle problemer

Finne ut om en løsning er helt riktig og korrigere ved behov

Løse reelle problemer

INF uke 2. Inputt, beslutninger, kontrollflyt og prosedyrer

Objektorientert programmering i Python

Finne ut om en løsning er helt riktig og korrigere ved behov

IN uke 2. Presis forståelse av programmering

Mattespill Nybegynner Python PDF

Utførelse av programmer, metoder og synlighet av variabler i JSP

Løkker og arrayer. Løse problemer med programmering. INF1000, uke3 Geir Kjetil Sandve

Innhold uke 8. Objekter: Bruk og intern organisering. Beskjeder: Oblig 1 6. Beskjeder: Oblig 7 (og 8)

Feilmeldinger, brukerinput og kontrollflyt

Python: Funksjoner og moduler Kapittel

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

IN1000 Obligatorisk innlevering 7

Oppsummering fra sist

Håndtere mange verdier

TDT4110 Informasjonsteknologi grunnkurs: Tema: Funksjoner med retur og moduler Utgave 3: Kap

Objektorientert programmering i Python. Resten av semesteret. Innhold uke 9 Mer komplekse strukturer. Referanser og objekter, inkl Mentimeter spørsmål

Innhold uke 7. Objektorientert programmering i Python: Introduksjon. Lite tilbakeblikk: Programflyt og skop. Lite tilbakeblikk: Funksjoner er uttrykk

IN uke 2. Presis forståelse av programmering

Python: Intro til funksjoner. TDT4110 IT Grunnkurs Professor Guttorm Sindre

INF120: Oblig 3. Yngve Mardal Moe

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet "TGA"

Øvingsforelesning i Python (TDT4110)

Informasjon Eksamen i IN1000 og IN1001 høsten a) 1 poeng. 1b) 1 poeng. Tid. Oppgavene. Tillatte hjelpemidler. 30. november kl. 14.

Informasjon Prøveeksamen i IN1000 høsten 2018

Læringsmål uke 7. Objektorientert programmering i Python: Introduksjon. Innhold uke 7. Lite tilbakeblikk: Programflyt og skop

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum

Løkker og lister. Løse problemer med programmering. INF1001, uke3 Geir Kjetil Sandve

Øvingsforelesning i Python (TDT4110)

TDT4110 Informasjonsteknologi grunnkurs: Tema: Funksjoner med retur og moduler. - 3rd edition: Kapittel Professor Alf Inge Wang

Prøveeksamen IN1000. IN Prøveeksamen. Dato november 2017 Tid 12:30-12:00 Alle trykte og skrevne hjelpemidler er tillatt.

Med løkke: Læringsmål og pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker/Sløyfer Utgave 3: Kap. 4 Utgave 2: Kap. 5. Mål.

INF Ekstrainnlevering

YouTube-kanal ITGK. Læringsmål og pensum

Python: Funksjoner og moduler Kapittel

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

TDT4110 Informasjonsteknologi grunnkurs: Tema: Enkle funksjoner. - 3rd edition: Kapittel Professor Alf Inge Wang

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

IN uke 1. Komme i gang med programmering

Kapittel 1 En oversikt over C-språket

Innhold uke 9. Objektorientert programmering i Python. Om ukens pensum. Referanser og objekter Tema: Mer komplekse strukturer

Øvingsforelesning 5 Python (TDT4110)

I denne oppgaven skal vi repetere litt Python-syntaks, det er en god blanding av alle tingene du har lært i Python til nå.

Et større programeksempel. Hvordan løse et reelt problem med en objektorientert fremgangsmåte

TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker. - 3rd edition: Kapittel 4. Professor Alf Inge Wang

Utførelse av programmer, funksjoner og synlighet av variabler (Matl.)

Python: Intro til funksjoner. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Del 1 En oversikt over C-programmering

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

Hvor gammel er du? Hvor gammel er du? Del 1: Skrive ut til skjerm. Gjøre selv. Skrevet av: Sindre O. Rasmussen, Kodeklubben Trondheim

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Filer og unntak (exceptions) Utgave 3: Kap. 6. Terje Rydland - IDI/NTNU

Øvingsforelesning 5 Python (TDT4110)

I dag skal vi ved hjelp av ganske enkel Python-kode finne ut om det er mulig å tjene penger på å selge og kjøpe en aksje.

Læringsmål og pensum. Intro løkker. Mål Lære om begrepet løkker Lære om bruk av while-løkke Lære om bruk av for-løkke Pensum. Kapittel 4.

Innleveringsoppgave 1

Programmering i C++ Løsningsforslag Eksamen høsten 2005

TDT4110 IT Grunnkurs Høst 2015

Informasjon Eksamen i IN1000 høsten 2017

For å sjekke at Python virker som det skal begynner vi med å lage et kjempeenkelt program. Vi vil bare skrive en enkel hilsen på skjermen.

IN1000 Repetisjonskurs: IO og listeoperasjoner (+ string)

Repetisjon Novice Videregående Python PDF

Læringsmål og pensum. Inn- og utoperasjoner 21/10/16

TDT4110 IT Grunnkurs Høst 2016

IN Seminaroppgaver til uke 11

Steg 1: Rest etter divisjon

Innhold. IN1000 Høst Hva skal evalueres? Fra kurssidene. Uke 12: Pensumgjennomgang og eksamenstips

Python: Filer og unntak Gaddis: Kapittel 6

INF1000: Forelesning 4. Mer om arrayer Metoder

}?> <!DOCTYPE... <html xmlns=" <head>... </head> <body> <p>nå skal vi printe hallo:</p> <?php //funksjonskall

INF109 - Uke 1a

EGENDEFINERTE FUNKSJONER I SAS OG LITT OM OPEN SOURCE INTEGRASJON SAS FANS I STAVANGER , MARIT FISKAAEN (SAS INSTITUTE)

Øvingsforelesning 1 Python (TDT4110)

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

UNIVERSITETET I OSLO

Obligatorisk Innlevering 2

Python: Variable og beregninger, input og utskrift. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Forside. 1 Hva skrives ut?

Etter uke 6 skal du. Introduksjon til objektorientert programmering. Hva skjedde ~1967? INF1001. Grunnkurs i objektorientert programmering

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

EKSAMENSOPPGAVE / EKSAMENSOPPGÅVE

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale.

Transkript:

Løse reelle problemer Løse problemer med data fra fil, samt litt mer om funksjoner IN1000, uke6 Geir Kjetil Sandve

Mål for uken Få enda mer trening i hvordan bruke løkker, samlinger og beslutninger for å løse problemer Som del av dette skal vi lære å behandle data fra filer Få enda mer presis forståelse av funksjoner, spesielt parameteroverføring og returverdier Som del av dette skal vi lære om skop for variabler

Outline Lese, bruke og skrive data i filer Eksempel: kombinere data fra ulike filer Mer om funksjoner: parametre og skop for variabler

Outline Lese, bruke og skrive data i filer Eksempel: kombinere data fra ulike filer Mer om funksjoner: parametre og skop for variabler

Innlesing fra fil Å hente data fra filer er gøy! Man kan jobbe på mye større og mer spennende data enn fra tastatur Man slipper å taste det inn hver gang man kjører Innlesing fra tekstfiler er veldig rett frem i Python En tekstfil åpnet i Python er faktisk en samling av linjer Man kan dermed iterere gjennom linjer i filen vha for-løkke (Det finnes også mange andre måter å gjøre det på)

Hvordan lese inn fra fil Først åpne en fil (biblioteksfunksjonen open lager et fil-objekt): min_fil = open("mittfilnavn.txt") Deretter iterere gjennom hver linje i filen: min_fil = open("mittfilnavn.txt") for linje in min_fil: Inni for-løkken kan man gjøre noe med linjen min_fil = open("mittfilnavn.txt") for linje in min_fil: print("her fant jeg: " + linje) [les_fra_fil.py]

Organisere informasjon innad på linjer Det er ofte nyttig å organisere informasjon på bestemte måter i en fil: Kan gruppere: én gruppe på hver linje, og alt tilhørende gruppen inndelt langs linjen Representere en tabell: hver linje er en rad, og hver linje er videre inndelt i verdier per kolonne (som i et regneark) Slike filer er ofte i tabulært format, hvor man bruker et spesifikt tegn (f.eks. komma) for å skille verdier innad i linje

Lese tabulære filer i python En tabulær fil er en helt vanlig tekstfil, hvor man kan iterere gjennom linjer for linje in open("min_tabular_fil.csv"): Hver linje kan splittes til en liste (basert på separator-tegn) biter = linje.split(",") #Splitter på hvert komma biter = linje.split() #Splitter på blanke tegn Man kan hente ut bestemte biter (kolonner): navn = biter[0] alder = int(biter[1]) Man kan også iterere gjennom bitene: for bit in biter: print("jeg fant: " + bit)

Bygge samling fra innhold i fil Vi har tidligere laget to versjoner av hovedstad-program: I uke 1 sjekket vi land med if-setninger og printet hovedstad I uke 3 la vi land og hovedsted inn i en ordbok og slo opp land Nå vil vi bygge ordboken fra innholdet i en fil Vi trenger informasjon som kobler étt land med én hovedstad Bruker tabulær fil hvor hver linje har land og tilhørende hovedstad Går gjennom hver linje i fil, splitter, og legger inn i ordbok [hovedstad.py]

Oppsummere data gruppert på linjer Vi vil finne hvilken måned hadde høyest dagsnedbør Har tabulær fil med nebørsmengde per dag gjennom året Dagsnedbør er gruppert på én linje for hver måned Fremgangsmåte: nøstet løkke inkludert splitting Itererer gjennom måneder (linjer) Splitter hver linje til liste over dagsnedbør Itererer gjennom dagsnedbør og finner høyeste Skriver ut høyeste verdi for denne måneden [regn.py]

Oppgave Gitt en tekstfil av typen vist under (navn og alder), skriv et program som leser filen og skriver ut navnet på den eldste personen i fila alder.csv odlaug:76 oluf:65 gunda:74 malfrid:80 godtfred:68

[alder.py] En mulig løsning

Hvordan skrive til tekstfil Først åpne en fil for skriving: min_fil = open("mittutfilnavn.txt", "w") Deretter skrive tekst (en streng-verdi) til slutten av filen: min_fil = open("mittutfilnavn.txt", "w") min_fil.write("dette havner i filen") Man vil typisk ha linjeskift i det man skriver ut: min_fil.write("dette havner i filen\n") min_fil.write("dette havner på\n ulike\n linjer\n") Når man er ferdig bør man lukke filen: min_fil.close() [elefanter.py]

Outline Lese, bruke og skrive data i filer Eksempel: kombinere data fra ulike filer Mer om funksjoner: parametre og skop for variabler

Eksempel: drømmer vi oss bort når det regner? Problemstilling: Er det slik at nordmenn gjør flere internettsøk etter restplass på dager hvor det regner? Fremgangsmåte: Lese nedbørsdata fra fil (hentet fra yr.no) Lese søkestatistikk fra fil (hentet fra Google Trends) Se om antall søk på "restplass" er høyere på dagene det var regn (mer enn 2mm)

Koble data Vi må nå koble nedbør og søkeantall for samme dato Vi har data om nedbør og søk i to separate filer Når vi ser på antall søk for en gitt dato må vi altså finne igjen nedbør for samme dato Vi kan først iterere gjennom nedbørsfilen og bygge en ordbok som kobler dato til nedbør (og samme for søk) Etterpå itererer vi gjennom datoer Når vi behandler en gitt dato slår vi opp korresponderende søk og nedbør i ordbøkene Vi summererer søkescore separat for gode og dårlige dager [restplass.py]

Outline Lese, bruke og skrive data i filer Eksempel: kombinere data fra ulike filer Mer om funksjoner: parametre og skop for variabler

Prosedyrer versus funksjoner i Python Det er i Python ikke noe teknisk skille mellom prosedyre og funksjon Begge kalles i Python "funksjoner" og har samme form: def min_funksjon(parameter):... Forskjellen er i vårt hode (vårt formål): Det som skiller en "ekte" funksjon fra en prosedyre er at funksjoner returnerer en verdi man er interessert i Dette ser man som en return i koden, men også ved at resultatet av kallet brukes/tas vare på: todusin = gang_med_to(dusin)

Med/uten parametre/returverdi (En litt filosofisk distinksjon...) Prosedyrer uten parametre: Handler stort sett om kontrollflyt Prosedyrer med parametre: Handler stort sett om tilpasset gjenbruk av kode Funksjoner: Outsourcer en overordnet beregning (transformerer inn til ut) Inneholder vanligvis ikke input og print (!)

Tre kilder til funksjoner Innebygde funksjoner print, int, input... Følger med Python og er alltid tilgjengelige Funksjoner i standard-biblioteket (ikke innebygde) sqrt, ctime Er del av en modul: math, time,... from random import randint terning = randint(1,6) Egendefinerte funksjoner def min_funksjon(parameter):...

Fra uke4: Prosedyre med parametre def mittprosedyrenavn(parameter1, parameter2,...): kodelinje1 kodelinje2... For å kjøre alle kodelinjene i prosedyren ("kalle prosedyren"): mittprosedyrenavn(argument1, argument2,...)

Parameteren tilordnes verdien av argumentet! def skrivalder(alder): if alder > 6: print("velkommen til mitt program"); else: print("gaa heller ut og lek i skogen"); print("hacket av en toaaring: ") skrivalder(2)

Parameteren tilordnes verdien av argumentet! def skrivalder(alder): alder = 2 if alder > 6: print("velkommen til mitt program"); else: print("gaa heller ut og lek i skogen"); print("hacket av en toaaring: ") skrivalder(2)

Fra uke4: Subrutiner med returverdi - Funksjoner def mittfunksjonsnavn(parameter1,...): kodelinje1 kodelinje2 return beregnet_verdi For å kjøre alle kodelinjene i funksjonen ("kalle prosedyren"): verdien_jeg_trenger = mittfunksjonsnavn(argument1,..)

Funksjonskallet evaluerer til returverdien def gi_meg_pi(): return 3.14 pi = gi_meg_pi() print(pi)

Funksjonskallet evaluerer til returverdien def gi_meg_pi(): return 3.14 3.14 pi = gi_meg_pi() print(pi)

Funksjonskallet evaluerer til returverdien def gang_med_to(tall): return tall*2 dusin=13 todusin = gang_med_to(dusin) print(todusin)

Funksjonskallet evaluerer til returverdien def gang_med_to(tall): tall=13 return tall*2 dusin=13 todusin = gang_med_to(dusin) print(todusin)

Funksjonskallet evaluerer til returverdien def gang_med_to(tall): tall=13 26 return tall*2 dusin=13 todusin = gang_med_to(dusin) print(todusin)

Funksjonskallet evaluerer til returverdien def gang_med_to(tall): tall=13 26 return tall*2 26 dusin=13 todusin = gang_med_to(dusin) print(todusin)

Funksjonskallet evaluerer til returverdien def gang_med_to(tall): tall=13 26 return tall*2 26 dusin=13 todusin = gang_med_to(dusin) print(todusin) 26

Skop for variable Hver funksjon har sine egne lokale variabler Variablene som tilhører én funksjon er ikke tilgjengelige i en annen funksjon Skopet til en variabel er hvor denne variabelen er tilgjengelig - hvilken funksjon den tilhører Enhver variabel tilhører et navnerom, som igjen er tilknyttet en ramme - for vårt formål er dette som synonymer for skop Vi overfører verdier mellom funksjoner gjennom parametre og returverdier Vi kan sende inn argument til en funksjon vi kaller Vi kan få en returverdi tilbake fra en funksjon vi kaller [velkomst.py]

Det "globale" skopet Variabler som ikke er del av en funksjon kalles globale Disse globale variablene er spesielle, fordi de i prinsippet er tilgjengelige inni alle funksjoner i filen I IN1000 unngår vi globale variable! Et viktig poeng med funksjoner er at man lett ser hva som kommer inn (argumenter) og ut (returverdier) Siden globale variabler i prinsippet er tilgjengelige, kan de bli brukt ved et "uhell" ([velkomst2.py]) Slike uhell kan føre til fremtidige bugs og feilsøking Dette kan unngås ved å flytte kode fra ytterste nivå til en prosedyre "hovedprogram" ([velkomst3-4])

Oppgave: hva skrives ut her? def funksjon(): tekst = "Jeg elsker Oslo!" print(tekst) tekst = "Jeg elsker Bergen!" funksjon() print(tekst)

Svar: Det samme navnet representerer to helt ulike variable i det lokale og globale skopet Utskrift: Jeg elsker Oslo! Jeg elsker Bergen! def funksjon(): tekst = "Jeg elsker Oslo!" print(tekst) tekst = "Jeg elsker Bergen!" funksjon() print(tekst)

Svar: Siden det uansett er to helt ulike variable: ingen forskjell om variablene hadde ulike navn Utskrift: Jeg elsker Oslo! Jeg elsker Bergen! def funksjon(): tekst = "Jeg elsker Oslo!" print(tekst) utsagn = "Jeg elsker Bergen!" funksjon() print(utsagn)

Men: Dersom det ikke var deklarert en lokal variabel tekst, ville dette navnet representert den globale variabelen! Utskrift: Jeg elsker Bergen! Jeg elsker Bergen! def funksjon(): print(tekst) tekst = "Jeg elsker Bergen!" funksjon() print(tekst)

Med vår anbefaling: Dersom den ytre koden også flyttes til en funksjon (hovedprogram), slipper man mulig forvirring rundt det lokale og globale skopet Kjøring: NameError: global name 'tekst' is not defined def funksjon(): print(tekst) def hovedprogram(): tekst = "Jeg elsker Bergen!" funksjon() print(tekst) hovedprogram()

Med vår anbefaling: Om en verdi som er deklarert i én funksjon skal brukes i en annen, må man på tydelig vis sende over som parameter Utskrift: Jeg elsker Bergen! Jeg elsker Bergen! def funksjon(tekst): print(tekst) def hovedprogram(): utsagn = "Jeg elsker Bergen!" funksjon(utsagn) print(utsagn) hovedprogram()

Med vår anbefaling: Bruk gjerne ulike navn i ulike funksjoner, men det gjør uansett ingen forskjell siden alle variable er lokale for hver sin funksjon Utskrift: Jeg elsker Bergen! Jeg elsker Bergen! def funksjon(tekst): print(tekst) def hovedprogram(): tekst = "Jeg elsker Bergen!" funksjon(tekst) print(tekst) hovedprogram()

Introdusere funksjoner i programmet om restplass Å lage nedbørs-ordbok fra data i fil er én oppgave Vi definerer en funksjon som basert på et filnavn lager og returnerer en ordbok Den resterende analysen kan legges i en prosedyre Basert på ordbok for regn og filnavn for søkeantall skriver den ut gjennomsnittlig søk på gode og dårlige dager Kallene til funksjonen og prosedyren over legges i en funksjon "hovedprogram" Tydeliggjør hva som kjøres og sikrer at alle verdier overføres med parametre og returverdier

Utsett til i morgen, det du ikke trenger gjøre i dag Funksjoner tillater å utsette problemer! Fokuser først på hva som trengs overordnet Deretter gå løs på detaljene Eksempel: kvm=60 postnr=0316 inntekt=503800 pris = regn_bolig_pris(kvm, postnr) maks_laan = regn_kreditt(inntekt) if (maks_laan > pris): print("yes!") # Deretter skriv selve funksjonene..

Oppsummering Å hente data fra filer er gøy! Kan jobbe med store og reelle data, uten tasting Formålet til en funksjon er typisk å beregne en bestemt returverdi basert på argumentene den mottar Dermed inneholder funksjoner oftest ikke print og input Når alt dere har lært frem til nå kobles sammen, kan det brukes til å utrette mye