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

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

Hvordan løse problemer med programmering?

IN uke 1. Komme i gang med programmering

Løse reelle problemer

INF1000 Eksamen 2014 (modifisert)

Eksamensoppgaver 2014

Oppgaver uke 1: Løsningsforslag

INF1000 Eksamen 2014 (modifisert)

Løse reelle problemer

Informasjon Eksamen i IN1000 høsten 2017

INF uke 2. Inputt, beslutninger, kontrollflyt og prosedyrer

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.

Øvingsforelesning i Python (TDT4110)

Repetisjon Novice Videregående Python PDF

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

Øvingsforelesning 5 Python (TDT4110)

IN uke 1. Komme i gang med programmering

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

Øvingsforelesning 5 Python (TDT4110)

Først må vi få datamaskinen til å velge et tilfeldig ord, så la oss begynne. Lagre programmet ditt og kjør det. Hvilket ord skrives ut?

Hangman. Steg 1: Velg et ord. Steg 2: Gjett en bokstav. Sjekkliste. Sjekkliste. Introduksjon

Objektorientert programmering i Python

Forkurs i informatikk Python. Andreas Færøvig Olsen

Informasjon Prøveeksamen i IN1000 høsten 2018

Steg 1: Rest etter divisjon

Hangman. Level. Introduksjon

Hash-funksjoner. Introduksjon. Steg 1: Strekkoder. Eksempel. Skrevet av: Martin Strand

Håndtere mange verdier

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

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

Feilmeldinger, brukerinput og kontrollflyt

Mattespill Nybegynner Python PDF

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

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

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

TDT4110 IT Grunnkurs Høst 2016

IN uke 1. Komme i gang med programmering

Et lite oppdrag i bakgrunnen

TDT4110 IT Grunnkurs Høst 2015

Debugging. Tore Berg Hansen, TISIP

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

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

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

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

EKSAMENSOPPGAVE / EKSAMENSOPPGÅVE

Oppgave 1.1 (1 poeng) Oppgave 1.2 (2 poeng) Oppgave 1.3 (2 poeng) 1.1

INF Obligatorisk innlevering 5

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

Noen innebygde funksjoner - Vektorisering

Noen innebygde funksjoner - Vektorisering

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

IN1000 Obligatorisk innlevering 7

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

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Løse reelle problemer


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

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

Løsningsforslag Kontinuasjonseksamen i TDT4110 Informasjonsteknologi - grunnkurs

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

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

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

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

Norsk informatikkolympiade runde

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

Øvingsforelesning 1 Python (TDT4110)

IN Seminaroppgaver til uke 11

UNIVERSITETET I OSLO

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

TDT4110 Informasjonsteknologi grunnkurs: Uke 41: «Matlab programs» (kapittel 6)

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

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

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

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

IN uke 2. Presis forståelse av programmering

INF Ekstrainnlevering

Råd nr 1: Start nå! Det tar typisk timer å programmere Del 1 om man ikke har gjort slikt før. Dagens tema:

Oppgave 2: def a (x): x = x + 1 y = 1 + x * 2

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

Anta at følgende programsetninger utføres. Hva skrives ut på skjermen? Hva skrives ut her (skriv nøyaktig de karakterene som printes, og bare de)?

Steg 1: Vår første datamaskin

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

TDT4110 IT Grunnkurs Høst 2016

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

Øvingsforelesning 7 i Python (TDT4110)

Oppsummering fra sist

Øvingsforelesning 3 Python (TDT4110)

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

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

Plenumsregning 1. Kapittel 1. Roger Antonsen januar Velkommen til plenumsregning for MAT1030. Repetisjon: Algoritmer og pseudokode

Dagens tema: 12 gode råd for en kompilatorskriver

MAT1030 Diskret Matematikk

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

Steg 1: Regneoperasjoner på en klokke

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

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

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

Transkript:

Finne ut om en løsning er helt riktig og korrigere ved behov Finurlige feil og debugging av kode IN1000, uke5 Geir Kjetil Sandve

Oppgave (Lett modifisert fra eksamen 2014) Skriv en funksjon Dersom parameteren gratis har verdien True, skal funksjonen alltid returnere 0. Dersom parameteren gratis har verdien False og verdien av alder er mindre enn 18, skal funksjonen returnere 100, ellers 200. Altså skal f.eks. kallet pris (true, 10) returnere 0, kallet pris(false,10) returnere 100 og kallet pris(false, 50) returnere 200.

En mulig løsning if gratis: svar = 0 elif alder < 18: svar = 100 svar = 200 return svar

En annen mulig løsning (returnere inni if) if gratis: return 0 elif alder < 18: return 100 return 200

En annen mulig løsning (returnere inni if) if gratis: return 0 if alder < 18: return 100 return 200

En tredje mulig løsning (bare rene if - ingen else..) if gratis: svar = 0 if ((not gratis) and alder < 18): svar = 100 if ((not gratis) and alder >= 18): svar = 200 return svar

En uriktig løsning if gratis!= False: if alder < 18: svar = 100 elif alder>= 18: svar = 200 svar = 0 return svar

Finne feil og utforske hvordan kode helt presist kjører Hva gjør man dersom et program ikke gjør akkurat det man ønsker? Man kan kikke direkte på koden og se om man skjønner hvor i programmet feilen ligger og hva som går galt Man kan legge inn print ulike steder i koden for å se i hvilken rekkefølge ulike linjer kjører og hvilke verdier ulike variable har Man kan legge inn assert ulike steder i koden Man kan skrive/kopiere bestemte linjer til tolkeren for å se om linjen evaluerer slik man tror Man kan se hva metoder returnerer når de kalles med ulike argumenter Man kan kjøre koden med en avluser (debugger)

Kikke på koden if gratis!= False: if alder < 18: svar = 100 elif alder>= 18: svar = 200 svar = 0 return svar pris(false, 15) Se hvilken if hver elif/else hører sammen med Se på uttrykk og tenke hva det evaluerer til med ulike variabelverdier Følge kjøring med blyant og papir (eller i hodet)

Utforske kjøring av hele programmer Om man skal utforske mange ulike små variasjoner av et program er det fint at kjøring er så kjapt og greit som mulig Gå til editor -> endre kode -> lagre fil (!) -> gå til terminal -> (ev. finne frem fil) -> kjøre riktig fil -> se på utskrift -> bytte til editor for å korrespondere kode og utskrift... Kan spare tid og forbedre fokus med tastatursnarvei.. Mulig å kjøre valgt fil inni atom Settings->Install->"script"->Install Enkelt tastetrykk for å kjøre aktiv fil (inkludert først lagre) Men merk at f.eks. input og grafikk ikke virker inni Atom..

Legge inn print i koden if gratis!= False: if alder < 18: print("linje4"+str(gratis)) svar = 100 elif alder>= 18: print("linje7"+str(gratis)) svar = 200 print("linje10"+str(gratis)+str(alder)) svar = 0 return svar pris(false, 15)

Legge inn assert i koden if gratis!= False: if alder < 18: assert not gratis svar = 100 elif alder>= 18: assert not gratis svar = 200 assert gratis svar = 0 return svar pris(false, 15)

Se på bestemte linjer i tolkeren (interpreter) gratis=false gratis!= False gratis=true gratis!= False I stedet for å kjøre hele kodefiler kan man kjøre én og én linje i python-tolkeren: Fra kommandolinjen skriver man "python3" for å starte tolkeren Man kan da skrive og utføre en enkelt linje av gangen Nyttig for å utforske hvordan ulike varianter av uttrykk helt presist evaluerer

Sjekke hva som returneres med ulike argumenter if gratis!= False: if alder < 18: svar = 100 elif alder>= 18: svar = 200 svar = 0 return svar print( pris(false, 15) ) print( pris(false, 20) ) print( pris(true, 15) ) print( pris(true, 20) ) print( pris(false, 18) ) Legg inn funksjonskall med ulike argumenter som dekker de ulike måtene å påvirke kjøring av funksjonskoden

Avluser (debugger) if gratis!= False: if alder < 18: svar = 100 elif alder>= 18: svar = 200 svar = 0 return svar pris(false, 15) En avluser lar oss kjøre hele programmer og samtidig ha kontroll på enkeltlinjer Svært nyttig for å finne feil i store programsystemer, og potensielt nyttig når man lærer å programmere Men sørg i tilfelle for at det støtter læring av programmering, ikke stjeler fokus fra det.. Enkel variant å eventuelt prøve ut: pythontutor.com

Oppgave def alle_er_innenfor(tallene): for tall in tallene: if tall>10 and tall<20: innenfor = True innenfor = False return innenfor Hvorfor er ikke koden over riktig? (i henhold til intensjonen - sjekke om alle tall i listen er mellom 10 og 20) Hvordan går man best frem for å finne ut om en slik løsning er riktig eller ikke? (og man ikke har kompilator tilgjengelig - som i eksamens-situasjonen) På hvilke måter kan man endre koden til å bli riktig? (forsøk gjerne å finne flere ulike korrekte løsninger) Hva kan man lære fra denne oppgaven? (viser den noen generelle poeng som også vil gjelde andre oppgaver)

Mulige fremgangsmåter Hvorfor koden ikke er riktig Kjører alle_er_innenfor([5,15]) i Pythontutor Hvordan finne ut at en slik løsning ikke er riktig Den greieste måten kan være å tenke på mulige kall.. Endre koden til å bli riktig a) Sette innenfor=true før løkka, ikke inni(!) b) Returnere ved første False Hva kan man lære fra denne oppgaven? Åpen for forslag! Étt poeng: løsninger med løkker krever ofte asymmetri