Tiedon lukeminen käyttäjältä


Tiedon lukeminen käyttäjältä
Usein tulee eteen tilanne, että ohjelma tarvitsee jotain tietoa käyttäjältä ja
myöhemmin se käyttää tätä tietoa.
Näppäimistöltä annettu tieto tallennetaan sijoituskäskyllä muuttujaan.
Jokaisella muuttujalla on nimi jonka avulla tuohon annettuun tietoon päästään ohjelmassa käsiksi.
Netin Python-mallikoodeissa käytetään raw_input-käskyä,
mutta Python 3:ssa se on korvattu input-komennolla.
Uusi input-käsky lukee käyttäjän syötteen merkkijonona raw_input-käskyn tapaan.

Input-komento on tässä mallikoodissa kaksitahoinen.
Ensin input-komento saa syötteenä merkkijonon ja
tulostaa ruutuun ohjeeksi käyttäjälle tuon merkkijonon ja
sitten se jää odottamaan, että käyttäjä kirjoittaa nimensä ja painaa enter.
Samalla annettu teksti talletetaan nimi-muuttujaan.

Muistanet, että erikoismerkki ”keno-än”, n, input-käskyn lopussa tarkoittaa rivinvaihtoa.
Näin kysymys ja vastaus menevät eri riveille.
Tämä merkki kirjoitetaan painamalla näppäimistöllä ensin näppäintä ja sitten näppäintä n.
Merkkijonossa yhdistelmä käsitetään yhdeksi merkiksi,
joka aiheuttaa rivinvaihdon merkkijonoa tulostettaessa.

Input-funktio on esimerkki standardifunktiosta (aliohjelma) joka on koko ajan käytettävissä.
Tässä vaiheessa Python-opintoja tästä komennosta ei tarvitse muuta tietää kuin se,
että kuinka input-funktiolla voidaan ottaa käyttäjältä syötteinä lukuja ja merkkijonoja.
Eli osaa käyttää sitä.
Aliohjelmista eli funktioista myöhemmin (paljon) lisää.

 

Lisää input-käskystä
Input-funktio lukee merkit näppäimistöltä merkkijonona.
Python-tulkki ei osaa suorittaa laskutoimituksia merkkijonoille,
vaan laskutoimituksen operandin on oltava luku, numero.
Siksi tuo merkkijono on muutettava laskemista varten kokonaislukumuuttujaksi, integer.
Pythonissa on sisäänrakennettuna funktiot, joiden avulla muuttujan tyyppi voidaan vaihtaa.
Esimerkiksi int muuttaa annetun syötteen kokonaisluvuksi ja str merkkijonoksi ja float desimaaliluvuksi.

Mallikoodissa input-komento tallettaa näppäimistöltä tulevat merkit luku_1 muuttujaan.
Pythonin input-funktio “ei tiedä”, että käyttäjä syöttää nimenomaan numeron,
vaan se ottaa vastaan merkkijonon, tässä esimerkissä merkin ”22”.
Laskussa tarvitsemme numeroa, joten muutamme int-funktiolla käyttäjän syöttämän merkkijonon numeroksi.
Komento luku_1 = int(luku_1) muuttaa merkkijonomuuttujan tyypin kokonaislukumuuttujaksi ja merkkijonon numeroksi.
Nyt lukujen summaus onnistuu.
Kommentoi rivi jossa on int()-funktio pois käytöstä ja
kokeile sitten antamalla ensin kaksi numeroa ja sitten kaksi kirjainta.
Miten homma menee nyt?

Jos tarkkoja ollaan niin tyyppimuunnosfunktio ei muuta alkuperäistä annettua arvoa,
vaan tuottavat annetusta arvosta uuden, muunnetun tuloksen.
Mikäli haluat käyttää tyyppimuunnettua arvoa, talleta se muuttujaan sijoitusoperaattorilla (”=”).

 

Desimaaliluvut ja input
Fahrenheit-Celsius-muunnoksen laskevaa ohjelmaa tarvitsemme kun opiskelemme laiteläheistä koodausta
ja käytämme silloin RasPin GPIO-liitäntään kytkettyä Dallasin lämpötila-anturia.
Harjoitellaan muunnos-ohjelman tekemistä jo nyt.
Saamme kokemusta desimaali- eli liuku- float-luvuilla ja osaamme muunnokset sitten kun aika koittaa.

Fahrenheit Celsiukseksi

Edellisessä harjoituksessa kävi ilmi, että input-käsky välittää käyttäjältä lukemansa syötteen aina merkkijonona,
siis peräkkäisinä merkkeinä (näitä merkkejä voi olla yksi, useampi tai jopa nolla).
Lämpötilamuunnoksessa tarvitaan kuitenkin yhteen-, kerto- ja jakolaskuja.

Mallikoodissa käyttäjän antama merkkijono on tallennettu muuttujaan aste.
Merkkijonoa vastaava luku voidaan tällöin muuttaa fahrenheit-arvoksi käskyllä
fahrenheit = float(aste)

joka tallettaa luvun desimaalilukuna fahrenheit-muuttujaan (joka on tyyppiä float).
Tulostus on “rumaa”, mutta desimaalilukujen lyhentäminen esitetään myöhemmin
kun koodaajan taidot ovat kehittyneet alkeita pidemmälle.
Jos käyttäjän antamaa merkkijono ei vastaa mitään lukua,
ohjelma kaatuu eli se lopettaa toimintansa ja tulostaa esim tällaisen virheilmoituksen.

Python-tulkki jopa kertoo missä kohtaa virhe tapahtui, rivi-line 14.
Tulkki ei osaa muuttaa merkkiä (string) liukuluvuksi (float).

Int osaa muuttaa liukulukuja (desimaalilukuja) kokonaisluvuiksi, mutta ei osaa pyöristää niitä oikein.
Se vain yksinkertaisesti leikkaa luvun desimaaliosan pois.
Lisäksi int osaa muuttaa merkkijonot (käytännössä numerojonot) kokonaisluvuiksi.

 

Paluu pääsivulle:

 

Jaa somessa:
Punomo Logo

Kirjaudu Punomoon

Ei vielä Punomo tiliä? Rekisteröidy alla

Punomo Logo

Anna palautetta

Käyttäjiemme palaute auttaa Punomon kehittämisessä. Anna palautetta alla.