Uke 2 — print / input
=====================
Eksempler
---------
Les `kapittel 1 av Automate the boring stuff `_.
I følgende kodeeksempler skal du først lese koden, så forsøke å forstå hva den
gjør. Etterpå skal du prøve å kjøre koden og se om den gjør det du trodde den
kom til å gjøre.
En bra resurs til å skjønne hva som skjer når du kjører pythonkode er å bruke
`visualiseringsverktøyet på pythontutor.com
`_. Du kan kopiere inn koden
du vil forstå i vinduet og klikke på 'Visualize execution', så kan du gå
igjennom programmet steg for steg og se hva som skjer. Du kan bruke denne siden
så mye du trenger gjennom hele kurset for å hjelpe deg å forstå koden du
skriver. Lenken finnes også på mitt.uib.no ved å klikke på 'Ressurser' på
startsiden til INF100.
.. note::
For å laste ned filene, kan du høyreklikke / ctrl-klikke på dem og velge
"Save link as" fra menyen. Lagre filene i en mappe du bruker for INF100,
så åpner du den samme mappen i VSCode etterpå.
Eksempel 1
..........
Last ned filen her: :download:`hello_1.py `.
.. literalinclude:: eks/hello_1.py
Hva tror du outputet blir? Var det riktig? Prøv å kopiere inn denne koden i
`visualiseringsverktøyet `_ og
steg igjennom koden. Ser det ut som du tenkte?
Eksempel 2
..........
Last ned filen her: :download:`hello_2.py `.
.. literalinclude:: eks/hello_2.py
Svar på spørsmålene i filen. Hva tror du outputet blir? Var det riktig? Bruk
`visualiseringsverktøyet `_
hvis du trenger det.
Eksempel 3
..........
Når du kjører Pythonkode som inneholder ``input()`` så stanser kjøringen
når den kommer til ``input()``. Der venter den til den har fått input fra
brukeren *i terminalen*. Den kan vente hvor lange som helst. Etter den har fått input
fortsetter kjøringen.
Last ned filen her: :download:`input_1.py `.
.. literalinclude:: eks/input_1.py
Kjør koden. Blir "Hyggelig å hilse på deg" printet før eller etter at du gitt
ditt navn? Bruk
`visualiseringsverktøyet `_
hvis du trenger det.
Eksempel 4
..........
Last ned filen her: :download:`input_2.py `.
.. literalinclude:: eks/input_2.py
Svar på spørsmålet i filen. Hva tror du outputet blir? Var det riktig? Hvorfor
blir de to siste ulike? Bruk `visualiseringsverktøyet
`_ hvis du trenger det.
Eksempel 5
..........
Funksjonen ``len()`` kan brukes til å beregne hvor mange tegn det er i en
tekststreng. Vi kan bruke ``len()`` til å for eksempel lage understrekk under et
navn.
Last ned filen her: :download:`len_1.py `.
.. literalinclude:: eks/len_1.py
Skjønner du hva som skjer? Bruk `visualiseringsverktøyet
`_ hvis du trenger det.
Eksempel 6
..........
Funksjonen ``max()`` returnerer den maksimale verdien av de tingene du putter
inn. Den kan ta hvor mange argumenter som helst.
Last ned filen her: :download:`max_1.py `.
.. literalinclude:: eks/max_1.py
Blev outputet som du trodde? Bruk `visualiseringsverktøyet
`_ hvis du trenger det.
Eksempel 7
..........
Denne filen inneholder noen feil som gjør at den ikke kan kjøres.
Finn feilen(e) og endre koden slik at den kan kjøres.
Last ned filen her: :download:`errors_1.py `.
.. literalinclude:: eks/errors_1.py
Å finne og fikse feil i koden én etter én er en vanlig måte å jobbe på.
(Vanligvis er det ikke så mange feil som her). Heldigvis er Python ganske
hjelpsom med å si ifra.
Her er en typisk feilmelding::
File "errors_2.py", line 7
Input("Hva heter du? ")
NameError: name 'Input' is not defined
Den første linjen forteller oss at feilen ligger i ``errors_2.py`` på linje 7.
Den andre linjen viser oss innholdet til linje 7, der feilen er. Til slutt ser vi hva
slags feil som har oppstått. Her er det en ``NameError`` og Python sier at
``Input`` (med stor I) ikke finnes. Vi fikser feilen ved å skrive ``input`` med
liten i.
For å fikse *alle* feilene kan vi kjøre filen på nytt, få en ny feilmelding og
fikse den også helt til vi ikke får flere feil.
Eksempel 8
..........
Last ned filen her: :download:`calc.py `.
.. literalinclude:: eks/calc.py
Hva tror du outputet blir? Hvorfor må vi bruke
``float()`` før beregningen av arealet? Hva skjer om vi ikke bruker float? Bruk
`visualiseringsverktøyet `_
hvis du trenger det.
Oppgaver
--------
I disse oppgavene skal du lese inn input, og bruke det videre i koden din.
Det er viktig å følge instruksene i oppgaven og skrive akkurat det som blir bedt om.
Husk på disse tingene:
* Alle oppgavene skal løses med kun det dere har lært til nå (``input()``,
``print()``, ``len()``, ``max()``, ``int()``, ``float()``, ``str()`` og enkle
beregninger).
* Hver gang du leser inn noe med ``input()`` skal svaret være på
den samme linjen. Skriv f.eks ``input('Skriv noe: ')``, istedet for
``input('Skriv noe:\n')`` (``\n`` legger til en ny linje).
* Les oppgaveteksten nøye, det er vanlig å måtte lese igjennom flere ganger før
du forstår det 100%.
* Når eksempelkjøringer er oppgitt, skal kjøringen se ut
akkurat som oppgitt, dette **inkluderer** mellomrom osv.
Oppgave 1
.........
I filen ``uke_02_oppg_1.py``, skriv kode som skriver akkurat følgende output i terminalen:
Eksempelkjøring::
Hei, det er jeg, datamaskinen.
Hyggelig å se deg her.
Jeg håper du får en fin dag videre!
Oppgave 2
..........
I filen ``uke_02_oppg_2.py``, skriv kode som gjør følgende, **i oppgitt
rekkefølge**:
1. Spørre brukeren om navnet deres via ``input()``. (Tips: lagre input i en variabel.)
2. Hilse på personen med ``print()`` funksjonen.
3. Skrive ut antall bokstaver i navnet med ``len()`` og ``print()`` funksjonen.
Eksempelkjøring::
Hva heter du? Ola
Hei Ola!
3
Oppgave 3
.........
I filen ``uke_02_oppg_3.py``, skriv kode som gjør følgende, **i oppgitt rekkefølge**:
1. Spør brukeren om en vekt i enheten *stones* og enheten *pounds* via
to ``input()`` funksjoner, og lagre inputen i to variabler.
2. Beregner tilsvarende vekt til summen av inputvektene, i enheten *kilogram*.
Konverter først *stones* til *kilogram* med formelen
.. math::
V_{kg} = \frac{V_{st}}{0.15747},
hvor :math:`V_{kg}` er vekten i *kilogram* og :math:`V_{st}` er vekten i
*stones*.
Konverter siden *pounds* til *kilogram* med formelen
.. math::
V_{kg} = \frac{V_{lb}}{2.20462},
hvor :math:`V_{kg}` er vekten i *kilogram* og :math:`V_{lb}` er vekten i
*pounds*. Summér til sist de to verdiene du har beregnet.
3. Print resultatet.
Eksempelkjøring::
Vekt i stones: 3
Vekt i pounds: 6
Vekt i kilogram: 21.772805313348453
Oppgave 4
.........
I filen ``uke_02_oppg_4.py``, skriv kode som gjør følgende, **i oppgitt rekkefølge**:
1. Leser inn brukerens navn via ``input()``.
2. Leser inn brukerens gateadresse via ``input()``.
3. Leser inn brukerens postkode og poststed via ``input()``.
4. Printer "*navn*-s adresse er:"
5. Printer en tom linje
6. Printer navn og adresse slik som man skriver det på et brev.
(Tips: du må bruke navnet to ganger, så det er en god idé å lagre det i en
variabel.)
Eksempelkjøring::
Hva er ditt navn? Kari Nordmann
Hva er din adresse? Gateveien 1
Hva er ditt postnummer og poststed? 1234 Stedet
Kari Nordmanns adresse er:
Kari Nordmann
Gateveien 1
1234 Stedet
Oppgave 5
.........
I filen ``uke_02_oppg_5.py``, skriv kode som gjør følgende, **i oppgitt rekkefølge**:
1. Leser inn brukerens navn via ``input()``.
2. Leser inn brukerens gateadresse via ``input()``.
3. Leser inn brukerens postkode og poststed via ``input()``.
4. Printer hvor lang den lengste raden er.
(Tips: bruk ``len()`` og ``max()``.)
Eksempelkjøring::
Hva er ditt navn? Kari Nordmann
Hva er din adresse? Gateveien 1
Hva er ditt postnummer og poststed? 1234 Stedet
13
Oppgave 6
.........
I denne oppgaven skal vi spørre brukeren om en haiku og siden printe den på en
fin måte på skjermen.
I filen ``uke_02_oppg_6.py``, skriv kode som gjør følgende, **i oppgitt rekkefølge**:
1. Spør brukeren om første raden i en haiku.
2. Spør brukeren om andre raden i en haiku
3. Spør brueren om tredje raden i en haiku.
4. Printer en tom linje
5. Printer hele haikuen med høyrejustering og med en ramme av "@" runt (se eksempelkjøring).
(Tips: bruk ``len()`` og ``max()`` til å finne lengden av den lengste raden.
Siden printer du hver rad med så mange mellomrom før raden som det er forskjell
mellom den raden og den lengste raden i haikun. Husk å printe en rad med "@"
før og etter haikuen og husk å printe "@" i starten og slutten av hver rad med
tekst. Hvor mange tegn lengre må toppen og bunnen av rammen være enn den
lengste raden i haikuen?)
Eksempelkjøring::
Første raden: What a pleasure to
Andre raden: Right justify a haiku
Tredje raden: As an exercise
@@@@@@@@@@@@@@@@@@@@@@@@@
@ What a pleasure to @
@ Right justify a haiku @
@ As an exercise @
@@@@@@@@@@@@@@@@@@@@@@@@@