Input i Python

Med input()-kommandoen kan vi lage programmer som henter informasjon fra brukeren.

Input av tekst

For å forstå input()-kommandoen skal vi gå gjennom den, steg for steg:

Input av tall

Hva forventer du skal skje når du kjører koden over - og hva skjer faktisk?

Når du definerer en variabel med input, tror programmet alltid at det er et ord - så når vi skriver tall + tall vil programmet bare sette de to "ordene" rett etter hverandre, og for eksempel påstå at det dobbelte av 18 er 1818.

Hvis inputen fra brukeren skal være et desimaltall, bør du ha kommandoen float() "rundt" input()-kommandoen, slik at du skriver float(input()). Da blir inputen gjort om til et desimaltall. Hvis inputen fra brukeren skal være et heltall, bør du skrive int(input()). Da blir inputen gjort om til et heltall. 

Som tommelfingerregel kan vi si at vi bruker int() når vi vet at inputen blir et heltall (hvor mange ganger skal vi kaste terningen o.l.), og float() når inputen kan være et desimaltall.

Oppgave: Areal av rektangel

Under ser du et program fra Variabler, der vi regnet ut arealet til et rektangel. Bytt ut spørsmålstegnene ??? slik at programmet ber om en input fra bruker for å finne lengde og bredde i rektanglet, for så å skrive ut en setning med arealet. 

Løsningsforslag

Input-funksjonen og vilkår

Når vi kombinerer input-funksjonen og vilkår kan vi lage program som kan interagere med brukeren og gi en passende utskrift basert på informasjonen det får. Her skal vi se på et par oppgaver med dette.

Oppgave: SuperSplash

SuperSplash er en attraksjon på Tusenfryd, og den har et høydekrav. Hvis du er under 120 cm kan du ikke ta den, men hvis du er over har du lov. 

Bytt ut spørsmålstegnene ??? i koden under og lag et program som bruker input-variabelen hoyde og gir beskjed om du kan ta SuperSplash eller ikke. 

Løsningsforslag

Ekstra utfordring:

Lag en variant av programmet der man også kan ta attraksjonen sammen med en voksen hvis man er over 100 cm.

Oppgave:
Fra eksempeleksamen 2021

Til forskjell fra elevene skal dere prøve å faktisk lage programmet som beskrives i flytskjemaet.

Legg inn noe som passer på Output a og b.

Løsningsforslag:

Oppgave: Gangetest

Programmet under skal be brukeren regne ut og skrive inn produktet av to tilfeldige heltall, og så fortelle om det er riktig eller ikke. Fullfør koden ved å bytte ut spørsmålstegnene, og bruk gjerne flytskjemaet under.

Trykk her for å få mer "skjelettkode"

Løsningsforslag

Input-funksjonen og løkker

Input-funksjonen kan kombineres med løkker på forskjellige måter. For eksempel kan vi bruke en input-funksjon til å bestemme hvor mange ganger ei løkke skal kjøre, eller bruke ei løkke til å be brukeren om flere input av samme slag.

Oppgave: Regne gjennomsnitt av fire tall

Du skal skrive et program som regner gjennomsnitt av 4 tall. Hvert tall skal gis som input, og til slutt skal programmet printe ut gjennomsnittet. Du kan bruke flytskjemaet under for å bygge opp koden.

Løsningsforslag

Ekstra utfordring:

Utvid programmet slik at også antall tall vi skal regne gjennomsnitt av ikke må være 4, men bestemmes av brukeren med en input-funksjon. Du finner løsningsforslag under.

Flere oppgaver og utfordringer

Oppgave: Mangekant

Lag et program som tegner en regulær mangekant, altså en mangekant der alle sidene er like lange, og alle vinklene er like store.

Programmet skal bruke to input-funksjoner for å be brukeren oppgi antall sider og sidelengder, og så tegne figuren.

Trykk her for å få skjelettkode/startkode

Løsningsforslag

Oppgave: Gjette på tall fra sum og produkt

På samling 1 lagde vi programmer i micro:bit og Python som kastet to terninger, og oppga summen og produktet.

Skriv et program som gjør dette, og deretter får brukeren til å gjette på hva de to tallene er. Hvis man gjetter riktig, skal man få beskjed om det. Hvis ikke, skal man få vite hva tallene var.

Pass på at programmet gjør slik at hvis du bytter om på tallene, skal du fortsatt få riktig svar. (F.eks. hvis tallene er 2 og 5, men brukeren gjetter 5 og 2). Du kan se et hint under om ulike måter man kan sjekke for det.

Hint om å skrive if-tester når ulike utfall skal gi samme resultat

Den "enkle" måten å undersøke noe slikt på, er å ha if-tester i if-tester.

Dette vil imidlertid kunne gi mange linjer, så en mer elegant måte vil være å bruke konnektiver, som er bindeord som lar oss undersøke flere kriterier i én linje.

Bindeordet and brukes hvis begge kriteriene må være sanne, og bindordet or brukes når minst ett av kriteriene må være sanne.

Trykk her for å se skjelettkode/startkode

Løsningsforslag 1

Her er et forslag på hvordan denne oppgaven kan løses ved å bruke if-tester i if-tester:

Løsningsforslag 2

Her er et forslag på hvordan denne oppgaven kan løses ved å binde sammen kriterier med bindeordet and:

Vi kan også klare oss med bare fire linjer if-test hvis vi samler alle kriteriene med bindeordet or, men da har if-kriteriet blitt ganske langt (linje 11), og potensielt vanskeligere å tolke.