Kirjoittaja: Antti Laaksonen (2009).
⚠ Huomio! Tämä opas on vanhentunut. Oppaan sisältöön ei voi enää luottaa. Opas on säilytetty vain sen historiallisen arvon vuoksi. ⚠
Python-kielen osana on laaja standardikirjasto, joka muodostuu kokoelmasta moduuleita eri tarkoituksiin. Esimerkiksi moduuli math sisältää matemaattisia funktioita, moduulin datetime avulla voi käsitellä päivämääriä ja kellonaikoja ja moduulin urllib kautta pystyy hakemaan tietoa Internetistä.
Tässä oppassa on joukko esimerkkejä standardikirjaston moduulien käytöstä. Ohjelmoijan ei tarvitse muistaa moduulien sisältöä ulkoa, vaan riittää tietää, mistä voi etsiä tietoa niistä. Seuraavassa osoitteessa on täydellinen luettelo standardikirjaston moduuleista:
http://docs.python.org/library/
Ohjelman käyttämät moduulit täytyy luetella sanan import jälkeen ohjelman alussa. Esimerkiksi jos ohjelma käyttää moduuleita math ja datetime, tästä täytyy ilmoittaa seuraavasti ohjelman alussa:
import math import datetime
Moduulissa math on matemaattisia funktioita.
Seuraava ohjelma laskee lukujen 0–9 neliöjuuret:
# -*- coding: latin-1 -*-
import math
for i in range(0, 10):
print "Luvun", i, "neliöjuuri on", math.sqrt(i)Ohjelman tulostus on seuraava:
Luvun 0 neliöjuuri on 0.0 Luvun 1 neliöjuuri on 1.0 Luvun 2 neliöjuuri on 1.41421356237 Luvun 3 neliöjuuri on 1.73205080757 Luvun 4 neliöjuuri on 2.0 Luvun 5 neliöjuuri on 2.2360679775 Luvun 6 neliöjuuri on 2.44948974278 Luvun 7 neliöjuuri on 2.64575131106 Luvun 8 neliöjuuri on 2.82842712475 Luvun 9 neliöjuuri on 3.0
Moduulin random avulla voi käsitellä satunnaislukuja.
Seuraava ohjelma arpoo kymmenen kertaa nopan silmäluvun:
# -*- coding: latin-1 -*-
import random
print "Kymmenen nopanheittoa:"
for i in range(0, 10):
print random.randint(1, 6),Ohjelman tulostus voi olla seuraava:
Kymmenen nopanheittoa: 1 4 5 5 5 2 4 3 2 6
Seuraava ohjelma sekoittaa tiedostonimien listan:
# -*- coding: latin-1 -*-
import random
lista = ["a.mp3", "b.mp3", "c.mp3", "d.mp3",
"e.mp3", "f.mp3", "g.mp3", "h.mp3"]
random.shuffle(lista)
print "Soittolista:"
for kappale in lista:
print kappale,Ohjelman tulostus voi olla seuraava:
Soittolista: c.mp3 a.mp3 d.mp3 b.mp3 h.mp3 f.mp3 e.mp3 g.mp3
Moduulin datetime avulla voi käsitellä päivämääriä ja kellonaikoja.
Seuraava ohjelma tulostaa järjestelmän päivämäärän ja kellonajan:
# -*- coding: latin-1 -*-
import datetime
aika = datetime.datetime.now()
print aika.strftime("%d.%m.%Y %H:%M:%S")Ohjelman tulostus voi olla seuraava:
25.10.2009 16:09:06
Seuraava ohjelma tulostaa ajan osat yksitellen:
# -*- coding: latin-1 -*- import datetime aika = datetime.datetime.now() print "Vuosi:", aika.year print "Kuukausi:", aika.month print "Päivä:", aika.day print "Tunti:", aika.hour print "Minuutti:", aika.minute print "Sekunti:", aika.second
Ohjelman tulostus voi olla seuraava:
Vuosi: 2009 Kuukausi: 10 Päivä: 25 Tunti: 16 Minuutti: 9 Sekunti: 6
Moduulin time avulla voi mitata aikaa ja odottaa halutun ajan.
Seuraava ohjelma mittaa, kuinka nopeasti käyttäjä vastaa kysymykseen:
# -*- coding: latin-1 -*-
import time
alku = time.time() # ajan mittaus alkaa
tulos = int(raw_input("Paljonko on 13 * 19? "))
loppu = time.time() # ajan mittaus päättyy
if tulos == 247:
print "Oikein!"
else:
print "Väärin!"
print "Aika:", round(loppu - alku, 1), "s"Ohjelman tulostus voi olla seuraava:
Paljonko on 13 * 19? 247 Oikein! Aika: 7.6 s
Tässä funktio time ilmoittaa järjestelmän ajanlaskun alusta kuluneen ajan sekunteina. Kahden tällaisen ajan erotus kertoo, miten paljon aikaa on kulunut kahden ohjelman kohdan välillä.
Seuraava ohjelma odottaa viisi sekuntia ennen toisen rivin tulostusta:
# -*- coding: latin-1 -*- import time print "Odota, kun Henrikki pukee haarniskan..." time.sleep(5) print "Valmista tuli!"
Ohjelman tulostus on seuraava:
Odota, kun Henrikki pukee haarniskan... ... (viiden sekunnin odotus) Valmista tuli!
Moduulin os kautta voi hakea tietoja tiedostojärjestelmästä.
Seuraava ohjelma tarkistaa, onko tiedosto olemassa. Jos tiedosto on olemassa, ohjelma myös ilmoittaa sen koon.
# -*- coding: latin-1 -*-
import os
if os.path.exists("uolevi.txt"):
print "Tiedosto on olemassa!"
print "Koko:", os.path.getsize("uolevi.txt"), "tavua"
else:
print "Tiedostoa ei ole olemassa!"Tässä on ohjelman mahdollisia tulostuksia:
Tiedosto on olemassa! Koko: 153 tavua
Tiedostoa ei ole olemassa!
Seuraava ohjelma listaa ohjelman hakemiston tiedostot ja alihakemistot:
# -*- coding: latin-1 -*-
import os
for tiedosto in os.listdir("."):
if os.path.isfile(tiedosto):
print "tiedosto", tiedosto
if os.path.isdir(tiedosto):
print "hakemisto", tiedostoOhjelman tulostus voi olla seuraava:
hakemisto kuvat tiedosto laskin.py tiedosto lista.py tiedosto nimi.py tiedosto rivit.txt tiedosto tarina.txt hakemisto vara tiedosto viesti.py
Moduulin os avulla voi myös suorittaa komennon käyttöjärjestelmässä.
Seuraava ohjelma käynnistää Pasianssi-pelin Windows-ympäristössä:
# -*- coding: latin-1 -*-
import os
os.system("sol.exe")Seuraava ohjelma kopioi tiedoston Linux-ympäristössä:
# -*- coding: latin-1 -*-
import os
os.system("cp vanha.txt uusi.txt")Moduulin urllib avulla voi hakea tietoa Internetistä.
Seuraava ohjelma hakee nettisivun Ohjelmointiputkan palvelimelta:
# -*- coding: latin-1 -*-
import urllib
osoite = "https://www.ohjelmointiputka.net/tiedostot/henrikki.html"
sivu = urllib.urlopen(osoite)
rivit = sivu.readlines()
for rivi in rivit:
print rivi,Ohjelman tulostus on seuraava:
<html> <head> <title>Henrikin sivu</title> </head> <body> <h1>Henrikin sivu</h1> <p><i>Henrikki on urhea ritari,<br> syntynyt vuonna 1672 kaukana täältä.<br> Henrikki on tämän pelin sankari.<br> Nyt Henrikki on 25 vuotta vanha,<br> eletään vuotta 1697 siis.</i></p> </body> </html>
Moduulin re avulla voi käyttää säännöllisiä lausekkeita merkkijonojen käsittelyssä.
Säännöllinen lauseke on kuvaus merkkijonon rakenteesta. Säännöllisen lausekkeen avulla voi esimerkiksi tarkistaa, onko merkkijono oikeanmuotoinen, tai etsiä tekstistä tietynlaisia merkkijonoja.
Lisää tietoa säännöllisistä lausekkeista on esimerkiksi seuraavalla sivustolla:
http://www.regular-expressions.info/
Seuraava ohjelma tarkistaa käyttäjän antaman päivämäärän:
# -*- coding: latin-1 -*-
import re
paivays = raw_input("Kirjoita päivämäärä: ")
if re.match("[0-9]{1,2}.[0-9]{1,2}.[0-9]{4}", paivays):
print "Muotoilu on oikea!"
else:
print "Muotoilu on väärä!"Tässä on ohjelman mahdollisia tulostuksia:
Kirjoita päivämäärä: 25.10.2009 Muotoilu on oikea!
Kirjoita päivämäärä: kappas Muotoilu on väärä!
Kirjoita päivämäärä: 123.123.123 Muotoilu on väärä!
Tässä säännöllinen lauseke [0-9]{1,2}.[0-9]{1,2}.[0-9]{4} vaatii, että merkkijonossa on ensin 1–2 numeroa, sitten piste, sitten 1–2 numeroa, sitten piste ja lopuksi 4 numeroa (eli kyseessä on päivämäärä).
Seuraava ohjelma etsii tekstistä kaikki luvut:
# -*- coding: latin-1 -*-
import re
teksti = "Henrikki syntyi vuonna 1672 ja on 25 vuotta."
luvut = re.findall("[0-9]+", teksti)
for luku in luvut:
print lukuOhjelman tulostus on seuraava:
1672 25
Tässä säännöllinen lauseke [0-9]+ vaatii, että merkkijono muodostuu numeroista 0–9 ja siinä on ainakin yksi merkki (eli kyseessä on luku).
Huomio! Kommentoi tässä ainoastaan tämän oppaan hyviä ja huonoja puolia. Älä kirjoita muita kysymyksiä tähän. Jos koodisi ei toimi tai tarvitset muuten vain apua ohjelmoinnissa, lähetä viesti keskusteluun.