Programmer som tar imot brukerdata: input() - Naturfag (SF) - NDLA

Hopp til innhold
Verktøy og mal

Programmer som tar imot brukerdata: input()

Et dataprogram må kunne ta imot data fra brukeren, ellers skjer nøyaktig det samme hver gang man prøver å kjøre programmet.

Et kort program med data fra brukeren av programmet

Et program som ikke kan samspille med brukeren av programmet, vil ikke være brukende til så mye. Programmet vil gjøre nøyaktig det samme hver gang en bruker kjører det. Vi ønsker at dataprogrammene skal kunne gi meldinger til oss, ta imot data fra oss, gjøre noe med disse dataene og gi melding tilbake til oss om hva resultatet ble.

Vi ønsker nå å lage et program som kan ta imot alderen til brukeren fra tastaturet. Da må programmet gi melding til brukeren med tekst på skjermen at hen skal skrive inn alderen sin, og vi må få et sted der brukeren kan skrive inn alderen fra tastaturet. Deretter skal programmet skrive ut på skjermen "Du er 16 år." (dersom brukeren skrev inn at alderen var 16).

Oppgave – algoritme

Skriv algoritmen – instruksjonene – med ord for hva programmet må gjøre.

Løsningsforslag

Algoritmen kan se slik ut:

  • Skriv til skjermen "Skriv inn alderen din:".
  • Ta imot den alderen brukeren skriver inn, og sett den lik variabelen alder.
  • Skriv til skjermen "Alderen din er <alder> år.".

Notasjonen "<alder>" betyr at her skal utskriften vise det som brukeren skrev inn, som ligger lagret i variabelen alder.

Programmet nedenfor, som starter med avspillingsknappen , fungerer etter algoritmen ovenfor. Programmet blir kjørt i feltet til høyre for programkoden, så det er der vi skal skrive inn alderen vår. Husk å trykke på entertasten på tastaturet når du er ferdig med å skrive inn alderen. (NB: Det kan ta litt tid fra du trykker på avspillingsknappen til programmet blir kjørt.)

Oppgave – koding

Prøv å skrive en forklaring på hva programmet gjør på hver av de to linjene.

Forslag til forklaring

På linje 1 blir brukeren av programmet bedt om å skrive inn alderen sin. Det som brukeren skriver inn, blir så lagret i variabelen alder. Det er funksjonen input() som sørger både for å skrive teksten "Skriv inn alderen din:" på skjermen og å gi brukeren en skrivemarkør slik at det går an å skrive noe til programmet (se lenger ned på siden).

På linje 2 blir det skrevet ut til skjermen en kombinasjon av tekststrengen "Du er", innholdet av variabelen alder og tekststrengen "år.". Til sammen blir dette en fullstendig setning. Det er funksjonen print() som sørger for at setningen blir skrevet til skjermen.

Et litt mer avansert eksempel

I Python er det slik at det som blir tatt imot fra brukeren med funksjonen input(), automatisk blir oppfattet som tekst. Dette gjelder selv om brukeren skriver inn tall. For at det skal kunne gå an å regne med tal som brukeren skriver inn, må resultatet av input()-funksjonen konverteres. Dette gjør vi ved å sette resultatet inn i funksjonen float(). Vi kommer tilbake til det lengre ned på siden.

Vi ønsker nå å lage et program som regner ut arealet av et rektangel der brukeren skal skrive inn både lengden og bredden til rektangelet. Programmet skal gi en tekst som forklarer brukeren hva som skal gjøres. Til slutt skal programmet skrive ut hva arealet av rektangelet blir.

Oppgave – algoritme

Skriv en algoritme for et slikt program.

Løsningsforslag

Algoritmen kan se slik ut:

  • Skriv til skjermen "Dette programmet regner ut arealet av et rektangel der brukeren av programmet skriver inn lengde og bredde.".
  • Skriv til skjermen "Skriv inn lengden på rektangelet:".
  • Ta imot den lengden som blir skrevet inn, og sett resultatet lik variabelen lngd.
  • Skriv til skjermen "Skriv inn bredden på rektangelet:".
  • Ta imot den bredden som blir skrevet inn, og sett resultatet lik variabelen brd.
  • Konverter den innskrevne lengden i variabelen lngd til et ekte tall, og sett resultatet lik variabelen lengde.
  • Konverter den innskrevne bredden i variabelen brd til et ekte tall, og sett resultatet lik variabelen bredde.
  • Regn ut arealet ved å multiplisere variablene lengde og bredde, og sett resultatet lik variabelen areal.
  • Skriv til skjermen "Arealet av rektangelet er <areal>".

Kommentarer:

Vi har tatt med i algoritmen hvordan variablene blir brukt.

Notasjonen "<areal>" betyr at her skal innholdet av variabelen areal settes inn.

Til vanlig vil vi ikke ta med i algoritmer at vi konverterer tall skrevet inn fra tastaturet siden det må vi alltid gjøre når vi skal bruke dem i utregninger.

Oppgave – koding

Nedenfor ser du koden til programmet. Skriv en forklaring på hva programmet gjør på hver linje uten å kjøre det først. Du kan se i tekstboksen "Pythonkode å lære seg" for hjelp med dette.

Python
1print("Dette programmet regner ut arealet av et rektangel" 
2" der brukeren av programmet skriver inn lengde og bredde.")
3lngd = input("Skriv inn lengden på rektangelet:")
4brd = input("Skriv inn bredden på rektangelet:")
5lengde = float(lngd)
6bredde = float(brd)
7areal = lengde*bredde
8print(f"Arealet av rektangelet er {areal}.")
9
10#Her har vi delt opp den første print()-kommandoen 
11#ved å sette inn ekstra hermetegn.
Forklaring

På første og andre linje blir det skrevet ut tekst til skjermen om hva programmet gjør.

På tredje linje blir vi først bedt om å skrive inn lengden på rektangelet. Det vi skriver inn, blir lagret i variabelen lngd.

På fjerde linje blir vi bedt om å skrive inn bredden på rektangelet. Det vi skriver inn, blir lagret i variabelen brd.

På femte linje blir innholdet av variabelen lngd gjort om til et desimaltall som blir satt lik variabelen lengde. Tilsvarende skjer på sjette linje. Det er funksjonen float() som sørger for dette, se lengre ned.

På sjuende linje blir innholdet av variabelen lengde multiplisert med innholdet av variabelen bredde, og resultatet blir satt lik variabelen areal.

På åttende linje blir det skrevet ut til skjermen en kombinasjon av tekststrengen "Arealet av rektangelet er", innholdet av variabelen areal og tekststrengen ".".

Nedenfor kan du prøve å kjøre programmet i eksempelet ved å skrive det inn, eller du kan kopiere det og lime det inn.

Pythonkode å lære seg

Vis innhold

input()

Funksjonen skriver først til skjermen det som står i parentesene (akkurat som funksjonen print()) og gir brukeren et skrivemerke til å skrive inn fra tastaturet. Funksjonen returnerer det som blir skrevet inn etter at brukeren har trykket "enter".

For å få tak i det som blir skrevet inn, blir funksjonen vanligvis satt lik en variabel.

Eksempel:

bredde = input("Skriv inn bredden på rektangelet:")

Denne kodelinja gjør følgende:

  • Variabelen bredde blir opprettet.
  • Programmet skriver til skjermen tekststrengen "Skriv inn bredden på rektangelet:", og det blir mulig å skrive inn tekst fra tastaturet.
  • Variabelen bredde blir satt lik det som brukeren skriver inn.

NB: Det som blir skrevet inn, vil alltid være en tekststreng selv om det brukeren skriver inn er tall.

float()

Funksjonen gjør om det som blir satt inn i parentesene til et desimaltall – dersom det i parentesene kan oppfattes som et tall.

Eksempel:

tall = float("23.2")

Variabelen tall får verdien 23.2 og blir en flyttallsvariabel, altså en variabel som kan lagre desimaltall.

int()

Funksjonen gjør om det som blir satt inn i parentesene til et helt tall – dersom det som står i parentesene kan oppfattes som et helt tall.

Eksempel:

tall = int("23")

Variabelen tall får verdien 23 og blir en heltallsvariabel, altså en variabel som kan lagre heltall.

str()

Funksjonen gjør om det som blir satt inn i parentesene til en tekststreng.

Eksempel:

tekst = str(tall)

Variabelen tekst får verdien "23" (dersom tall har verdien 23) og blir en strengvariabel. Det går ikke an å gjøre utregninger med variabelen tekst.

Aktiviteter

a) Koding

Vi har slått fast at tall skrevet inn fra tastaturet, må konverteres for at de skal kunne brukes til utregninger i programmet. Prøv å kjøre programmet uten femte og sjette kodelinje (slett dem fra kodevinduet). Hva skjer?

Kommentar 1

Først vil programmet krasje fordi variablene lengde og bredde ikke lenger er definert. Hva betyr feilmeldingen som kommer? Skriv om kodelinja der variabelen areal blir definert med rette variabelnavn slik at linja gir mening.

Dersom dette blir gjort, vil programmet fremdeles krasje. Hva tyder feilmeldingen på nå? Hvorfor trenger vi de to linjene med funksjonen float()?

Kommentar 2

Se det siste avsnittet i kommentar 1. Vi trenger de to linjene der innholdet som brukeren skriver inn blir konvertert fordi vi skal gjøre utregninger med innholdet. Da må det være tall og ikke en tekststreng. Husk at alt innhold som programmet tar imot med funksjonen input(), er av typen tekststreng og kan derfor ikke brukes i utregninger uten videre.

b) Koding

Hva skjer dersom brukeren skriver inn bredden som "seks" med bokstaver i stedet for å skrive "6"? Prøv. Finn ut hva eventuelle feilmeldinger betyr.

c) Koding

Finn ut hvordan du slår sammen tredje linje og femte linje til éi kodelinje. Gjør det samme med fjerde linje og sjette linje. Sjekk at programmet fungerer som det skal etter denne omskrivingen.

Løsningsforslag

Siden vi på tredje linje har at lngd = input("Skriv inn lengden på rektangelet:") og på femte linje at lengde = float(lngd), erstatter vi lngd i femte linje med høyresiden av likhetstegnet i tredje linje. Vi får da funksjonen input() inni funksjonen float() – og det går helt fint. Den tredje linja i programmet kan da se slik ut:

lngd = float(input("Skriv inn lengden på rektangelet:"))

Dette er egentlig litt den samme tankegangen som når vi bruker innsettingsmetoden til å løse to ligninger med to ukjente – der vi har fått den ene likningen over på formen  x=  (eller y= ) og setter uttrykket for x (eller y) inn i den andre likningen.

d) Koding

I det øverste programeksempelet på siden blir det ikke gjort noen konvertering av tallet (alderen) som brukeren skriver inn. Hvorfor ikke?

Forklaring

I det øverste programeksempelet blir ikke alderen brukt til annet enn utskrift. Det blir ikke regnet med dette tallet. Dersom vi for eksempel ville at programmet skulle finne ut hva den dobbelte alderen er, måtte vi konvertert med float() eller int() det tallet brukeren skriver inn.

Relatert innhold

Skrevet av Bjarne Skurdal.
Sist faglig oppdatert 07.06.2022