INF uke 2. Inputt, beslutninger, kontrollflyt og prosedyrer

Like dokumenter
IN uke 2. Presis forståelse av programmering

IN uke 2. Presis forståelse av programmering

Feilmeldinger, brukerinput og kontrollflyt

Feilmeldinger, kontrollflyt og void-metoder

Feilmeldinger, kontrollflyt og void-metoder

IN uke 1. Komme i gang med programmering

IN uke 1. Komme i gang med programmering

Løse reelle problemer

Hvordan løse problemer med programmering?

IN uke 1. Komme i gang med programmering

Input og beslutninger

Løse reelle problemer

Et lite oppdrag i bakgrunnen

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

Variabler, input og beslutninger

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

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

Oppgaver uke 1: Løsningsforslag

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

Løse reelle problemer

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

INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september

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

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

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

Løse reelle problemer

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

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

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

Oppsummering fra sist

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Øvingsforelesning 1 Python (TDT4110)

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.

TDT4110 IT Grunnkurs Høst 2015

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

Øvingsforelesning 5 Python (TDT4110)

Øvingsforelesning 5 Python (TDT4110)

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

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

TDT4110 IT Grunnkurs Høst 2016

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.

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

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 14.

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

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

TDT4110 IT Grunnkurs Høst 2016

Løsningsforslag ukeoppg. 2: 31. aug - 6. sep (INF Høst 2011)

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

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

INF109 - Uke 1b

Forelesning inf Java 5

Forelesning inf Java 5

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

Del 3: Evaluere uttrykk

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

UNIVERSITETET I OSLO

INF1000 : Forelesning 1 (del 2)

Repetisjon Novice Videregående Python PDF

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Øvingsforelesning i Python (TDT4110)

Metoder med parametre, løkker og arrayer

Objektorientert programmering i Python

INF Uke 10. Ukesoppgaver oktober 2012

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

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

INF1010 Sortering. Marit Nybakken 1. mars 2004

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

Praktisk informasjon. Repetisjon: While-løkker. I dag. INF1000 (Uke 5) Mer om løkker, arrayer og metoder. Oblig 2 er lagt ut

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

Øvingsforelesning i Python (TDT4110)

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

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

Hjemmeeksamen 2 i INF3110/4110

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

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.

INF109 - Uke 1a

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

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Betinget eksekvering og logiske tester i shell

Praktisk informasjon. I dag. Repetisjon: While-løkker. INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Dagens tema: 12 gode råd for en kompilatorskriver

Debugging. Tore Berg Hansen, TISIP

Håndtere mange verdier

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

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

INF1000 Eksamen 2014 (modifisert)

Programmering Høst 2017

Transkript:

INF1001 - uke 2 Inputt, beslutninger, kontrollflyt og prosedyrer

Repetisjon fra forrige uke Lese inn fra tastaturet Beslutninger Kontrollflyt Prosedyrer Outline:

Repetisjon fra forrige uke Lese inn fra tastaturet Beslutninger Kontrollflyt Prosedyrer Outline:

Repetisjon fra forrige uke Et program består av flere programsetninger (linjer) som kjøres etter hverandre: print("hei") print("inf1001") Innad på en linje har man ofte et uttrykk - noe som kan evaluere til en verdi: 2+3 En verdi er alltid av en bestemt type: int, float, str...

Repetisjon fra forrige uke En variabel kan holde på en verdi for senere bruk Blir tilordnet en verdi: tall = 5 Verdien kan endres: tall = 7 Verdien kan senere brukes: print(tall) Kan være på begge sider av likhetstegnet: tall=tall+2 Man kan dobbeltsjekke antagelser med assert: tall=(4+1)*2 assert tall=10

Repetisjon fra forrige uke Vanligvis skriver man et program i en editor, og kjører etterpå hele programmet I Python-tolken kan man kjøre enkeltlinjer, nyttig for å få presis forståelse

Repetisjon fra forrige uke Lese inn fra tastaturet Beslutninger Kontrollflyt Prosedyrer Outline:

Slipp brukeren til! De fleste program tar en eller annen jevnlig inputt fra brukeren Dette gir også mye mer dynamikk i programmene enn det vi har sett på til nå Kommunisere med brukeren av et program: Biblioteksfunksjonen print gir output til bruker Biblioteksfunksjonen input henter inputt fra bruker [innlesing.py]

Gi brukeren beskjed om å skrive inn et svar Brukeren må vite at han/hun skal skrive noe: print("hva heter du? ") navn = input() input kan skrive beskjed før den venter på svar: navn = input("hva heter du? ")

Hvordan input egentlig virker 1: input fryser programmet inntil brukeren skriver et svar 2: deretter evaluerer input til en verdi av typen tekst (det brukeren skrev inn) Verdien (som brukeren skrev inn) tilordnes til variabelen navn

Innhente tall fra brukeren Man ønsker ofte at bruker skal oppgi tall input gir alltid en verdi av type tekst Biblioteksfunksjonen int konverterer en tekst til et tall (om mulig) tall = int("5") Test det gjerne ut: assert "5"+"5" == "55" assert int("5") + int("5") == 10

Innhente tall fra brukeren Om teksten ikke er tall får man feilmelding Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10:'hei' Innhente tall: Be brukeren skrive et tall Bruke input til å hente det i form av tekst Bruke int for å konvertere til heltall (integer) Tilsvarende bruke float for å få flyttall (float) (Man kan også konvertere tall til tekst med str) [innlesing_tall.py]

Repetisjon fra forrige uke Lese inn fra tastaturet Beslutninger Kontrollflyt Prosedyrer Outline:

Ikke bare følge strømmen For det vi har sett på til nå, har programmet alltid fulgt én bestemt sekvens av instruksjoner Vi kan lese ulike startverdier fra tastatur og dermed få ulike resultat, men alltid basert på de samme operasjonene Vi trenger mer variasjon! Det blir mye artigere å programmere dersom hvilke operasjoner som utføres også kan avhenge av verdier man regner ut

Et konkret problem som krever beslutninger Problemstilling: Vi ønsker å lage et program som spør brukeren om alder. Dersom brukeren er over 6 år, skal den skrive "Velkommen til mitt program". Dersom brukeren er 6 år eller mindre skal den skrive "Gå heller ut og lek i skogen". Vi trenger altså to ulike print Vi må imidlertid sørge for at kun én print blir kjørt, hvor hvilken som blir kjørt avhenger av innlest verdi for alder

En uferdig løsning (mangler beslutning) innlest = input("hvor gammel er du? ") alder = int(innlest) print("velkommen til mitt program") print("gå heller ut og lek i skogen")

Beslutninger i et program: if Syntaks (skrivemåte): if condition: Statement1 Statement2.. NB! Korrekt innrykk er helt essensielt! Eksempel: if alder>6: print("velkommen") {beslutning.py}

En praktisk kortform: if-else Syntaks: if condition: Statement1 Statement2 else: Statement1 Statement2 {beslutning2.py}

Prøv en variant selv! Modifisert problemstilling: Mindre enn 6: skriv "Lek i skogen" Mindre enn 3: skriv "Lek i lekegrinda" Skal uansett skrive ut maksimalt én setning Hvordan vil du nå skrive koden? Prøv selv med blyant og papir! (3 minutt) Etterpå diskuter med nabo (3 minutt)

Hvorfor blir følgende løsning feil? if alder<3: print("lek i lekegrinda") if alder<6: print("lek i skogen")

Løsning med kombinert uttrykk if alder<3: print("lek i lekegrinda") if alder<6 and alder>3: print("lek i skogen")

Løsning med else-if if alder<3: print("lek i lekegrinda") else: if alder<6: print("lek i skogen")

Løsning med elif if alder<3: print("lek i lekegrinda") elif alder<6: print("lek i skogen")

Og hvorfor går ikke den motsatte elif? if alder<6: print("lek i skogen") elif alder<3: print("lek i lekegrinda")

Løsning med nøsting if alder<6: if alder<3: print("lek i lekegrinda") else: print("lek i skogen")

Hva er en condition? "Just one condition you go to sleep right now: That you don t touch my daughter and in the morning, milk the cow if condition: Statements condition er et boolsk uttrykk (boolean expression) Noe som er sant eller ikke sant (True eller False) Vi så det allerede i første uke: print(5>4) print(4>5) Vi så nettopp et mer komplekst eksempel: if alder<6 and alder>3:

Boolske uttrykk (Sannhentsverdier) Grunnleggende operasjoner: < > ==!= >= <= Kan brukes på tall (5>3) og på tekst ("hei" == "hei") Slike uttrykk evaluerer til en verdi av typen bool Typen bool har kun to mulige verdier: True, False Kan kombinere sannhetsverdier: and, or, not 5>3 and 8<4 1>2 or 99>11 not 3>5

Boolske uttrykk (forts) Utrykk kan naturligvis inneholde ulike variabler if alder>80 or dager_til_termin<10: print("ta mitt sete!") Og så kan utrykkene være nøstede if (dagertiltermin>180 and tidspunkt=="morgen") or (alder<6 and antallkilometerbiltur>30): print("du er sikkert kvalm!")

Formell definisjon av if if boolean expression: Statements1 else: Statements2 Siden et boolsk uttrykk (boolean expression) kun kan ha to mulige verdier: Om uttrykket har verdien True kjøres Statements1 Om uttrykket har verdien False kjøres Statements2

Boolske variable Boolske verdier kan holdes på av variabler (på samme måte som for tall og tekst) En boolsk variabel kan brukes alle steder hvor man kan bruke en boolsk verdi betalerhalvpris = alder<18 or alder>66 if betalerhalvpris:...

En liten test på problemløsning Skriv (med blyant og papir) en kode som finner den minste av to verdier: innlest1 = input("skriv tall 1: ") tall1 = int(innlest1) innlest2 = input("skriv tall 1: ") tall2 = int(innlest2) #skriv kode her som tilordner den minste #av verdiene tall1 og tall2 til variabelen minst assert minst <= tall1 assert minst <= tall2 print(minst) {Mulig løsning: minst.py}

Repetisjon fra forrige uke Lese inn fra tastaturet Beslutninger Kontrollflyt Prosedyrer Outline:

Hvordan et program presist utføres Hvordan (i hvilken rekkefølge) utføres operasjoner helt detaljert på én enkelt linje Hvordan flyter (helt presist) et program fra linje til linje

Hva skjer innad på en alder = 6 veldig rett frem.. linje? alder = alder + 3

Hva skjer innad på en alder = 6 veldig rett frem.. linje? alder = alder + 3 Gjør ferdig høyresida for likhetstegnet først

Hva skjer innad på en alder = 6 veldig rett frem.. 6 linje? alder = alder + 3 Gjør ferdig høyresida for likhetstegnet først Alle verdier er på høyresida slik de var før denne linja (alder er altså 6)

Hva skjer innad på en alder = 6 veldig rett frem.. 6 9 alder = alder + 3 linje? Gjør ferdig høyresida for likhetstegnet først Alle verdier er på høyresida slik de var før denne linja (alder er altså 6) Regner ut 6+3 og får 9

Hva skjer innad på en alder = 6 veldig rett frem.. 6 9 alder = alder + 3 linje? Gjør ferdig høyresida for likhetstegnet først Alle verdier er på høyresida slik de var før denne linja (alder er altså 6) Regner ut 6+3 og får 9 Setter til slutt verdien 9 inn i alder

Videre om evaluering av uttrykk Visse operasjoner gjøres alltid før andre Python gjør f.eks.uansett ganging før plussing Følgende gir altså samme resultat 33: 15 33 alder = 5 * 3 + 18

Videre om evaluering av uttrykk Visse operasjoner gjøres alltid før andre Python gjør f.eks.uansett ganging før plussing Følgende gir altså samme resultat 33: 15 33 alder = 5 * 3 + 18 alder = 18 + 5 * 3

Videre om evaluering av uttrykk Visse operasjoner gjøres alltid før andre Python gjør f.eks.uansett ganging før plussing Følgende gir altså samme resultat 33: 15 33 alder = 5 * 3 + 18 alder = 18 + 5 * 3 Blir tydeligere med paranteser, bruk det! alder = (5 * 3) + 18

Videre om evaluering av uttrykk (forts.) For noen formål må man uansett ha paranteser 5 15 33 alder = (3+2) * 3 + 18

Videre om evaluering av uttrykk (forts.) For noen formål må man uansett ha paranteser 5 15 33 alder = (3+2) * 3 + 18 Og for å gjøre det samme tydeligere - nøsting av paranteser er definitivt lovlig: alder = ((3+2) * 3) + 18

Videre om evaluering av uttrykk (forts.) For noen formål må man uansett ha paranteser 5 15 33 alder = (3+2) * 3 + 18 Og for å gjøre det samme tydeligere - nøsting av paranteser er definitivt lovlig: alder = ((3+2) * 3) + 18 I praksis er det ikke tall man putter inn på slik måte, men variabler: alder = ((bachelor+master) * antallfagfelt) + barndom

En liten oppgave om variable og uttrykk (fra eksamen 2014)

Hvordan et program flyter fra linje til linje Dette er temmelig enkelt for det vi har lært frem til nå (endrer seg om en halvtime..) Hovedregel: Gjør ferdig en linje, deretter gå til linjen nedenfor Ved en if-setning Dersom det som testes er sant: gå til første linje i blokken ellers: hopp over blokken

Hvordan et program flyter fra linje til linje Ved en if-else-setning Dersom det som testes er sant: gå til første linje i blokken etter if ellers: gå til første linje i blokken etter else

Etterlign kjøring, med blyant og papir Gjør manuelt det samme som datamaskinen ville gjort, linje for linje Kan gjøres i hodet, men enklere på papir (print ut koden og bruk blyant) Vær presis - her er hver detalj viktig

Følge et program, linje for linje int lengde=7 int bredde=4 int omkrets if lengde==bredde: omkrets = 4*lengde else: omkrets = (2*lengde) + (2*bredde) print("omkrets: " + omkrets)

Følge et program, linje for linje int lengde=7 int bredde=4 int omkrets if 7 ==bredde: omkrets = 4*lengde else: omkrets = (2*lengde) + (2*bredde) print("omkrets: " + omkrets)

Følge et program, linje for linje int lengde=7 int bredde=4 int omkrets if 7 == 4 : omkrets = 4*lengde else: omkrets = (2*lengde) + (2*bredde) print("omkrets: " + omkrets)

Følge et program, linje for linje int lengde=7 int bredde=4 int omkrets if 7 == 4 : omkrets = 4*lengde else: omkrets = (2* 7 ) + (2*bredde) print("omkrets: " + omkrets)

Følge et program, linje for linje int lengde=7 int bredde=4 int omkrets if 7 == 4 : omkrets = 4*lengde else: omkrets = ( 14 ) + (2*bredde) print("omkrets: " + omkrets)

Følge et program, linje for linje int lengde=7 int bredde=4 int omkrets if 7 == 4 : omkrets = 4*lengde else: omkrets = ( 14 ) + (2* 4 ) print("omkrets: " + omkrets)

Følge et program, linje for linje int lengde=7 int bredde=4 int omkrets if 7 == 4 : omkrets = 4*lengde else: omkrets = ( 14 ) + ( 8 ) print("omkrets: " + omkrets)

Følge et program, linje for linje int lengde=7 int bredde=4 int omkrets if 7 == 4 : omkrets = 4*lengde else: omkrets = ( 22 ) print("omkrets: " + omkrets)

Følge et program, linje for linje int lengde=7 int bredde=4 int omkrets if 7 == 4 : omkrets = 4*lengde else: omkrets = ( 22 ) print("omkrets: " + 22 )

Repetisjon fra forrige uke Lese inn fra tastaturet Beslutninger Kontrollflyt Prosedyrer Outline:

Vi trenger mer struktur! Vi har frem til nå skrevet programmer linje for linje nedover i en fil Realistiske program er imidlertid ofte tusener eller millioner av linjer! Ingen kan ha oversikt over en flat liste på mange tusen (eller millioner) av linjer Et første nivå av strukturering er subrutine: en navngitt blokk med kodelinjer, som kan kalles og tilpasses

Ulike versjoner av subrutiner Subrutiner kommer i ulike versjoner, av gradvis økende kompleksitet Vi vil introdusere de involverte aspektene stegvis I dag: Prosedyre - uten parametre og returverdi Om to uker: Prosedyre - med parametre Om to uker: Funksjon - med returverdi Litt senere i høst: Instans-metode (OO)

Hvordan kan en prosedyre se ut def mittprosedyrenavn(): kodelinje1 kodelinje2... For å kjøre alle kodelinjene i prosedyren ("kalle prosedyren"): mittprosedyrenavn()

Eksempel på prosedyre: kodeblokk public class u2voidmetodeutenparameter1{ print("jeg sier dette bare en gang!") print("da var jeg ferdig!") public static void main(string[] args) { } }

Eksempel på prosedyre: navn public class u2voidmetodeutenparameter1{ def gibeskjed(): print("jeg sier dette bare en gang!") print("da var jeg ferdig!") public static void main(string[] args) { } }

Eksempel på prosedyre: kall public class u2voidmetodeutenparameter1{ def gibeskjed(): print("jeg sier dette bare en gang!") print("da var jeg ferdig!") } public static void main(string[] args) { gibeskjed() }

Kontrollflyt og metoder def gibeskjed() print("jeg sier dette bare en gang!") def kallvidere() print("her kommer det") gibeskjed() print("og en gang til") gibeskjed() print("det var ikke mye") print("hei, jeg vil si deg noe") kallvidere() print("fikk du det likevel med deg?")

Kontrollflyt og metoder def gibeskjed() print("jeg sier dette bare en gang!") def kallvidere() print("her kommer det") gibeskjed() print("og en gang til") gibeskjed() print("det var ikke mye") print("hei, jeg vil si deg noe") kallvidere() print("fikk du det likevel med deg?")

Kontrollflyt og metoder def gibeskjed() print("jeg sier dette bare en gang!") def kallvidere() print("her kommer det") gibeskjed() print("og en gang til") gibeskjed() print("det var ikke mye") print("hei, jeg vil si deg noe") kallvidere() print("fikk du det likevel med deg?")

Oppsummering Programmene blir ofte mer dynamiske når man leser inputt fra brukeren Beslutninger (if) lar programmene utføre ulike operasjoner avhengig av verdien til en variabel Programkode kjøres på en presist definert måte innad i en linje, og fra linje til linje Å leke debugger med blyant og papir er nyttig! Subrutiner (prosedyrer) strukturerer kode og unngår redundans

Skriv (med blyant og papir) en kode som bytter om verdiene mellom to variable Prøv/tenk selv i 3 minutt. Skriv bare linjene som trengs der det nå er rød kommentar. tall1 = 4 tall2 = 9 #skriv koden som trengs her for å bytte om verdiene i #variablene tall1 og tall2, uansett hva verdiene er tall3 = tall1 tall1 = tall2 tall2 = tall3 assert tall1==9 assert tall2==4 print("alt gikk bra!")