Program som tek imot brukardata: input() - Naturfag (SF) - NDLAHopp til innhald
Verktøy og mal
Program som tek imot brukardata: input()
Eit dataprogram må kunne ta imot data frå brukaren, elles skjer nøyaktig det same kvar gong ein prøver å køyre programmet.
Eit kort program med data frå brukaren av programmet
Eit program som ikkje kan samspele med brukaren av programmet, vil ikkje vere brukande til så mykje. Programmet vil gjere nøyaktig det same kvar gong ein brukar køyrer det. Vi ønskjer at dataprogramma skal kunne gi meldingar til oss, ta imot data frå oss, gjere noko med desse dataa og gi melding attende til oss om kva resultatet vart.
Vi ønskjer no å lage eit program som kan ta imot alderen til brukaren frå tastaturet. Då må programmet gi melding til brukaren med tekst på skjermen at hen skal skrive inn alderen sin, og vi må få ein plass der brukaren kan skrive inn alderen frå tastaturet. Deretter skal programmet skrive ut på skjermen "Du er 16 år." (dersom brukaren skreiv inn at alderen var 16).
Oppgåve – algoritme
Skriv algoritmen – instruksjonane – med ord for kva programmet må gjere.
Løysingsforslag
Algoritmen kan sjå slik ut:
Skriv til skjermen "Skriv inn alderen din:".
Ta imot den alderen brukaren skriv inn, og set han lik variabelen alder.
Skriv til skjermen "Alderen din er <alder> år.".
Notasjonen "<alder>" betyr at her skal utskrifta vise det som brukaren skreiv inn, som ligg lagra i variabelen alder.
Programmet nedanfor, som startar med avspelingsknappen , fungerer etter algoritmen ovanfor. Programmet blir køyrt i feltet til høgre for programkoden, så det er der vi skal skrive inn alderen vår. Hugs å trykkje på entertasten på tastaturet når du er ferdig med å skrive inn alderen. (NB: Det kan ta litt tid frå du trykkjer på avspelingsknappen til programmet blir køyrt.)
Oppgåve – koding
Prøv å skrive ei forklaring på kva programmet gjer på kvar av dei to linjene.
Forslag til forklaring
På linje 1 blir brukaren av programmet bedd om å skrive inn alderen sin. Det som brukaren skriv inn, blir så lagra i variabelen alder. Det er funksjonen input() som sørgjer både for å skrive teksten "Skriv inn alderen din:" på skjermen og å gi brukaren ein skrivemarkør slik at det går an å skrive noko til programmet (sjå lengre ned på sida).
På linje 2 blir det skrive ut til skjermen ein kombinasjon av tekststrengen "Du er", innhaldet av variabelen alder og tekststrengen "år.". Til saman blir dette ei fullstendig setning. Det er funksjonen print() som sørgjer for at setninga blir skriven til skjermen.
Eit litt meir avansert eksempel
I Python er det slik at det som blir teke imot frå brukaren med funksjonen input(), automatisk blir oppfatta som tekst. Dette gjeld sjølv om brukaren skriv inn tal. For at det skal kunne gå an å rekne med tal som brukaren skriv inn, må resultatet av input()-funksjonen konverterast. Dette gjer vi ved å setje resultatet inn i funksjonen float(). Vi kjem attende til det lengre ned på sida.
Vi ønskjer no å lage eit program som reknar ut arealet av eit rektangel der brukaren skal skrive inn både lengda og breidda til rektangelet. Programmet skal gi ein tekst som forklarer brukaren kva som skal gjerast. Til slutt skal programmet skrive ut kva arealet av rektangelet blir.
Oppgåve – algoritme
Skriv ein algoritme for eit slikt program.
Løysingsforslag
Algoritmen kan sjå slik ut:
Skriv til skjermen "Dette programmet reknar ut arealet av eit rektangel der brukaren av programmet skriv inn lengde og breidde.".
Skriv til skjermen "Skriv inn lengda på rektangelet:".
Ta imot den lengda som blir skriven inn, og set resultatet lik variabelen lngd.
Skriv til skjermen "Skriv inn breidda på rektangelet:".
Ta imot den breidda som blir skriven inn, og set resultatet lik variabelen brd.
Konverter den innskrivne lengda i variabelen lngd til eit ekte tal, og set resultatet lik variabelen lengde.
Konverter den innskrivne breidda i variabelen brd til eit ekte tal, og set resultatet lik variabelen breidde.
Rekn ut arealet ved å multiplisere variablane lengde og breidde, og set resultatet lik variabelen areal.
Skriv til skjermen "Arealet av rektangelet er <areal>".
Kommentarar:
Vi har teke med i algoritmen korleis variablane blir brukte.
Notasjonen "<areal>" betyr at her skal innhaldet av variabelen areal setjast inn.
Til vanleg vil vi ikkje ta med i algoritmar at vi konverterer tal skrivne inn frå tastaturet sidan det må vi alltid gjere når vi skal bruke dei i utrekningar.
Oppgåve – koding
Nedanfor ser du koden til programmet. Skriv ei forklaring på kva programmet gjer på kvar linje utan å køyre det først. Du kan sjå i tekstboksen "Pythonkode å lære seg" for hjelp med dette.
Forklaring
På første og andre linje blir det skrive ut tekst til skjermen om kva programmet gjer.
På tredje linje blir vi først bedne om å skrive inn lengda på rektangelet. Det vi skriv inn, blir lagra i variabelen lngd.
På fjerde linje blir vi bedne om å skrive inn breidda på rektangelet. Det vi skriv inn, blir lagra i variabelen brd.
På femte linje blir innhaldet av variabelen lngd gjort om til eit desimaltal som blir sett lik variabelen lengde. Tilsvarande skjer på sjette linje. Det er funksjonen float() som sørgjer for dette, sjå lengre ned.
På sjuande linje blir innhaldet av variabelen lengde multiplisert med innhaldet av variabelen breidde, og resultatet blir sett lik variabelen areal.
På åttande linje blir det skrive ut til skjermen ein kombinasjon av tekststrengen "Arealet av rektangelet er", innhaldet av variabelen areal, og tekststrengen ".".
Nedanfor kan du prøve å køyre programmet i eksempelet ved å skrive det inn, eller du kan kopiere det og lime det inn.
Pythonkode å lære seg
Vis innhald
input()
Funksjonen skriv først til skjermen det som står i parentesane (akkurat som funksjonen print()) og gir brukaren eit skrivemerke til å skrive inn frå tastaturet. Funksjonen returnerer det som blir skrive inn etter at brukaren har trykka "enter".
For å få tak i det som blir skrive inn, blir funksjonen vanlegvis sett lik ein variabel.
Eksempel:
breidde = input("Skriv inn breidda på rektangelet:")
Denne kodelinja gjer følgjande:
Variabelen breidde blir oppretta.
Programmet skriv til skjermen tekststrengen "Skriv inn breidda på rektangelet:", og det blir mogleg å skrive inn tekst frå tastaturet.
Variabelen breidde blir sett lik det som brukaren skriv inn.
NB: Det som blir skrive inn, vil alltid vere ein tekststreng sjølv om det brukaren skriv inn er tal.
float()
Funksjonen gjer om det som blir sett inn i parentesane til eit desimaltal – dersom det i parentesane kan oppfattast som eit tal.
Eksempel:
tal = float("23.2")
Variabelen tal får verdien 23.2 og blir ein flyttalsvariabel, altså ein variabel som kan lagre desimaltal.
int()
Funksjonen gjer om det som blir sett inn i parentesane til eit heilt tal – dersom det som står i parentesane kan oppfattast som eit heilt tal.
Eksempel:
tal = int("23")
Variabelen tal får verdien 23 og blir ein heiltalsvariabel, altså ein variabel som kan lagre heiltal.
str()
Funksjonen gjer om det som blir sett inn i parentesane til ein tekststreng.
Eksempel:
tekst = str(tal)
Variabelen tekst får verdien "23" (dersom tal har verdien 23) og blir ein strengvariabel. Det går ikkje an å gjere utrekningar med variabelen tekst.
Aktivitetar
a) Koding
Vi har slått fast at tal skrivne inn frå tastaturet, må konverterast for at dei skal kunne brukast til utrekningar i programmet. Prøv å køyre programmet utan femte og sjette kodelinje (slett dei frå kodevindauget). Kva skjer?
Kommentar 1
Først vil programmet krasje fordi variablane lengde og breidde ikkje lenger er definerte. Kva betyr feilmeldinga som kjem? Skriv om kodelinja der variabelen areal blir definert med rette variabelnamn slik at linja gir meining.
Dersom dette blir gjort, vil programmet framleis krasje. Kva tyder feilmeildinga på no? Kvifor treng vi dei to linjene med funksjonen float()?
Kommentar 2
Sjå det siste avsnittet i kommentar 1. Vi treng dei to linjene der innhaldet som brukaren skriv inn blir konvertert fordi vi skal gjere utrekningar med innhaldet. Då må det vere tal og ikkje ein tekststreng. Hugs at alt innhald som programmet tek imot med funksjonen input(), er av typen tekststreng og kan derfor ikkje brukast i utrekningar utan vidare.
b) Koding
Kva skjer dersom brukaren skriv inn breidda som "seks" med bokstavar i staden for å skrive "6"? Prøv. Finn ut kva eventuelle feilmeldingar betyr.
c) Koding
Finn ut korleis du slår saman tredje linje og femte linje til éi kodelinje. Gjer det same med fjerde linje og sjette linje. Sjekk at programmet fungerer som det skal etter denne omskrivinga.
Løysingsforslag
Sidan vi på tredje linje har at lngd = input("Skriv inn lengda på rektangelet:") og på femte linje at lengde = float(lngd), erstattar vi lngd i femte linje med høgresida av likskapsteiknet i tredje linje. Vi får då funksjonen input() inni funksjonen float() – og det går heilt fint. Den tredje linja i programmet kan då sjå slik ut:
lngd = float(input("Skriv inn lengda på rektangelet:"))
Dette er eigentleg litt den same tankegangen som når vi bruker innsetjingsmetoden til å løyse to likningar med to ukjende – der vi har fått den eine likninga over på forma (eller ) og set uttrykket for (eller ) inn i den andre likninga.
d) Koding
I det øvste programeksempelet på sida blir det ikkje gjort noko konvertering av talet (alderen) som brukaren skriv inn. Kvifor ikkje?
Forklaring
I det øvste programeksempelet blir ikkje alderen brukt til anna enn utskrift. Det blir ikkje rekna med dette talet. Dersom vi til dømes ville at programmet skulle finne ut kva den dobbelte alderen er, måtte vi konvertert med float() eller int() det talet brukaren skriv inn.