Tämä interaktiivinen harjoituskokoelma opettaa sinulle Python-ohjelmointikielen alkeet. Opas seurailee PyCon 2014 -tapahtumassa Barbara Shauretten ja Katie Cunninghamin pitämän Python-koulutuksen rakennetta.
Jos haluat tämän suomenkielisen oppaan sijaan tutustua englanninkieliseen alkuperäismateriaaliin (kalvot, esimerkit ym.), ne ovat ladattavissa täältä: https://github.com/mechanicalgirl/young-coders-tutorial
Mitä ohjelmoinnilla tarkoitetaan:
Pian kokeilemme kirjoittaa ohjeita tietokoneelle, mutta ensin on hyvä tietää, että ohjelmointikieliä on olemassa valtavasti erilaisia - eri käyttötarkoituksiin. Tässä oppaassa opettelemme ohjelmointikieltä nimeltä Python, joka on aloittelijaystävällinen ja silti valtavan tehokas ja ilmaisuvoimainen kieli.
Python voi näyttäytyä ohjelmoijalle monessa muodossa:
.py-tiedosto, joka annetaan tietokoneen suoritettavaksi. .py-tiedostojen kirjoittamiseen on monenlaisia työkaluja aina muistiosta tehokkaisiin integroituihin kehitysympäristöihin (eng. IDE). Näin tehty ohjelma voidaan jopa paketoida suoritettavaksi .exe-tiedostoksi.Aloitetaan Python-ohjelmointi yksinkertaisella matematiikalla. Pythonia voi nimittäin käyttää kätevänä laskimena.
Naksauta hiirellä alla oleva harmaa laatikko aktiivisiksi ja paina [⇧SHIFT] + [↵ENTER], jolloin Python suorittaa laskutoimituksen, kertoo tuloksen ja siirtyy seuraavaan laatikkoon.
In [ ]:
1+2
Hyvä! Tee sama uudelleen alla olevalle laatikolle.
In [ ]:
12-3
Kokeile nyt kirjoittaa itse alla olevaan harmaaseen laatikkoon seuraava laskutoimitus.
Älä kuitenkaan kopioi >>>-merkkejä, sillä ne ovat vain ilmaisemassa, että kyseessä on Python-koodi:
>>> 9+5-15
In [ ]:
9+2
Paina sitten [CTRL] + [↵ENTER] ja Python laskee laskun, kertoo tuloksen ja pitää kyseisen laatikon aktiivisena siltä varalta, että haluat muokata sen sisältöä. Tämä siis erotuksena aiempaan [⇧SHIFT] + [↵ENTER] -komentoon, joka siirtyy heti eteenpäin. Toiminnolle löytyy myös [▶]-nappi yläreunan työkalupalkista.
Pythonin matemaattiset perusoperaattorit ovat:
+-*/Kokeile vaikka näitä:
>>> 6*5
>>> 10*5*3
>>> 6/2
>>> 20/7
Tai voit kokeilla laskea ihan itse keksimilläsi luvuilla. Kokeile myös operaattoria **. Keksitkö mitä se tekee?
In [ ]:
2**2
In [ ]:
In [ ]:
In [ ]:
2/3.0
Sivuhuomautus: Pythonin 2.7 ja 3 versiot laskevat jakolaskun eri tavalla. Vanhempi ja käytöstä poistuva 2.7 saattaa tuottaa ikävän yllätyksen:
5/2palauttaakin arvon2, eikä2.5. Jos Python 2.7:lla haluaa tarkan jakolaskun tuloksen on kirjoitettava5.0/2.0. Tässä pitää olla tarkkana, sillä Python 2.7 -ympäristöihin saattaa törmätä vielä ajoittain.
Toinen sivuhuomautus: Saatat huomata tehdessäsi omia laskuja, että tulos ei ole aivan sitä mitä odotit. Tällöin järjestys, missä Python suorittaa laskuoperaatot saattaa olla eri mitä tarkoitit. Voit pakottaa Pythonin laskemaan haluamassasi järjestyksessä lisäämällä sulkuja. Esimerkiksi
3+4+5/3ei tuota samaa vastausta kuin(3+4+5)/3.
In [ ]:
| `== ` | tutkii ovatko luvut yhtäsuuret |
| `!= ` | tutkii ovatko luvut erisuuret |
| `< ` | tarkistaa onko vasemmalla puolella oleva luku pienempi kuin oikealla puolella oleva |
| `> ` | tarkistaa onko vasemmalla puolella oleva luku suurempi kuin oikealla puolella oleva |
| `<= ` | tarkistaa onko vasemmalla puolella oleva luku pienempi *tai yhtäsuuri* kuin oikealla puolella oleva |
| `>= ` | tarkistaa onko vasemmalla puolella oleva luku suurempi *tai yhtäsuuri* kuin oikealla puolella oleva |
Kokeile näitä alla. Esimerkiksi:
>>> 5 < 4 + 3
>>> 12 + 1 >= 12
>>> 16 * 2 == 32
>>> 16 != 16
>>> 5 >= 6
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
Vertailuoperaatot ovat tärkeitä ohjelmoinnissa, kuten pian tulemme näkemään. Niiden avulla voimme ohjelmoida tietokoneen tekemään eri asioita eri tilanteissa.
Paitsi lukuja, käsittelevät tietokoneet myös paljon tekstimuotoista tietoa. Tekstimuotoinen tieto on tallennettu tietokoneelle jonona kirjoitusmerkkejä, eli tuttavallisemmin merkkijonona.
Python tulkitsee merkkijonoksi tekstinpätkän, joka on lainausmerkkien välissä. Kokeile:
>>> "hello world"
>>> "omppu"
>>> omppu
In [ ]:
"hello world"
In [ ]:
In [ ]:
omppu
Viimeisen esimerkin, eli sen ompun, jota ei oltu ympyröity lainausmerkein, tuleekin antaa virhe. Virheisiin palaamme pian, mutta tässä esimerkin tarkoitus on iskostaa mieleesi seuraava sääntö: jos haluat syöttää Pythonille merkkijonon, käytä lainausmerkkejä
In [ ]:
In [ ]:
Tutustuimme edellä siihen, miten lukuja ja merkkijonoja käsitellään Pythonilla. Seuraavaksi tutustumme ideaan, jota voi käyttää molempien kanssa - eli muuttujaan.
Matematiikan tunnilta saatat muistaa x:n. Sitä käytettiin merkitsemään jotain tuntematonta (tai tunnettua) lukua. Ohjelmointikielessä nämä muuttujat toimivat hieman samalla tavalla.
Muuttujat ovat kuin laatikoita, joiden sisään voit pakata numeroita, merkkijonoja tai muita "juttuja".
Laske alla olevassa harmaassa laatikossa lasku:
>>> 12 * 12
In [ ]:
Python kuitenkin unohtaa tuloksen heti. Entäs jos haluaisit, että vastaus pysyy muistissa? Voit laittaa tuloksen muistiin sijoittamalla sen nimettyyn muuttujaan:
>>> tulos = 12 * 12
>>> tulos
In [ ]:
In [ ]:
Muuttujat säästävät aikaa ja vaivaa, sillä voit nyt käyttää muuttujaa tulos uudelleen ja uudellen tulevissa laskutoimituksissa ja ohjeissa.
Huomaa, että
tulosei ole lainausmerkeissä. Näin siksi, että se ei ole merkkijono, vaan muuttuja. Yleensä kannattaa käyttää kuvaavia muuttujan nimiä. Näin ei tarvitse turhaan arvailla ja selvitellä, että mitä muuttujassa on sisällä - nimi kertoo sen jo.
Voit uudelleenkäyttää muuttujia. Sijoita vaan sinne uusi arvo. Esimerkiksi:
In [ ]:
color = 'yellow'
In [ ]:
color = 12
Mitä luulet 'color' muuttujassa nyt olevan? Kokeillaan (suorita kaikki tämän esimerkin kolme laatikkoa ylhäältä alas):
In [ ]:
color
Muuttujat ovat ohjelmoinnissä hyvin tärkeitä. Siksi kertauksena:
In [ ]:
x = 3
y = 3
x==y
Tässä muuten joitain muita juttuja, mitä muuttujilla - ja erityisesti merkkijonomuuttujilla - voi tehdä.
In [ ]:
hedelma = "appelsiini"
hedelma[2]
In [ ]:
indeksi = 4
hedelma[indeksi-2]
Alle voit kokeilla tätä merkkijonoihin indeksointia itse:
In [ ]:
Eräs ohjelmoinnissa hyvin tärkeä asia ovat virheet ja virheilmoitukset. Paraskaan ohjelmoija ei osaa kirjoittaa virheetöntä ohjelmakoodia. Siksi onkin hyvä, että työkalu osaa tunnistaa ja kertoa meille suurimmassa osassa tapauksista milloin olemme tehneet jotain väärin - ja mikä vielä tärkeämpää, missä ja mikä virhe oikein oli. Suorita alla olevat koodit.
In [ ]:
"kaveri"*5
In [ ]:
"kaveri"+5
Mitä ylle ilmaantunut virhe mielestäsi tarkoittaa? Mitä 'str' ja 'int' tarkoittavat?
Pureskellaan virheilmoitus auki:
Usein lukemalla virheilmoituksen huolellisesti voi päästä jyvälle siitä mikä menee vikaan. Esimerkkitapauksessamme virhe olisi korjattavissa niin, että annamme myös numeron lainausmerkkien välissä olevana merkkijonona, jolloin yhdistettävät ovat molemmat merkkijonoja. Kokeile:
>>> "kaveri"+"5"
In [ ]:
Olemme jo tutustuneet kolmeen tietotyyppiin:
"Hei!", joka on merkkijono (eng. string)Sivuhuomautus: Huomaa, että Pythonin desimaalierotin on piste eikä pilkku. Tämä on hyvin yleistä ohjelmointikielissä ja tietojenkäsittelyssä, mutta ensikertalaisen kannattaa kiinnittää asiaan huomiota.
Python osaa kertoa meille tyypin Pythoniin sisäänrakennetulla type(...)-funktiolla. Funktioihin tutustumme lähemmin tuonnempana.
In [ ]:
tervehdys = "Hei!"
type(tervehdys)
Hae alla vastaavalla tavalla tyyppikuvaus kokonaisluvulle ja liukuluvulle:
In [ ]:
type(12)
In [ ]:
Voit muuttaa tietoa toiseen muotoon int(...), str(...) ja float(...) -funktioilla. Esimerkiksi:
In [ ]:
float(5)
Kokeile muuttaa kokonaisluku merkkijonoksi:
In [ ]:
Entäs muuttuuko numeron sisältävä merkkijono desimaaliluvuksi?:
In [ ]:
In [ ]:
hedelmat = ["omena", "banaani", "mandariini"]
In [ ]:
numerot = [3, 17, -4, 8.8, 1]
Arvaa mitä type(...)-fuktio osaa kertoa:
In [ ]:
type(hedelmat), type(numerot)
Voit käyttää kokonaislukuindeksiä ja hakasulkuoperaattoria hakeaksesi jonkin listan alkion:
In [ ]:
hedelmat[0]
In [ ]:
numerot[1]
Huomaa edellisistä esimerkistä pari seikkaa. Ohjelmointikielissä on tyypillistä, että listan ensimmäinen alkio haetaan indeksillä
0- se on siis tavallaan "nollas" alkio eikä "ensimmäinen". Näin myös Pythonissa.
Mihin negatiivinen indeksi -1 osoittaa? Entä -2? Kokeile arvasitko oikein:
In [ ]:
hedelmat[-1]
In [ ]:
Käytä indeksiä ja hakasulkuoperaattoria hakeaksesi yhden lempiväreistäsi:
In [ ]:
Extratehtävä: mitä tapahtuu jos indeksoit kahdesti hedelmat-listaa tai lempivärilistaa? Miksi tulos on se mikä se on?
In [ ]:
hedelmat[1][3]
In [ ]:
1==1
In [ ]:
15 < 5
Kokeile mitä tapahtuu jos kirjoitat Pythonille pelkän True tai False. Entäs pystytkö sijoittamaan totuusarvon muuttujaan?
In [ ]:
In [ ]:
Mikä on totuusarvon tyyppi? Tarkista se type(...)-funktiolla, kuten teimme kokonaisluvuille ja merkkijonoille:
In [ ]:
Huomaa, että
TruejaFalseon kirjoitettu suurella alkukirjaimella, ja että ne eivät ole ympäröity lainausmerkein, eli ne eivät ole merkkijonoja.TruejaFalseovatkin Pythonin varattuja sanoja, eli kieleen sisäänrakennettuja asioita.
Myös and, or ja not ovat Pythonissa varattuja sanoja. Niillä voi muuttaa totuusarvoja, sekä yhdistää niitä tuottavia vertailuoperaatioita toisiinsa.
Alla risuaidan
#jälkeen kirjoitettua ei tulkita Python-kieleksi. Ne ovat koodin sekaan kirjoitettuja kommentteja, mikä onkin usein tarpeen, jotta koodin tarkoitusta ei tarvitse turhaan kummastella. Kommentit auttavat koodaajaa - ja mikä tärkeämpää - muita koodaajia ymmärtämään mitä koodi tekee.
In [ ]:
1==1 and 2==2 # molemmat ovat tosia, lopputulos tosi
In [ ]:
1==1 and 2!=2 # Vain toinen on tosi, lopputulos epätosi
In [ ]:
1==2 and 2==3 # Kummatkaan eivät ole tosia, lopputulos epätosi
In [ ]:
1==1 or 2==2 # molemmat ovat tosia, lopputulos tosi
In [ ]:
1==1 or 2!=2 # Vain toinen on tosi, lopputulos silti tosi
In [ ]:
1==2 or 2==3 # Kummatkaan eivät ole tosia, lopputulos epätosi
In [ ]:
1==1
In [ ]:
not 1==1
In [ ]:
In [ ]:
In [ ]:
XOR: Osaatko tehdä vertailun, joka palauttaa True vain jos jompikumpi vertailtavasta on tosi (ns. exclusive-or, xor)? Vinkki: käytä muuttujia ja ryhmittele vertailuoperaattoreita suluilla. Esim:
>>> not (True and (True or False))
In [ ]:
Merkkijonojen vertailu: Kokeile vielä verrata merkkijonoja keskenään. Kokeile onko suurilla ja pienillä kirjaimilla merkitystä. Yllätyitkö?
In [ ]:
"test" == "Test"
Tähän mennessä olemme käyttäneet Pythonia lähinnä moneen hienoon temppuun taipuvana laskukoneena. Jotta pystyisimme kirjoittamaan tietokoneelle pidempiä ohjeita, tulee meidän tutustua keinoihin joilla ohjeiden logiikka kuvataan Pythonin kaltaisissa ohjelmointikielissä. Tähän on käytettävissä kaksi perustekniikkaa: ehdot ja simukat.
Alla esimerkki siitä, miten samankaltainen asia ilmaistaisiin Python-koodissa:
>>> nimi = "Jussi"
>>> if name == "Jussi":
>>> ····print("Moi Jussi!")
Moi Jussi!
Huomattavaa: Pythonissa ehtolauseen jälkeen tulee kaksoispiste, joka puolestaan kertoo että seuraavalta riviltä alkaa uusi lohko. Lohko on pätkä ohjelmakoodia, joka kuuluu yhteen, ja jonka tietokone suorittaa kokonaisuutena rivi kerrallaan (ylhäältä alas). Lohko on sisennetty neljällä välilyönnillä ja kaikki samaan tasoon sisennetyt peräkkäiset rivit kuuluvat samaan lohkoon (yllä olevassa esimerkissä pisteet tarkoittavat välilyöntejä, ja ovat siinä näkyvillä vain siksi, että välilyöntien käyttö tulisi selvemmäksi).
Mutta entä jos henkilö ei olekaan Jussi? Pythonissa on varattu sana else näitä tilanteita varten:
>>> if name=="Jussi":
>>> ····print("Moi Jussi!")
>>> else:
>>> ····print("Hujari!")
Jos taas henkilöitä on enemmän, voidaan käyttää sanaa elif tämän toisen ehdon tarkastamiseen:
>>> if name=="Jussi":
>>> ····print("Moi Jussi!")
>>> elif name=="Aki":
>>> ····print("Hei Aki!")
>>> else:
>>> ····print("Kuka sinä olet?")
Huomattavaa:
elif-ehto tarkastetaan vain jos mikään ennen sitä olevista ehdoista ei toteutunut.else-lohko suoritetaan vain jos mikään aiempi ehto ei toteutunut.Toisinsanoen:
if/elif/elserakenteesta suoritetaan aina vain yksi haara (lohko).
In [ ]:
Lisää ehtoon vielä elif ja else -haarat, joissa tutkit onko muuttujassa jokin toinen väri ja jos on, tulostat jotain muuta nokkelaa.
Laskevat silmukat kirjoitetaan pythonissa käyttäen for-avainsanaa ja siksi niitä sanotaankin for-silmukoiksi. Silmukka vaatii myös nimetyn laskumuuttujan (esimerkissä numero), in-avainsanan ja esim. listan numeroita, jotka silmukan laskumuuttuja saa järjestyksessä yksi toisensa jälkeen. Huomaa myös kaksoispiste rivin lopussa ja uuden lohkon merkiksi tehty sisennys:
In [ ]:
for numero in [1,2,3,4,5]:
print("Hei", numero)
Kirjoita koodinpätkä, joka laskee kertoman (merkitään matematiikassa huutomerkillä !), eli kertoo peräkkäiset numerot keskenään. Esim.
5! = 5*4*3*2*1
Käytä muuttujaa, johon säilöt tuloksen. Pitkien lukulistojen kirjoittaminen on työlästä, joten kannattaa käyttää Pythoniin sisäänrakennettua range(a,b)-funktiota, joka tekee sinulle lukulistan a:sta b:hen. Havainnollistava esimerkki alla:
In [ ]:
list( range(1,5) ) # voit for-silmukassa jättää list(...)-osan pois.
In [ ]:
lkm = 1
while (lkm<4):
print ('toistojen lukumäärä on', lkm)
lkm = lkm+1
Huomattavaa: on tärkeää, että ehto jää täyttymättä edes joskus, sillä muuten kyseessä on päättymätön silmukka. Niillekin on paikkansa, mutta yleensä ohjelma menee ns. jumiin, jos se jää pyörimään tällaiseen.
Ajattele keksirepsetiä:
Kumpi on helpompaa, noudattaa reseptiä, vai kysyä äidiltä, että "leipoisitko keksejä"? Ohjelmoinnissa tällainen pyyntö vertautuu aliohjelmakutsuun, sillä aliohjelma on joukko yhteen liittyviä ohjeita paketoituna nimetyksi kokonaisuudeksi.
Tämä on kätevää, sillä vaikka reseptin seuraaminen meiltä onnistuisikin, on pyytäminen huomattavasti helpompaa. Ja asioiden tekeminen helpommin, tehokkaammin ja nopeammin on pitkälti se, mistä ohjelmoinnissa on kyse.
Pythoniksi muutettuna tämä kaunis pyyntö saada tuoreita pikkuleipiä voitaisiin ilmaista vaikka näin:
!Python
pikkuleivat = leivo_pikkuleipia(montako_tarvitaan)
Tässä leivo_pikkuleipia on aliohjelman nimi ja montako_tarvitaan on parametri, joka määrää sen kuinka suurelle joukolle (eli kuinka montakertaisen pikkuleipätaikinan) äiti leipoo.
Pythonissa aliohjelmat esitellään def-avainsanaa käyttäen, jonka jälkeen annetaan sille nimi ja sulut. Esittelyrivi päättyy kaksoispisteeseen, ja seuraavalla rivillä on aliohjelman toteutuksen määrittelevä koodilohko, eli aliohjelman runko.
Aliohjelmaa kutsutaan kirjoittamalla sen nimi ja sulut:
In [ ]:
def moikkaa_mua(): # tämä on aliohjelman esittely
print("moi")
moikkaa_mua() # tämä on aliohjelmakutsu
Huomattavaa: esittelyn ja kutsumisen eron ymmärtäminen on hyvin tärkeää. Siis kertauksena: esittelyssä kerrotaan yksityiskohtaisesti miten joku asia tehdään ja kutsuttaessa pyydetään tekemään kyseinen asia!
Aliohjelmalle voidaan lisätä parametreja kirjoittamalla ne sulkujen väliin. Näitä parametrimuuttujia voidaan sitten käyttää aliohjelman lohkon koodissa kuten mitä tahansa muuttujaa. Huomaa, että jos aliohjelmalle on lisätty parametri, tällöin myös aliohjelman kutsussa pitää antaa kyiseiselle parametrimuuttujalle arvo. (suorita alla oleva koodi)
In [ ]:
def moikkaa_kaveria(nimelta): #esittely
print("moi", nimelta)
moikkaa_kaveria("Jussi")
Kutsu edellä esiteltyä moikkaa_kaveria-aliohjelmaa niin, että se moikkaa sinua. Esittele sitten uusi aliohjelma, joka ottaa kaksi parametria (parametrit erotetaan toisistaan pilkulla): tervehdyksen ja listan nimiä ja moikkaa kaikkia listassa olevia henkilöitä (kts. for-silmukan ja listan ohjeet yltä, jos et muista miten niitä käytettiin).
In [ ]:
1+2
In [ ]:
Käytämme edelleen pikkuleipiä leipovaa äitiä apuna:
!Python
pikkuleivat = leivo_pikkuleipia(montako_tarvitaan)
Rivin alkuun on nyt lisätty pikkuleivat-muuttuja ja yhtäsuuruusmerkki. Tähän muuttujaan puolestaan sijoitetaan aliohjelman paluuarvo, eli valmistuneet pikkuleivät.
Tässä yhteydessä toinen hyödyllinen tapa ajatella aliohjelmia on tehdasvertaus: Aliohjelma on kuin tehdas, minne menee raaka-aineita sisään (parametrit) ja ulos tulee valmis tuote (paluuarvo). Emme nimittäin ole kiinnostuneita siitä miten tehdas toimii, kunhan se vain tekee sen mitä lupaa.
Aliohjelman esittelyn yhteydessä, sen koodilohkossa, käyttämällä return-avainsanaa, voidaan lopettaa aliohjelma samalla palauttaen jokin arvo. Esimerkiksi näin (suorita alla oleva koodi):
In [ ]:
def tuplaa(numero): #esittely
return numero*2
tuplaa (4) #kutsu
In [ ]:
In [ ]:
Opimme paljon Pythonin aliohjelmista, mutta kerrataan vielä:
def-avainsanallakutsun_nimi()return-avainsanalla.
In [ ]:
def sano_kohteliaisuus():
print("Kirjoita nimesi:")
nimi = input()
print("Kirjoita lempinumerosi:")
vari = int(input())
print( "Hei",nimi+",", vari, "on sitten hyvä numero.")
sano_kohteliaisuus()
In [ ]:
"Pyörää ei kannata keksiä uudelleen" on sanonta, joka pätee erityisen hyvin koodauksessa. Suuri osa yksinkertaisista koodaustehtävistä on jo tehty, ja usein nopein tapa saada asioita aikaan on uudelleenkäyttää jonkun toisen kirjoittamaa ohjelmakoodia.
Pythonin tarjoama ratkaisu tähän on modulit. Voit ajatella modulia vaikka kokoelmana yhteen littyviä aliohjelmia, jotka tekevän jonkin tehtävän tekemisestä helppoa. Ne ovat tavallaan ohjelmoinnin leegopalikoita. Pythonin mukana tulee koko joukko moduleita, tutustutaan alla niistä muutamaan:
Satunnaisen numeron arpominen väliltä 1-100:
>>> import random
>>> print( random.randint(1,100) )
Kellonajan tarkistaminen:
>>> from datetime import datetime
>>> print( datetime.now() )
from X import Y tarkoittaa tässä sitä, että haemme datetime modulista vain datetime nimisen "palikan".Kalenterin tulostaminen:
>>> import calendar
>>> calendar.prmonth(2015, 9)
Huomattavaa: moduleiden sisällä asustavia aliohjelmia ja muita "juttuja" kutsutaan pistenotaatiolla, eli niin, että ensin tulee modulin nimi, sitten piste, sitten kutsuttavan aliohjelman (tai muun "jutun") nimi, ja aliohjelman ollessa kyseessä sulut ja niiden väissä parametrit.
Kokeile itse käyttää esimerkkien moduleita kirjoittamalla niiden koodi alle (muistathan, että ">>>" EI ole osa kopioitavaa koodia):
In [ ]:
In [ ]:
In [ ]:
Alla esitellään esimerkkien avulla vielä pari mielenkiintoista modulia. Sisäänrakennettuja moduleita voit selata Pythonin dokumentaation modulilistasta. Lisäksi netti on puolellaan kolmannen osapuolen moduleita, tarpeeseen jos toiseenkin.
In [ ]:
import os
for tiedosto in os.listdir( os.getcwd() ):
print(tiedosto)
In [ ]:
import urllib.request
py_home = urllib.request.urlopen("http://www.python.org")
print(py_home.read()) #Tulostaa pythonin kotisivun HTML-muodossa.
Hyödynnä äsken ja aiemmin oppimaasi ja kirjoita alle peli, joka arpoo satunnaisen numeron (random), ja pyytää sinua arvaamaan sen (print, input) kunnes (while) osut oikeaan. Voit rullailla ylöspäin tätä Notebookia, jos et muista jotain yksityiskohtaa. Jos peli tuntuu liian vaikealta, voit laittaa ohjelman tulostamaan vinkkejä, kuten "luku on pienempi" tai "polttaa".
In [ ]:
Pythonissa on eräs mielenkiintoinen moduli nimeltä turtle, jolla leikimme seuraavaksi. Kyseessä on omassa ikkunassaan asuva kilpikonna, jota ohjaat kirjoittamalla koodia.
Valitettavasti Pythonin sisäänrakennettu kilpikonna ei toimi verkossa olevassa Jupyter-muistilehtiössä (esim. Azure Notebooks), vaan tähän tehtävään tarvitset paikallisen Python-asennuksen. Suositeltavaa on käyttää Anaconda-jakelua. Asennuspaketti eri alustoille (Windows/OSX/Linux) on ladattavissa oheisen linkin takaa.
Kun olet asentanut Anacondan ja avannut tämän ipynb-tiedoston siellä, meillä on toimiva kilpikonna. Pistetäänhän se liikkeelle!
In [ ]:
import turtle
turtle.reset()
#Kirjoita kilpikonnan ohjauskoodi tähän
turtle.fd(100)
turtle.Screen().mainloop()
Jos saat virheilmoituksen, jokin meni pieleen, eikä Jypyter-ympäristö asentunut tai käynnistynyt koneellasi oikein. Tarkista, että olet käynnistänyt Jupyter Notebook -palvelimen käynnistysvalikosta ja että selain on aukaissut seuraavan sivun: http://127.0.0.1:8888
Kun ajat kodin kilpikonna vain kököttää paikallaan. Pistetään siihen vähän liikettä. ENSIN KUITENKIN SULJE AUENNUT KILPIKONNAIKKUNA RUKSISTA. JOS ET TEE TÄTÄ, ET NÄE MUUTTUNEEN KOODIN VAIKUTUKSIA.
Alla joitain "temppuja", mitä kilpikonna osaa:
turtle.forward(10) # kilppari kulkee eteenpäin annetun määrän askelia
turtle.right(45) # kilppari kääntyy annetun määrän asteita oikealle
turtle.left(90) # kilppari kääntyy annetun määrän asteita oikealle
Käytä näitä kolmea käskyä ja silmukoita tuottaaksesi erilaisia toinen toistaan villimpiä kuvioita. Voit kirjoittaa koodin yllä olevaan runkoon. Huom: Komennot ovat myös lyhennettävissä fd, rt, lt jne.
Jos jäit koukkuun, Pythonin turtle-modulin dokumentaatiosta voit lukea mitä kaikkia temppuja Python-kilppari osaa. Voit mm. vaihtaa ikkunan taustaväriä, kilpikonnan muotoa, viivan paksuutta ja väriä jne.
In [ ]:
from mobilechelonian import Turtle
t = Turtle()
def painettu_ylos():
t.setheading(90)
t.forward(20)
def painettu_alas():
t.setheading(-90)
t.forward(20)
def painettu_vasemmalle():
t.setheading(180)
t.forward(20)
def painettu_oikealle():
t.setheading(0)
t.forward(20)
# Kiinnitetään näppäimenpainallukset edellä oleviin aliohjelmiin
# kun näppäintä painetaa, aliohjelmaa kutsutaan.
screen = turtle.Screen()
screen.onkey(painettu_ylos, "w")
screen.onkey(painettu_vasemmalle, "a")
screen.onkey(painettu_alas, "s")
screen.onkey(painettu_oikealle, "d")
screen.listen()
screen.mainloop()
Onneksi olkoon, olet nyt oppinut pythonin perusteet ja sitä mukaa kun otat edellä oppimaasi haltuun, voit rakentaa aina vain isompia ja hienompia juttuja. Ai mitä vai? Alla joitain esimerkkejä. Huomaa kuitenkin, että vain osa näistä toimii Jupyter-ympäristössä, joka on tarkoitettu paremminkin tieteelliseen käyttöön ja automaattiseen tietojenkäsittelyyn. Suositeltavaa onkin sovellusten tai kuvan ja äänen kanssa työskennellessä käyttää kehitysympäristöä kuten Visual Studio Code. Sen ja modulien avulla:
"pygame-zero")"pymedia")"python flask")"kivy")"scientific python" tai "<opetettavan aiheen englanninkielinen avainsana tähän> python")Tämä on mahdollista, koska lähes kaikkeen löytyy Python -moduli:
In [ ]: