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", tiedosto
Ohjelman 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 luku
Ohjelman 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.