Repetisjon, del 1. TDT 4110 IT Grunnkurs Professor Guttorm Sindre

Like dokumenter
Repetisjon, del 2. TDT 4110 IT Grunnkurs Professor Guttorm Sindre

Løsningsforslag Kontinuasjonseksamen i TDT4110 Informasjonsteknologi - grunnkurs

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

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

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk. - 3rd edition: Kapittel 3. Professor Alf Inge Wang

Læringsmål og pensum. if (be): else (not_to_be):

Python: Valg og betingelser. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Øvingsforelesning 1 Python (TDT4110)

Python: Oppslagslister (dictionaries) og mengder 3. utgave: Kapittel 9

if (be): else (not_to_be): TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap.

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap. 3

Øvingsforelesning i Python (TDT4110)

Øvingsforelesning 5 Python (TDT4110)

TDT4110 Informasjonsteknologi grunnkurs: Eksempler. Mangekanter

MENGDER (SETS) Læringsmål og pensum. Kapittel 9.2

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Unntak (exceptions) (Kap 6) Dictionaries (Kap. 9) Terje Rydland - IDI/NTNU

TDT4105 Informasjonsteknologi, grunnkurs MatLab: Filbehandling - load, save, type - fopen, fgetl, feof, fprintf, fclose

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og mengder (sets) - Kapittel 9. Professor Alf Inge Wang

TDT4105 Informasjonsteknologi, grunnkurs

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

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

Øvingsforelesning 5 Python (TDT4110)

Python: Strenger 3. utgave: Kapittel 8

Løse reelle problemer

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og sets (mengder) Utgave 3: Kap. 9. Terje Rydland - IDI/NTNU

Python: Lister og tupler Gaddis: Kapittel 7

Oppsummering fra sist

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.

Excited. Hvordan komme i gang med tekstbasert programmering? Centre for Excellent IT Education. Guttorm Sindre

Repetisjon Novice Videregående Python PDF

Python: Rekursjon (og programmering av algoritmer) Python-bok: Kapittel 12 + teoribok om Algoritmer

TDT4110 IT Grunnkurs Høst 2016

TDT4110 IT Grunnkurs Høst 2015

Oppgaver uke 1: Løsningsforslag

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

Systemutvikling (Software Engineering) TDT 4110 IT Grunnkurs Professor Guttorm Sindre

TDT4110 Informasjonsteknologi grunnkurs: Python: Repetisjon. Professor Alf Inge Wang

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

Tirsdag 21/11. Onsdag 24/11. Tirsdag 12/12. TDT4110 Informasjonsteknologi grunnkurs: Tema: Et større case

Hvordan løse problemer med programmering?

Lage større programmer (Python, relatert til teoridelen om Software Engineering ) TDT 4110 IT Grunnkurs Professor Guttorm Sindre

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

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

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

Python: Variable og beregninger, innlesing fra tastatur utskrift til skjerm. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Python: Filer og unntak Gaddis: Kapittel 6

TDT4110 IT Grunnkurs Høst 2016

Steg 1: Regneoperasjoner på en klokke

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

MAT1030 Diskret Matematikk

TDT4110 IT Grunnkurs Høst 2012

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Dictionary er et objekt som lagrer en samling av data. Minner litt om lister men har klare forskjeller:

Kap 2: Løkker og lister

Løsningsforslag Kontinuasjonseksamen i TDT4110 Informasjonsteknologi - grunnkurs

Løsningsforslag til eksamen i INF1000

Øvingsforelesning 9 i Python (TDT4110)

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

MAT1030 Plenumsregning 1

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

TDT4105 Informasjonsteknologi, grunnkurs. Matlab: Søking

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

Mattespill Nybegynner Python PDF

Løse reelle problemer

TDT4110 Informasjonsteknologi grunnkurs: Tema: Filer og unntak ( exceptions ) - 3rd edition: Kapittel 6. Professor Alf Inge Wang

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

Filbehandling Tekstfiler

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

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

AlgDat - Øvingsforelesning 1 Introduksjon til Python, lenkede lister og øving 1

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og sets (mengder) Utgave 3: Kap. 9. Terje Rydland - IDI/NTNU

Betinget eksekvering og logiske tester i shell

Programmering Høst 2017

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

TDT4110 Informasjonsteknologi grunnkurs: Programmering: En større case. Professor Alf Inge Wang

Læringsmål og pensum. En større case. Mål Lære å lage større og sammensatte programmer Pensum Kapitlene 1-9 og 12.

Python: Mengder og Dictionaries 3. utgave: Kapittel 9

Tre på rad mot datamaskinen. Steg 1: Vi fortsetter fra forrige gang. Sjekkliste. Introduksjon

Løse reelle problemer

Ta kontakt i pausen. Viktig at vi kommer i gang med dette arbeidet!

UNIVERSITETET I OSLO

Python: Mengder og Dictionaries 3. utgave: Kapittel 9

Informasjon Prøveeksamen i IN1000 høsten 2018

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

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

Post-it spørsmål fra timen (Arv og subklasser)

TDT4110 IT Grunnkurs Høst 2016

UNIVERSITETET I OSLO

IN1000 Obligatorisk innlevering 7

Plenumsregning 1. MAT1030 Diskret Matematikk. Repetisjon: Algoritmer og pseudokode. Velkommen til plenumsregning for MAT1030

Øvingsforelesning 3 Python (TDT4110)

Eksamensoppgaver 2014

Oppgave 1 Hva tror du følgende program skriver ut til terminalen? Diskuter med gruppen.

TDT4110 Informasjonsteknologi grunnkurs: Uke 48 Oppsummering/Spørretime. Professor Alf Inge Wang

Løse reelle problemer

TDT4110 IT Grunnkurs Høst 2017

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Et større case. Terje Rydland - IDI/NTNU. Lære å lage større og sammensatte programmer

Transkript:

Repetisjon, del 1 TDT 4110 IT Grunnkurs Professor Guttorm Sindre

Resultat av Kahoot! Følgende temaer hadde størst behov på en skala fra 1 lite behov til 3 stort behov: Binærfiler 2,5 Rekursjon 2,3 2D-lister / tabeller 2,3 Tekstfiler 2,3 Unntaksbehandling 2,3 Dictionaries 2,25 Doble løkker 2,15 Lister og tupler 2,08 Strenger 2,08 Mengder 2,0 2

Plan for repetisjon Aritmetiske operatorer og syntaks: 3b aug.2016 Funksjoner, parametre, returverdier Enkle løkker, lister, strenger: Oppg 4 a-e aug.2015 Dictionary, filer, unntak: Oppg 4 f, g, aug.2015 2D-lister, doble løkker: Aug. 2015: 2 e-f, Des. 2014: 3 a-b Oppg 3e, Aug 2016 3

Aritmetiske operatorer og syntaks Ikke mye trekk for syntaksfeil, men litt Hvis du trenger full pott: unngå syntaksfeil Skriv kolon alle sted det skal være Skriv operatorer på Python-måte, ikke matematisk Slik: x >= 1 Ikke slik: x 1 Slik: x ** 3 Ikke slik: x 3 Slik: a * b Ikke slik: a b Slik: (a + 2) / b Ikke med horisontal brøkstrek eller kolon Vær nøye med innrykk feil kan her også bli semantisk 4

Operatorer og syntaks (2) Husk heltallsdivisjon // og modulo % der det passer Enklere kode, vanlig divisjon gir behov for avrunding / typekonvertering / andre ekstra beregninger Eksempel: oppgave 3b, august 2016 5

Enkle (1D) lister og løkker Viktig å vite hvordan man Bygger opp lister Aksesserer elementer i lister Forskjell på å aksessere verdiene direkte og via indeks Og når det passer å bruke hva Plukke og fjerne elementer fra lister Når bruke while-løkke, når bruke for-løkke? 6

Oppgave 4, august 2015 (a) NB! NB! Ser av Eksempel på kjøring at Funksjonen ikke trenger noen parameter Det er tre ulike input-setninger Dette er ei kort liste (kun 3 element) Trenger ikke bruke løkke, kan bare opprette den direkte Løkke blir bare vanskeligere, fordi ledeteksten er ulik 7

Oppgave 4, august 2015 (b) Eksempel på kjøring viser to innparametre, begge lister Repetisjon: Hvordan aksessere enkeltelement i lister? Hvis vi bare trenger verdiene kan for verdi in liste: funke Men ikke her, må parallelt sammenligne element i to lister Da må vi bruke indeks 8

Oppgave 4, august 2015 (c) Indikerer løkke Ulik respons ved ulike feil Indikerer ifelif- -else inni løkka Repetisjon: hva slags løkke velger vi? for : antall repetisjoner kjent når løkka starter For eksempel gjennomløpe alle element i liste while : antall repetisjoner ukjent Passer her, uvisst hvor lenge brukeren feiler Hva blir sluttbetingelsen? Gyldig input gitt Initialisering: Anta feil input inntil det motsatte er bevist if-elif- else: ofte lurt å starte med enkleste betingelse Her kanskje at input har feil lengde (ikke 7 tegn) 9

4c, forts. Antar feil inntil motsatte bevist Enkleste betingelse Nest enkleste Vanskeligste Passert alle tester, dermed gyldig Koden fra og med elif (streng[2:7] ) i stedet løses med en løkke (og dette er ikke dårligere): else: gyldig = True # antar ok input inntil motsatte er bevist for tegn in streng[2:7]: if tegn not in?0123456789 : # evt. mengde / liste / tuppel a la SKILTBOKSTAV print( Fem siste tegn må være tall eller? ) gyldig = False return streng 10

Oppgave 4, august 2015 (d) Minner om 4b, nå sammenligning av strenger, ikke lister Naturlig med for-løkke (vet antall rep.) Må aksessere med indeks fordi samme posisjon er viktig 11

Oppgave 4, august 2015 (e) Her passer en løkke av typen for element in liste: Posisjon i lista ikke viktig NB: sjekken av ett og ett skilt inni løkka er det som ble gjort i 4d 4d 12

Oppgave 4, august 2015 (f) Større og mer ullen oppgave Hvordan tenke? Fins det noen tydelige etapper den kan deles opp i? 1. Lese fil, legge data inn i dictionary 2. Løkke (så lenge bruker vil fortsette): a) lese inn observasjoner fra bruker b) Sjekk opplysninger mot dictionary c) Skriv info om matchende biler til skjerm Fins det muligheter til å bruke funksjoner 4a-e? 13

Etappe 1: fra tekstfil til dictionary { nøkkel : verdi, nøkkel : verdi, } { DK21518 : [ FIAT, Panda, Blå, Os,Liss ], GH70709 : [ Ford, Mondeo, Blå, Hansen,Jo, } Hva skal være nøkkel, og hva skal være verdi? Bilmerke, modell eller farge passer ikke som nøkkel Ikke unike, mange biler får samme nøkkel Eier? Nei, den er ukjent, ikke det vi skal bruke til oppslag Nøkkel: skiltnr. Verdi: liste med merke, modell, farge, eier Overordnet ide: Åpne tekstfil Opprett tom dictionary For hver linje i fil: Finn enkeltdata fra linje Putt data i dictionary Lukk tekstfil Returner dictionary Kunne også hatt unntak her, men utsetter det til main( ) 14

Etappe 1: Løsning» Skilt blir nøkkel resten av lista blir verdi 15

Etappe 2: main( ) Overordnet ide: try: Disse to linjene er ikke-trivielle, kan være lurt å gjøre som hjelpefunksjoner # Kalle funksjonen som leser tekstfila bil_db = les_biler_fra_fil( biler.txt ) except: skriv passende feilmelding else: fortsett = True while fortsett: les_inn_bilinfo() # 2a nr = les_gyldig_vitneskilt() # 2b skiltliste = matchende skilt i bil_db vis resultater på skjerm spør bruker om å fortsette, les inn svar hvis svar er nei: fortsett = False 16

main() og skript - løsning 17

Hjelpefunksjoner, løsning 4e 4b Kunne hatt dette som en funksjon i stedet for to Ikke avslutte match_bildata med return kandidater I stedet fortsette med if kandidater == [ ] skrive ut direkte i denne funksjonen 18

Binærfiler For å få repetert dette: ekstraoppgave ( 4 g ) For å slippe tidkrevende lesing fra tekstfil og konvertering av data til dictionary hver gang, ønsker vi å lagre dictionary til binærfil, og lese den fra binærfil når programmet startes. Hvis binærfilen ikke fins, skal programmet i stedet prøve å hente fra tekstfil. Lag funksjoner for å lagre dictionary til fil og hente den fra fil, og vis hvordan du ellers ville forandre programmet for å inkludere denne funksjonaliteten. 19

Lagre og hente, løsning import pickle def lagre_data(data,filnavn): fil=open(filnavn,'wb') pickle.dump(data,fil) fil.close() def hent_data(filnavn): try: fil = open(filnavn,'rb') data = pickle.load(fil) fil.close() except: return {} else: return data 20

Endret main() - løsning # i main() bil_db = hent_data('biler.dat') if bil_db!= {}: print('binærfil lest.') fortsett = True else: # try: (lese tekstfil...) # kode vi hadde fra før... # (nederst, etter while-løkke) # Lagrer dictionary i binærfil: lagre_data(bil_db, 'biler.dat') print('binærfil lagret, takk for nå!') 21

2-D lister, eks. des. 2014 oppg 3a Gitt: 2D-liste weatherdata hver indre liste er værdata for ett døgn Høyeste temperatur Laveste temperatur Nedbør Ønsker statistikk for perioden (nede venstre): Høyeste temperatur Og hvilken dag den inntraff Laveste temperatur Og hvilken dag Nedbør Problem: hvordan komme fra A til B? 22

Hvordan tenke her? Overordnet plan: Gi startverdier til høyeste temp., høyeste dag, laveste temp., laveste dag og total nedbør Men hva er fornuftige startverdier for hver av disse? Gå i løkke dag for dag: Total nedbør = total nedbør + dagens nedbør Hvis dagens høy.temp. > høyeste temp. Høyeste temp. = dagens høy.temp Høyeste dag = dagens nummer Hvis dagens lav.temp < laveste temp. Laveste temp = dagens lav.temp Laveste dag = dagens nummer Etter løkka: print resultatene Viktig å skjønne for 2D-lister: Hvilken indeks er til hva? 23

Løsningsforslaget def weatherstats(weatherdata): # alternativ løsning (bare marginalt ulik, to indekser) htemp = weatherdata[0][0] # antar første dag varmest... ltemp = weatherdata[0][1] # og kaldest inntil noe annet viser seg varmere / kaldere hday = lday = 1 # dagnummeret for antatt varmest/kaldest hittil rain = 0 # total nedbør, hittil lik 0 for i in range(len(weatherdata)): # antall runder for løkka = antall rader i tabell rain += weatherdata[i][2] # legger til dagens regn if weatherdata[i][0] > htemp: htemp = weatherdata[i][0] # dagens temperatur er nå høyeste hittil hday = i + 1 # NB: +1 for dagnummer! Indeks 0, mens dagnummer 1, if weatherdata[i][1] < ltemp: ltemp = weatherdata[i][1] # dagens temperatur er nå laveste hittil lday = i + 1 # print-setningene uforandret... 24

3b: lignende problem Kaldeste tredagersperiode NB: løkka må bare gå til len(weatherdata)-2 Ellers fins det ikke to neste dager å regne inn flere perioder like kalde returnere kun den siste Må ha averagetemp <= ctemp 25

3e, aug. 2015 26