HUOM! Voit itse lisätä ja muuttaa sisältöä muokkaa-painikkeiden avulla

 Olet itse vastuussa tämän teoksen käytöstä aiheutuvista vahingoista Lue lisää.

Python

Kohteesta Wikikko - kansan taitopankki
Siirry navigaatioon Siirry hakuun

Sisällysluettelo

Yleistä[muokkaa]

Sivu käsittelee Python 3 -ohjelmointikieltä. Python on olio-ohjelmointikieli jota käytetään ja kehitetään aktiivisesti (2013). Sillä kirjoitettuja tai osittain ovat esimerkiksi Dropbox, Gmail ja Google Maps. Jos olet kiinnostunut tietokoneohjelmien tekemisestä, näiden sivujen ohjeilla pääset alkuun. Wikikko sisältää useamman Python sivun. Tämä on aloitussivu, josta on linkit muille sivuille. Jokainen sivu on myös luettavissa itsenäisesti, mutta tällä sivulla on Pythonin alkeet ja muilla kehittyneempiä toimia.

"Elämäni ensimmäinen tietokoneohjelma" - Ohjelmointi on näin helppoa[muokkaa]

  • Lataa kohdasta Lataus ja asennus Python (tämä ei ole vielä ohjelmointia)
  • Käynnistä se ja paina cmd-n tai ctrl-n
  • Kirjoita avautuvaan tyhjään ruutuun ohjelma: print("Ensimmäinen ohjelmani.")
  • Paina F5 ja tallenna ohjelma (tai Run / Python Module)
  • Ohjelma tulostaa Ensimmäinen ohjelmani. Siinä on ensimmäinen tietokoneohjelmasi ja kaikki mitä tällä sivulla on kerrottu on sitten vain ohjelmointia joilla saadaan jotain muuta aikaiseksi - mitä ikinä sitten keksitkään.

Lataus ja asennus[muokkaa]

Ilmaisen tulkin (interpreter) voi asentaa omalle koneelle tai kokeilla esimerkiksi oheisen linkin, codecademyn kautta selaimessa toimivaa tulkkia.

  • http://www.python.org
  • Huomaa että Python 2 ja 3 välillä on selkeitä eroja. Tämän sivun ohjeet ja esimerkit on versiolle 3.

Mac[muokkaa]

HUOM! Mavericks päivitys voi aiheuttaa ettei kursori näy editorissa tai asennettu Python 3.3 ei käynnisty kuin päätteen kautta.

  • Toimiva Python löytyy osoitteesta https://www.python.org/downloads/
  • Yosemitessa on valmiina Python 2.7 versio (13.8.2015). Asenna normaalisti Python 3 joka löytyy tämän jälkeen Ohjelmat -kansiosta. Pääte puolella jos kirjoitat python käynnistyy vanha 2 versio. Antamalla komennon python3 käynnistyy asentamasi uusi python 3 versio. ctrl-z lopettaa.
  • jos haluat tehdä uudelleenohjauksen, jolloin python sana avaa automaattisesti python3:sen, anna päätteessä komento
touch ~/.bash_profile
open ~/.bash_profile
avautuu ikkuna johon kirjoita: alias python="python3"   ja tallenna ja sulje tiedosto
lopeta Pääte ja käynnistä se uudestaan ja anna komento python niin python3 avautuu
  • Jos haluat käyttää pythonia Xcoden kautta katso ohje Python ja Xcode
  • Pääte-ohjelmassa ajo: python ohjelmannimi.py
  • Pääte-ohjelmassa Python versio: python -V

Virtualenv ja virtualenvwrapper[muokkaa]

Katso myös Mac vinkit kohta Virtualenv ja virtualenvwrapper jos haluat luoda projekteille erillisen ympäristön.

Opetusohjelmia ja luettavaa[muokkaa]

Englannin kielistä sanastoa[muokkaa]

parentheses = sulkumerkit

Kirjoja[muokkaa]

Learning Python 5. painos

IDLE[muokkaa]

Kaksi eri ikkunaa:

  • Shell -ikkuna, interaktiivinen ikkuna, tulkki >>>> Tulkkiin voi myös suoraan kirjoittaa laskutoimituksia, komentoja, ajaa pohjaksi aliohjelmia tai asettaa muuttujia.
  • Editori -ikkunassa kirjoitetaan ohjelmia. Ohjelman suorittaminen tapahtuu editorista F5 tai Run/Python Module . Jos ohjelmaan on tehty muutoksia pyydetään aina ensin tallentamaan ellet vaihda asetusta asetuksissa.
    • Editori-ikkunaan pääset Shell-ikkunasta cmd-n (ctrl-n) tai File/New file
  • Tiedostojen pääte on .py
  • Shell-ikkunassa help() tai help(apuohjelmannimi) avaa help-toiminnon. Pois quit -komennolla.

Huomioitavaa ja vinkkejä[muokkaa]

  • Ohjelman suoritus alkaa ensimmäiseltä riviltä, tyhjiä tai # -alkuisia rivejä ei huomioida
  • Isot ja pienet kirjaimet ovat eri asia !
  • Jos käytät Python 2 aloita ohjelma seuraavilla riveillä eli sisältää # merkin ja tulee siis aivan ensimmäiseksi editorissa. Python 3:ssa nämä eivät enää välttämättä ole tarpeellisia.
#!/usr/bin/python
# -*- coding: utf-8 -*-
  • Tämän sivujen esimerkeissä muuttuja1, 2 ja 3 seikkailevat esimerkeissä ja ovat täysin kuvitteellisia ja korvattavissa omilla.
  • ' on heittomerkki tai puolikas lainausmerkki. " on kokolainausmerkki
  • Macissa \ -viiva vaihto-alt-7 ja [ alt-8 ja { viahto-alt8 ja ~ alt ¨
  • Windowsissa \ AltGr-+ ja | AltGr-<
  • Välttääksesi esimerkiksi toisen sulkumerkin unohtuminen kannattaa aina tehdä samalla () ja siirtyä sen jälkeen sulkujen sisälle kirjoittamaan mitä tarvitaan.

Kommentointi ja usealle riville jakaminen[muokkaa]

  • Yhteenkuuluvat asiat koodissa voivat muodostaa lohkon. Esim. ohjelman nimi, kuvaus, tekijä, pvm, muutos tekijä-pvm-kuvaus, muuttujien esittely, alustukset, syötteet, laskenta, tulostus, lopetus.
  • Tyhjää riviä tai # -merkin (comment) jälkeen kirjoitettua tulkki ei käsittele mutta se helpottaa ihmisiä ymmärtäämään koodia (hash, pound). Voi alkaa rivin tai vasta myöhemmin rivillä.
  • """ kommentteja jotka voivat olla useilla riveillä""" (kolme peräkkäistä sitaattia). Tämä kommentti saadaan näkyviin komennolla help(apuohjelmannimi) Shell-ikkunassa.
muuttuja1 = "Tämä teksti tulostuu \
ajettaessa yhdelle riville, mutta on editorissa katkaistu kahdelle riville '\' -merkillä"

Sisennys (indent)[muokkaa]

  • Python käyttää sisennystä (whitespace), jonka kanssa on oltava ehdottoman tarkka jotta ohjelma toimii. Kaksoispisteen ( : ) jälkeen tulee yksi sisennys eli pääsääntöisesti 4 tyhjää välilyöntiä. Sisennys tulee automaattisesti rivinvaihtoa painettaessa tai sarkain-näppäintä painettaessa tai painettaessa 4 kertaa välilyöntiä. Älä sekoita tabulaattorilla ja välilyönneillä tehtyjä sisennyksiä samaan koodiin, käytä johdonmukaisesti jompaa kumpaa. Sisennyksiä voi olla useita peräkkäin, esimerkiksi 8 välilyöntiä.
  • Samaan ryhmään kuuluvat loogiset rivit siis samalle sisennykselle.
  • Sisennyksen sijaan voidaan jatkaa myös suoraan kaksoispisteen ja sitä seuraavan välilyönnin jälkeen esimerkiksi while muuttuja1 == 1: print("Teksti")

Muuttujat (variables)[muokkaa]

  • Muuttuja on yksittäinen arvo, se voidaan määritellä ensimmäisen kerran ja uudestaan missäkohdin vain ohjelmaa. Muuttujaan voidaan sijoittaa jotain talteen, jota käytetään myöhemmin. Numeron päälle voi esimerkiksi yleensä tallentaa tekstiä kesken kaiken. Tietotyyppien kanssa tulee olla tarkka.
  • Esimerkiksi: muuttuja1 = 5 # muuttuja1 kutsutaan esimerkiksi kiintoarvoksi jolla on arvo 5. Muuttujalla on yksi arvo, jota muutetaan tarpeen mukaan. Jos sitä käytetään lyhytaikaisesti sitä kutsutaan tilapäissäilöksi. Muuttujan nimi alkaa aina kirjaimella tai alaviivalla, eikä ääkkösiä tule mielellään käyttää.
  • Muuttujat ovat jotain seuraavista tyypeistä. Muuttujia voidaa muuttaa edes takaisin. Muuttuja voidaan muuttaa esimerkiksi vain print komennon yhteydessä tai pysyvämmin tallentamalla se uudestaan samaan muuttujaan (esim. muuttuja1 = int(muuttuja1)
  • merkkijono (string): muuttuja1 = "tekstiä"
    • str muuttaa syötetyn merkkijonoksi. Esim. str(1) antaa '1'
  • kokonaisluku (integer, d): muuttuja1 = 1 tai muuttuja1 = -1
    • int muuttaa liukuluvun kokonaisluvuksi pyöristämällä poistamalla pilkun jälkeisen osan
    • int muuttaa merkkijonossa olevan luvun kokonaisluvuksi
    • muuttuja1 = int(1.1) tai muuttuja1 = int(muuttuja2)
    • tai sisällytetään suoraan input komentoon: muuttuja1 = int(input("Anna kokonaisluku: "))
  • liukuluku eli desimaaliluku (fractional number, f): muuttuja1 = 1.111 (pilkkua ei hyväksytä)
    • float muuttaa desimaaliluvun liukuluvuksi: muuttuja1 = float(muuttuja2)
    • float muuttaa merkkijonossa olevan luvun liukuluvuksi
    • tai kokonaisluvusta tehdään liukuluku float(1) tekee 1.0
  • kompleksiluku (1.1 - 2.1j)
  • (boolean): muuttuja = True tai muuttuja = False Älä käytä " tai ' -merkkejä ja ensimmäinen kirjain on iso kirjain
  • murtolukuja voidaan käsitellä esimerkiksi laskutoimituksin
import fractions
print(fractions.Fraction(1, 4))    # Tulostaa 1/4

Jäsenfunktio l. metodi[muokkaa]

Merkintätapaa .metodi kutsutaan pistenotaatio (dot notation) ja se on sidottu siihen liittyvään muuttujaan tai tekstiin. Toisin sanoen yhdistää muuttujan ja funktion eli aliohjelman pisteellä. Katso myös kohdat Lista ja Tulostus (print)

muuttuja1 = open("tiedostonimi.txt", "w")
muuttuja1.write("teksti")
muuttuja1.close()
luo tiedoston nimeltä tiedostonimi.txt ja kirjoittaa siihen sanan teksti

Sijoituslauseet[muokkaa]

Operaattori on esimerkiksi = -merkki. Lauseke on esimerkiksi laskutoimitus. ja esimerkiksi + on arithmetic operator. Tulkki suorittaa ensin toimenpiteen = -merkin oikealla puolella ja sijoittaa sitten tuloksen vasemmalle puolen.

  • muuttuja1 = muuttuja1 +muuttuja2 # on sama kuin:
    • muuttuja1 += muuttuja2
    • muuttuja1 += float(input("Anna: ")) # toimii suoraan myös input-käskyn kanssa eli lisää muuttuja1 olemassaolevaan arvoon syötteen
  • muuttuja1 = muuttuja2 = muuttuja3 #muuttuja1 ja muuttuja2 arvoksi tulee muuttuja3 arvo
  • muuttuja1= muuttuja2 + 50
  • muuttuja1 = muuttuja2 + muuttuja3
  • muuttuja1 = muuttuja1 * 5 # viisinkertaistaa muuttuja1 arvon ja sijoittaa sen uudeksi muuttuja1 -arvoksi
  • muuttuja1 = muuttuja1 ** 3 # potenssiin (squared) eli muuttuja1 * muuttuja1 * muuttuja1
  • print("teksti") * 2 # tulostaa tekstiteksti
  • 7 // 5 # tasajako eli 5 menee seitsemään 1 kerran, antaa arvon 1 eli montako kertaa meni
  • 20 % 7 # jakojäännös (modulo) eli 7 menee kahteenkymmeneen kaksi kertaa (14) ja jäljelle jäävä arvo tulostetaan eli 6 (20-14).
  • muuttuja1 = "Teksti"[2] # asettaa muuttuja1 -arvoksi k -kirjaimen. T=0, e=1, k=2 jne.)
  • muuttuja1 = len("Tämän tekstin pituus tai tämän sijaan olevan muuttujan pituus ilmoitetaan numeroina muuttujassa1")
  • Kolme sitaattimerkkiä alkaa tekstialueen johon eri editorin riveillä oleva teksti sisältyy kunnes se päätetään taas kolmella sitaattimerkillä. \-viiva estää rivinvaihdon. Sitaatti ei ole se merkki joka tulee shift-2.
muuttuja1 = sitaattisitaatisitaatti\
rivi1
rivi2
sitaattisitaatisitaatti

Operaattoreita[muokkaa]

  • < > <= >= == != (erisuuri kuin) ovat vertailuja
    • muuttuja1 < muuttuja2 < muuttuja3 # mutta selkeämpi: (muuttuja1 < muuttuja2) and (muuttuja2 < muuttuja3)
  • Boolean-operaattorit: not (negaatio), and (yhdistämisoperaatio), or (yhdistämisoperaatio), in (sisällytysoperaatio)
    • True tai False
    • if (muuttuja1 in [muuttuja2, muuttuja3]): # testaa onko muuttuja1 annetussa listassa

Suoritusjärjestys[muokkaa]

  • Operaattorit suoritetaan tietyssä järjestyksessä jos niitä on useampia samassa lausekkeessa. Jos ne ovat saman tasoisia suoritetaan ne pääsääntöisesti vasemmalta oikealle. Poikkeus esimerkiksi sijoitusoperaattori.
  • ENSIMMÄISENÄ SUORITETTAVA merkkijonomuunnos, ... , funktiokutsu, leikkaus, jäsenyyden haku, ... , potenssi, ... , kertominen jakaminen jakojäännös, vähennys lisäys, vertailut, tyyppitesti, ... , boolean not, boolean and, boolean or VIIMEISENÄ SUORITETTAVA

Lista (olio)[muokkaa]

Lista on muuttujassa oleva useamman alkion muodostama lista eli muuttujan rooli on säiliö. Lista on [ ] - merkkien sisällä pilkuilla eroteltuna. Sen pituus elää tarpeen mukaan. Listan alkioiden järjestys lähtee nollasta.

  • muuttuja1 = [] # tyhjä lista
  • muuttuja1 =[1,2] # muuttuja1 sisältää listan arvoilla 1 ja 2
  • muuttuja1[1] = 3 # listan toinen alkio saa arvon 3
  • muuttuja1 = ["Teksti1", "Teksti2"] # muuttuja1 sisältää listan merkkijonoilla Teksti1 ja Teksti2
  • muuttuja1 = [["Teksti1",1],"Teksti2"] # muuttuja1 sisältää listan joka sisältää listan ja merkkijonon
    • print(muuttuja1[0][1]) # tulostaa edellisen esimerkin listasta numeron 1
  • merkkijonosta listan tekeminen katso Merkkijonojen metodeja kohta split
    • esim. muuttuja1 = strsyote.split(".")
  • Merkkijonolistan muuntaminen liukulukulistaksi
lista = [float(i) for i in lista]   # int tekee kokonaislukulistan

Listan käsittely[muokkaa]

  • print(muuttuja1) # tulostaa listan
  • print(muuttuja1[0]) # tulostaa muuttuja1-listan ensimmäisen alkion, viittaus indeksillä
  • print(len(muuttuja1)) # tulostaa alkioiden määrän
  • print(muuttuja1[-1]) # tulostaa listan loppupäästä ensimmäisen alkion
  • print(muuttuja1[0:2]) # tulostaa listan määritellyt alkiot annetulla välillä, lopetus haluttu alkio+1
# Tulostaa listan sisällön
muuttuja1 = ["alkio1", "2"]
    for i in muuttuja1: print(i)

# Laskee listan arvot yhteen
lista = [1,2,3]
muuttuja1 = 0
for i in lista:
    muuttuja1 += i
# Tulostaa 234
muuttuja1 = ["alkio1", "012345"]
print(muuttuja1[1][2:5])
  • print(str(lista)[1:-1]) # testaamatta toimiiko
  • del muuttuja1 # poistaa listan
  • del muuttuja1[1] # poistaa muuttuja1 -listalta toisena olevan alkion
muuttuja1 = ["Teksti1","Teksti2","Teksti3","Teksti4"]
del muuttuja1[1:2]   # poistaa määritellyltä alueelta eli Teksti2 -alkion
  • Lista funktioiden kanssa, katso kohta Aliohjelmat ja funktiot

Listan jäsenfunktioita[muokkaa]

  • muuttuja1.append(5) # lisää listan loppuun alkion 5
  • muuttuja1.insert(len(muuttuja1), "5") # lisää listan loppuun alkion 5
  • muuttuja1.insert(1,5) # lisää listan toiseksi arvoksi 5
  • muuttuja1.append(lista2) # lisää muuttuja1-listaan sen loppuun lista2 alkiot yhtenä alkiona
  • print(muuttuja1.count("Teksti2")) # tulostaa lukumäärän kuinka monta kertaa Teksti2 on listalla, jos ei löydy niin antaa virheilmoituksen
  • muuttuja1.extend(lista2) # lisää muuttuja1-listaan sen loppuun lista2 alkiot erillisinä alkioina
  • print(muuttuja1.index("Teksti2")) # tulostaa alkion Teksti2 sijantinumeron, jos ei löydy niin antaa virheilmoituksen
  • print(muuttuja1.pop()) # poistaa viimeisen alkion
  • print(muuttuja1.pop(1)) # poistaa toisen alkion
  • muuttuja1.remove(5) # poistaa ensimmäisen alkion joka on numero 5, jos ei löydy niin antaa virheilmoituksen
  • muuttuja1.reverse() # kääntää listan toisin päin
  • muuttuja1.sort() # järjestää listan. () järjestää ensimmäisen rivillä olevan alkion mukaan eli jos esimerkiksi lista koostuu riveistä, joilla on nimi,osoite

Tuple (lista)[muokkaa]

Rakenne on kuin lista, mutta alkiot kiinteitä eli sitä ei voida muuttaa. Tuple on ( ) - merkkien sisällä pilkuilla eroteltuna. Katso myös kohta Aliohjelma ja lista.

muuttuja1 = ("Teksti2", "Teksti3")
muuttuja2 = ("Teksti0","Teksti1", muuttuja1)   # lisää edellisen esimerkin muuttuja1-tuplelistan muuttuja2-tuplelistaan
print(muuttuja2[2][1])   # tulostaa Teksti3 eli muuttuja1 listasta toisen alkion
muuttuja1 = ("Teksti2", "Teksti1")
print(sorted(muuttuja1))   # järjestää tuplelistan

muuttuja1 = (("Teksti2", "T1"), ("Teksti1","T2"))
print(sorted(muuttuja1, key=lambda muuttuja1: muuttuja1[1]))   # lajittelee T1, T2 -arvojen mukaan
print(sorted(muuttuja1, key=lambda muuttuja1: muuttuja1[1], reverse=True))   # lajittelee T1, T2 -arvojen mukaan käännettynä

Sanakirja (associative array)[muokkaa]

Koostuu avaimista (key) ja arvoista (value). Luodussa sanakirjassa on vain yhdenlaisia avaimia. Tuple on { } - merkkien sisällä. Avaimien järjestyksellä ei ole väliä.

  • muuttuja1 = {avain1 : arvo1, avain2 : arvo2}
muuttuja1 = {"avain1" : "arvo1",
             "avain2" : "arvo2"
             }
print(muuttuja1["avain2"])   # tulostetaan avain2 arvo
muuttuja1["avain3"] = "arvo3"   # lisätään uusi avain sanakirjaan
del muuttuja1["avain1"]   # poistetaan avain1 sanakirjasta
for i,x in muuttuja1.items():   # sanakirjan tulostussilmukka
    print("{0} on {1}".format(i,x))
if "avain3" in muuttuja1:
    print("Haettu avain sanakirjassa")

Syöttö input()[muokkaa]

Tieto näppäimistöltä otetaan yksinkertaisimmillaan muuttujiin input -komennolla. Kaksoispisteen jälkeen jätetään yleensä selkeyden vuoksi yksi välilyönti.

  • muuttuja1 = input("Syötä merkkijono: ") # nk. syöttölause, jossa kehote on Syötä merkkijono: ja syöte tallentuu merkkijonona eli str:nä
  • muuttuja1 = int(input("Syötä merkkijono: ")) # syötetty arvo tallentuu kokonaislukuna, esim. 5
    • if muuttuja1 == "1": # numero syötettiin merkkijonoja, joten sitä pitää käsitellä myös merkkijonona
  • HUOM! Jostain syystä len ei välttämättä anna oikeaa arvoa jos copy-pastetat sen editoriin tai annat input-komennolle suoritusvaiheessa. Jos epäilet väärää lenin antamaa pituutta, kokeile syöttää teksti käsin. Tämä voi aiheuttaa hämmennystä kun ohjelma näyttää oikein kirjoitetulta, mutta tulos ei ole haluttu. Yleensäkin virheitä etsiessä tällaisiin asioihin on kiinnitettävä huomiota, eikä välttämättä ensimmäisenä todettava että on kirjoittanut koodin väärin.

Olio ja luokka[muokkaa]

Katso sivu Python oliot

Valikkorakenne[muokkaa]

Valikoissa kannattaa ottaa valinta merkkijonona sisään ja testata sitä merkkijonona.

def valikko():
    print("Valikko:")
    print("1 Toiminto1")
    print("0 Lopetus")

# Tämä tulostaa ensin valikon ja kysyy sitten
def valinta():
    while True:
        valikko()
        muuttuja1 = input("Valinta: ")
        if muuttuja1 == "1": 
            aliohjelmaan()
        elif muuttuja1 == "0": # HUOM! Kaikki valinnat elif
            break
        else:
            print("Väärä valinta.")
valinta()

# Tämä tulostaa ensin kysymyksen ja tarvittaessa valikon
    while True:
        muuttuja1 = input("Valinta: ")
        if muuttuja1 == "1":
            aliohjelmaan()
        elif muuttuja1 == "0":
            break
        else:
            valikko()

Tulostus print()[muokkaa]

Print -komento tulostaa annetun tekstin tai muuttujissa olevaa tekstiä

  • print("Tulosta tämä teksti") # print on funktio (aliohjelma) ja Tulosta tämä teksti on funktiolle lähetetty merkkijono. Voi käyttää myös ' -merkkejä " -merkkien sijaan.
  • print(muuttuja1)
  • print(muuttuja1, muuttuja2)
  • print(6+6)
  • print(muuttuja1 + muuttuja2)
  • print("Syötit", muuttuja1, "arvon.") # esimerkiksi Syötit 5 arvon. Huomaa että jättää välilyönnit automaattisesti
  • print("Syötit", muuttuja1 + muuttuja2, "arvon yhteensä") # ei muuta muuttujien arvoja
  • print("Tulosta teksti " + "toinen teksti") # Tulostaisi yhteen pötköön ellei teksti sanan perässä olisi välilyöntiä
  • print ("Tulostan tekstiä ja väliin numeroarvon " + str(5) + " ja taas tekstiä")
  • print("Teksti", muuttuja + ".") # jättää välin Teksti-sanaan, mutta tulostaa pisteen kiinni muuttujan arvoon. Vrt. print("Teksti", muuttuja, ".") jolloin pisteen edessä väli.
  • print (str(muuttuja1) + "tekstiä") # tulostaa muuttuja1 arvon merkkijonona
  • print("Tulosta \"tekstiä lainausmerkeissä\" lisäämällä niiden eteen kenoviiva")
  • print('Tulosta heittomerkki lisäämällä kenoviiva \' heittomerkin eteen')
  • print('Tulosta "tekstiä lainausmerkeissä" käyttämällä heittomerkkejä print-funktiossa tai päinvastoin') # Ristiin niitä ei voi käyttää
  • print("Tulosta teksti", end=" ") # end=" " liittää seuraavan print-komennon Tulosta teksti -rivin jatkoksi jättäen välin koska määritelty = " "
  • print("\nTämä tekee rivinvaihdon ennen tätä tekstiriviä") # \n on rivinvaihto
  • print("\tSisennetty eka rivi\n\tSisennetty toka rivi")
  • print ("Tulostan tekstiä ja väliin muuttuja1:n numeroarvon " + str(muuttuja1) + " ja taas tekstiä") # huomaa että + tulostaa yhteen ilman välilyöntejä, joten ne pitää erikseen antaa
  • print ("Tulostetaan muuttuja1 arvo %s ja muuttujan2 arvo %s." % (muuttuja1, muuttuja2))
  • print (type(muuttuja1)) # tulostaa muuttuja1:n tyypin
  • print(abs(muuttuja1)) # antaa luvun itseisarvon eli -3 on 3
  • print(max(muuttuja1)) tai min(1, 2, 3) # suurin tai pienin arvo
  • print(sum(muuttuja1)) # laskee muuttuja1 sisältämät arvot yhteen
  • round(muuttuja3) tai round(muuttuja3, 2) # pyöristää luvuksi ilman desimaaleja tai määritellään kuinka monta desimaalia, mutta ei kuitenkaan tulosta ylimääräisiä nollia

Muotoilu Format()[muokkaa]

Tulostuksen muotoilu esimerkiksi print-komennon yhteydessä tai kirjoitettaessa tiedostoon.

  • kokonaisluku d, liukuluku f, merkkijono s, merkki c
  • useammat muuttujat tulostetaan samassa järjestyksessä kuin ne ovat tekstissä ja pilkulla erotettuna format -kohdassa
  • print("Arvo {0:d} on kokonaisluku".format(muuttuja1)) # tulostaa muuttujan1 kokonaislukuna (d)
  • print("Liukuluku kahdella desimaalilla {0:4.2f}".format(muuttuja1)) # 0 viittaa muuttuja1:seen, 4 kentän pituus, 2 desimaalien määrä, liukuluku (f). Jos kentän pituutta ei ole, se määritellään automaattisesti sopivaksi
  • print("Liukuluvut kahdella ja kolmella desimaalilla {0:4.2f} ja {1:4.3f}".format(muuttuja1,muuttuja2)) # huomaa että Python ihan oikeasti pyöristää luvun eikä vain katkaise
  • print("%.2f" % muuttuja1) # tulostaa muuttuja1 arvon kaksidesimaalisena
  • muuttuja1 = "%.2f" % float(muuttuja2) # muuttuja1 saa kaksidesimaalisen arvon kun sille syötetään muuttuja2 merkkijonona
muuttuja1 = 1234.123456789
desimaalit = 3
print("{0:.{1}f} ".format(float(muuttuja1), desimaalit))

Merkkijonojen leikkaus[muokkaa]

Muuttuja tai teksti[aloituskohta:lopetuskohta:siirtymäväli] Mikä vain numeroista voidaan jättää pois. Laskenta alkaa aina NOLLASTA ja lopetusarvoon lisätään yksi. Negatiivinen luku lasketaan lopusta päin.

  • print(muuttuja[3])
  • print("Python"[2]) tulostaa t
  • print("Python"[2:5]) tulostaa tho
  • print("Python"[1:6:2]) tulostaa yhn
  • print("Python"[:2]) tulostaa Py
  • print("Python"[2:]) tulostaa thon
  • print("Python"[-1]) tulostaa n vrt. print("Python"[-0]) tulostaa P
  • print("Python"[-2:]) tulostaa on
  • print("Python"[::-1]) tulostaa nohtyP
  • print("F"+"Python"[1:]) tulostaa Fython

Merkkijonojen metodeja[muokkaa]

  • print("teksti".capitalize()) # tulostaa Teksti
  • print("tekstisana".endswith("sana")) # tulostaa True koska tekstisana päättyy sanaan sana
  • print("tekstisana".endswith("tis",4,7)) # Tulostaa True koska tis löytyy määritellyltä alueelta, laskenta alkaa 0:sta ja päättyy yhden"yli"
  • startswith kuten endswith mutta sanan alusta
  • print("tekstisana".find("tis")) # tulostaa arvon 4, koska tis-sanan t on neljännellä sijalla sanan alusta. Jos ei löydy arvo on -1. Aloitus- ja lopetuskohdan voi määritellä.
  • print("tekstisana".index("his")) # kuin find, mutta jos ei löydy antaa ValueError
  • print("teksti100".isalnum()) # tulostaa True koska kaikki ovat kirjaimia ja numeroita ja pituus vähintään 1 merkkiä. Erikoismerkit tulostaa False tai jos merkkijonon pituus on nolla
  • print("teksti".isalpha()) # tulostaa True koska kaikki ovat kirjaimia ja pituus vähintään 1
  • print("100".isdigit()) # tulostaa True koska kaikki ovat numeroita ja pituus vähintään 1
  • print("teksti".islower()) # tulostaa True koska kaikki ovat pieniä kirjaimia ja pituus vähintään 1
  • print("TEKSTI".isupper()) # tulostaa True koska kaikki ovat suuria kirjaimia ja pituus vähintään 1
  • print(" ".isspace()) # tulostaa True koska kaikki ovat välilyöntejä ja pituus vähintään 1
  • print(" 100 ".lstrip()) # poistaa edeltävät välilyönnit ja sisennykset ja tulostaa 100 ja välilyönnit sen jälkeen
  • print("teksti".lstrip('tes')) # poistaa määritellyt merkit alusta lähtien, tulostaa ksti
  • strip kuin lstrip mutta poistaa kummastakin päästä
  • muuttuja1 = muuttuja1.strip()
  • print("teksti".replace('ks','nt')) # tulostaa tentti
  • print("teksti teksti teksti".replace('ks','nt',2)) # tulostaa tentti tentti teksti
  • muuttuja1 = muuttuja1.replace(',', '.') # muuntaa pilkun pisteeksi
  • print (muuttuja1.lower()) # tulostaa muuttuja1:n tekstin pienillä kirjaimilla.
  • print (muuttuja1.upper()) # tulostaa muuttuja1:n tekstin isoilla kirjaimilla
  • print ("teksti isoiksi kirjaimiksi".upper())
  • print("1,2,3".split()) # tekee merkkijonosta listan ['1,2,3']
  • print("1,2,3".split(',')) # tekee merkkijonosta merkkijonolistan erotellen pilkulla ['1', '2', '3']
  • print("Teksti Teksti2".split()) # tekee merkkijonosta merkkijonolistan ['Teksti', 'Teksti2']

Päiväys ja aika[muokkaa]

from datetime import datetime   
muuttuja1=datetime.now()
print (muuttuja1)   # Tulostaa 2013-09-21 11:54:19.239336
print (muuttuja1.year)  # tulostaa vuoden. month kuukauden, day päivän jne.
print (str(muuttuja1.day)+"."+str(muuttuja1.month)+"."+str(muuttuja1.year))  # tuostaa esim. 21.9.2013
print (str(muuttuja1.hour)+":"+str(muuttuja1.minute)+":"+str(muuttuja1.second))  #tulostaa esim. 12:13:49

import datetime
muuttuja1 = datetime.datetime.now()
print(muuttuja1.strftime("%d.%m.%Y ja kello %H.%M")) # tulostaa esim. Päiväys 30.7.2013 kello 09:45
print(datetime.date.today() - datetime.date(2013,7,30))   # tulostaa päivämäärien välisen erotuksen päivinä, arvot int(), (counting days)

# Laskee kahden päivämäärän välillä olevien päivien lukumäärän
def paivaErotus():
    import datetime
    muuttuja1 = datetime.date(2000,1,1)
    muuttuja2 = input("Syötä pp.kk.vvvv: ")
    vvvv = int(muuttuja2[-4:])
    kk = int(muuttuja2[3:5])
    pp = int(muuttuja2[:2])
    print("Erotus",(muuttuja1 - datetime.date(vvvv,kk,pp)).days,"päivää")
paivaErotus()

Järjestäminen[muokkaa]

Numeroita sisältävien listojen järjestäminen niin että ne ovat 1,2,3,4 eikä 1,10,2,3,35,4... onnistuu sort() -funktiolla joka palauttaa sille annetun listan.

def numeroJarjestys(lista):
    lista.sort(key=int)
    return lista

lista = ["1","2","10"] # lajitellaan järjestykseen 1,2,10
numeroJarjestys(lista)
print(lista)

Jos - sitten - muutoin eli If[muokkaa]

"Jos väittämä on totta suoritetaan annettu tehtävä", muulloin suoritetaan mahdollisesti annettu else-rakenteen tehtävä tai jatketaan ohjelmaa normaalisti.

  • if: rakenteita voi olla yksi tai useampia sisäkkäin
  • elif: on vapaaehtoinen ja näiden peräkkäinen määrä on rajaton
  • else: on vapaavalintainen. Else ei hyväksy break -komentoa?
  • Peräkkäin toistuvat if -lauseet suoritetaan jokainen, kun taas if-elif-else rakenne suoritetaan yhtenä "pakettina". Tässä on siis merkittävä ero. Toisin sanoen if-elif-else -rakenteen suoritus loppuu kun löydetään True -arvo.
  • if muuttuja1 == int: teejotain else: teejotainmuuta
  • if muuttuja1 > 0: break # break seuraavalla rivillä sisennettynä kun halutaan lopettaa
  • if (muuttuja1 in [1,2,3]):
  • kutsutussa aliohjelmassa silmukan lopettaminen ja palaamineen kutsuneeseen aliohjelmaan esimerkiksi käyttäen return
Esimerkki
if muuttuja1 == 1:  # Huomaa kaksoispiste ja sisennys tai kaksoispiste väli ja heti perään
    print("Muuttuja on 1")
elif muuttuja1 > 1:
    print("Muuttuja on suurempi kuin 1")
else:
    print("Muuttuja on pienempi kuin 1")
print("Jatketaan ohjelman suoritusta")

Kun While - break - continue[muokkaa]

Alkuehtoinen toisto. Testataan heti aluksi lähdetäänkö toistosilmukkaan ollenkaan. Silmukan ehkä ymmärtää helpommin kun esittää itselle kysymyksen jossa käyttää "kun" sanaa. While:ia ei voi korvata aina For-silmukalla. On suositeltavampaa käyttää while True: sijaan while ehto:

# Päättymätön silmukka, joka loppuu ctrl-c
muuttuja1=1
while (muuttuja1):   # kun muuttuja1 on 1 eli kyseessä on True niin tulostetaan Teksti
print("Teksti")
# 5 kertaa toistava silmukka
muuttuja1 = 0
while muuttuja1 < 5:
    print("Teksti")
    muuttuja1 = muuttuja1 + 1
# Kysyy lukuja ja lopettaa vasta arvolla 0
muuttuja1 = 1
while muuttuja1 != 0:   # Kun annettu arvo ei ole nolla kysytään uudestaan
    muuttuja1 = int(input("Anna positiivinen luku (0 lopettaa): "))
    print("Kiitos")
# Kysyy arvoa kunnes välillä 0-100 ja ilmoittaa jos ei ole
while True:
    muuttuja1 = int(input("Anna luku väliltä 0-100: "))
    if muuttuja1 < 0 or muuttuja1 > 100:
        print("Ei ole sallittu arvo")
    else: break

# Kysyy numeroa kunnes 1
while True:
    muuttuja1 = input("Anna joku numero (1 lopettaa): ")
    if muuttuja1 == "1":
        break
# Kysyy liukulukua, palauttaa sen, eikä kaadu virhesyötteisiin
def funktionimi():
    while True:
        try:
            muuttuja1 = float(input("Luku: "))   # vaihtoehtoisesti esim. int
            return muuttuja1
        except Exception:   # vaihtoehtoisesti except ValueError:
            print("Virhe")
funktionimi()

Askeltava toisto For - break - continue[muokkaa]

Toistaa annetun määrän silmukkaa. Toistoa ei voi muuttaa sen toiminnan aikana. For-silmukan voi korvata while:lla.

  • break pysäyttää toiston sekä myös estää for:iin liitetyn else-osion.
  • continue pysäyttää meneillään olevan kierroksen ja siirtyy seuraavalle kierrokselle (myös while:ssa)
  • for i in range(len(muuttuja1)):
# Tekee sisennetyn toiminnon 5 kertaa, muuttujan i rooli on askeltaja, i voi olla muunkin niminen
for i in range(0, 5):
    toimintotähän
# Silmukan raja-arvot määritellään muuttujilla
for i in range(muuttuja1, muuttuja2 + 1):
    print(i)
# Toistaa kysymyksen 5 kertaa ellei lukua 2 arvata
muuttuja1 = 2
for i in range(0, 5):
    muuttuja1 = int(input("Arvaa luku: "))
    if muuttuja1 == 2:
        break

Sisäkkäiset askeltavat toistot[muokkaa]

for muuttuja1 in range (1,3):
    for muuttuja2 in range (1,3):
        print(muuttuja1, muuttuja2)

Range()[muokkaa]

range(alku,loppu,askel). Toimii myös minus -arvoilla. Viimeinen: päättyväarvo+1

  • range(5) # sisältää [0, 1, 2, 3, 4] arvot. Huomaa että 5 ei kuulu joukkoon.
  • range(2,4) # sisältää [2, 3] arvot.
  • range(0,5,2) # sisältää [0, 2, 4] arvot.

Aliohjelmat ja funktiot[muokkaa]

Aliohjelmat ovat ohjelmia, joita pääohjelma tai toiset aliohjelmat kutsuvat. Koko .py tiedosto voi olla pelkkiä aliohjelmia, joista joku aliohjelma sisältää "pääohjelman". Aliohjelma määritellän def ja sitä kutsutaan nimellä. Esimerkiksi print() on myös aliohjelma, joka tulee Pythonin mukana valmiina. Näitä aliohjelmia on paljon ja ne on koottu aliohjelmakirjastoihin Pythonin sisään ja niitä voi ladata internetistä ja uudelleenkäyttää omiin tarkoituksiin. Aliohjelmat kirjoitetaan pienellä alkukirjaimella ja kuvaavalla nimellä, esimerkiksi pratkaHiiri. Huomaa että kaksiosaisen nimen toinen alkukirjain on tapana kirjoittaa isolla. Aliohjelma pitää olla ennen kutsuvaa kohtaa eli usein ne ovat tiedoston alussa. Tällöin Python rekisteröi niiden olemassaolon, mutta suorittaa vasta niitä kun kutsutaan. Kutsu voidaan tehdä myös komentotulkista kun ohjelma on kertaalleen ajettu. Aliohjelma sisältää mielellään yhden tietyn toiminnon, ei erilaisia toimintoja.

Aliohjelmia voidaan kutsua antamalla niille tarpeen mukaan parametrejä, joita se käyttää. Jos aliohjelma palauttaa kutsuneelle ohjelmalle arvoja, sitä kutsutaan funktioksi. Aliohjelmilla on omat nimiavaruudet eli muuttuja1 on eri aliohjelma1:ssä ja aliohjelma2:ssa vaikka muuttujan nimi muuttuja1 on sama. Globaaleja eli kaikille yhteisiä muuttujien käyttämistä on vältettävä sekaannuksien vuoksi, mutta se on mahdollista.

  • Aliohjelmassa muutetaan aliohjelmien yhteistä (globaalia) muuttujaa kertomalla aliohjelmalle sen käytöstä komennolla global muuttuja1, muuttuja2 Tämä pitää lisätä jokaiseen aliohjelmaan erikseen missä yhteisiä muuttujia halutaan muuttaa. Muuttujiin tehdyt listat taas kannattaa siirtää funktiokutsussa funktionimi(listanimi)
    • global toimintoa voidaan käyttää yksisuuntaisena lippuna eli esimerkiksi kun listaan tehdään muutos asetetaan lipun arvoksi 1 ja yritettäessä lopettaa ohjelma tai ladata tiedostosta listaa saman listan päälle katsotaan onko lipun arvo 1 vai 0 ja pyydetään tämän mukaan varmistus.
  • Älä kutsu samaa aliohjelmaa saman aliohjelman sisältä return:lla eli älä käytä rekursiivista kutsua returnilla aliohjelmaan jossa toiminta tapahtuu eli esim. return Samaaliohjelmajossareturn() (KIRJOITETTAVA SELKEÄMMIN)
  • Ei tarvitse välttämättä olla return viimeisenä. Returnilla palautetaan arvoja kutsuneeseen aliohjelmaan tai voidaan keskeyttää aliohjelma.
# Suorittaa tulostustehtävän ilman lähtöparametrejä
def aliohjelmannimi():
    print("jokin tehtävä")
aliohjelmannimi()
# Muuttuja2 saa funktiolta takaisin muutuja1:n arvon
def funktionimi():
    muuttuja1 = input("Syötä tekstiä: ")
    return muuttuja1
muuttuja2 = funktionimi()
# Useampi lähtöparametri ja niiden palautus useampaan muuttujaan
def funktionimi(muuttuja1, muuttuja2):
    return muuttuja1 * 2, muuttuja2 + 2
palaute1, palaute2 = funktionimi(300, 200)
# Returniin yhdistetty toiminto
def syotteenpyytavafunktio()
    return input("Anna syote: ")
# Lähetetään tulostettava teksti
def funktionimi(teksti):
    print(teksti)
funktionimi("Tähän mitä halutaan tulostettavan")
# Lähetetään tulostettava teksti suoraan input -komennolta
def funktionimi(teksti):
    print(teksti)
funkitionimi(input("Anna tulostettava teksti: "))
# Lähetetään funktiolle kaksi eri tyyppistä parametriä
def funktionimi(muuttuja1, muuttuja2):      # muodollisia parametrejä
    print((muuttuja1) + str(muuttuja2))   # luku muutetaan merkkijonoksi str() -funktiolla
funktionimi("Tähän mitä halutaan tulostettavan ", 500)     # todelliset parametrit sijoittuvat muuttujiin tässä järjestyksessä
# Lähetetään funktiot eri järjestyksessä mutta valmiiksi aliohjelman muuttujiin osoitettuna
def funktionimi(muuttuja1, muuttuja2):
    print...
funktionimi(muuttuja2=1, muuttuja1=2)     # määritellään funktion muuttujat, ei väliä tällöin järjestyksellä
# Kaksi aliohjelmaa sisäkkäin -kutsu
tulostusfunktio(syotteenpyytavafunktio())
# Funktion parametri toinen funktio
def funktio1(arvo1):
    print(arvo1)
def funktio2(arvo1):
    muuttuja1 = input("Arvaa luku: ")
    if muuttuja1 == "1":
        arvo1("Oikein")
    else: arvo1("Väärin")
funktio2(funktio1)
# Funktiokutsu sisältää moduulin aliohjelmakutsun (tuotu import moduuli)
funktionimi(moduuli.moduulifunktionimi)
# Ohjelma pyytää sanan ja vertaa sitä teksti-sanaan. Ilmoittaa menikö arvaus oikein. Tässä kannattaa huomat kuinka True/False on käytössä.
def aliohjelma1(muuttuja1):
    muuttuja2 = "teksti"
    return muuttuja1 == muuttuja2   # Selvittää onko syötetty teksti sana teksti ja palauttaa sen mukaan True tai False
def aliohjelma2(muuttuja1,muuttuja3):
    if (muuttuja3):  # Jos True
        print("Kirjoitit sanan 'teksti'")
    else:
        print("Et kirjoittanut sanaa 'teksti'")
muuttuja4 = input("Arvaa sana: ")
Aliohjelma2(muuttuja4, Aliohjelma1(muuttuja4))   # Huomaa että ensin suoritetaan Aliohjelma1 ja sitten vasta Aliohjelma2
# "oma" input-komento
def omaInput(muuttuja2):
    muuttuja1 = input(muuttuja2)
    while len(muuttuja1) != 1:
        print("Anna vain yksi merkki!")
        muuttuja1 = input(muuttuja2)
    return muuttuja1

def syotto():
    muuttuja1 = omaInput("Anna merkki: ")
    print("Merkki: ",muuttuja1)
syotto()
# Pilkkumuunnin palauttaa muuttuja1:lle lukeman pisteellisenä liukulukuna
def pilkkuPisteeksi(syote):
   return float(syote.replace(',', '.'))
syote = input("Syötä pilkun sisältävä luku? ")
muuttuja1 = pilkkuPisteeksi(syote)

Vahvistusaliohjelma[muokkaa]

# Tehtynä global -lipulla
def vahvistus():
    global lippu
    if lippu == 1:
        vahvistus = input("Muutoksia olemassa.\nPerutaanko (k/e)? ")
        return vahvistus

vahvistus = vahvistus()
if vahvistus == "k":
    return
else:
    print("Toiminto jatkuu")

Aliohjelma ja lista[muokkaa]

  • Lähetettäessä lista aliohjelmalle aiheuttaa muutoksen myös alkuperäiseen listaan jos aliohjelmassa tehdään listaan muutoksia. Listaa ei tarvitse palauttaa returnilla vaan muutos tapahtuu automaattisesti. Kyseessä on viittaus eli lista toimitetaan aliohjelmalle ja listaan tehdyt muutokset toimivat sekä aliohjelmassa että toisessa aliohjelmassa. Lista on ikäänkuin globaali muuttuja ilman että sitä tarvitsee erikseen globaaliksi määrittää aliohjelmassa.
  • Tämä viittaus voidaan estää antamalla aliohjelmalle lista tuple-muodossa. Tällöin listan muuttaminen aliohjelmassa ei muuta alkuperäistä listaa.
    • Funktionimi(muuttuja1[:])

Kirjastomoduulit, aliohjelmakirjastopaketit[muokkaa]

  • Itse tekemäsi py-päätteinen ohjelma, joka sisältää funktioita on moduuli eli Python etsii tätä kirjastomoduulia määritellyistä kansioista tietokoneen hakemistoista. Kirjaston sisältä löytyy sitten funktiot ja vakiot joita voidaan käyttää. Yksittäistä funktiota tai vakiota voidaan kutsua pistenotaatiolla.
    • esim. Macintosh HD / Kirjasto / Frameworks / Python.framework / Versions / 3.3 / lib / python3.3 /
    • esim. Tai OSX Pääteohjelmassa python ja >>> help('modules')
  • pyc-tiedostot ovat esikäännettyjä tiedostoja eli ajovaiheessa sitä ei tarvitse kääntää mikä nopeuttaa toimintaa.
  • Fuktiot voidaan ottaa käyttöön myös sisällyttämiskomennolla import: import aliohjelmakirjastopaketinnimi
    • Tällöin funktiota käytetään pistenotaatiolla: print(kirjastomoduulinimi.funktiotaivakio)
    • tai from moduulinnimi import funktio, toinenfunktio tai from moduulinnimi import *
    • eri moduuleissa olevat samannimiset funktiot korvautuvat viimeisimmällä käytettäessä from-import, huomioi tämä!
  • Luettelo moduuleista löytyy kohdasta Help / Python Docs / Library Reference

Valmiina Pythonissa esimerkiksi:

  • math - matemaattisia funktioita
  • os
  • sys
  • urllib2 - http

Satunnaisluku[muokkaa]

import random  # Tämä on määriteltävä aluksi
muuttuja1 = random.random()    # Arpoo likuluvun väliltä 0-1
muuttuja1 = random.randint(0,10)    # Arpoo kokonaisluvun väliltä 0-10
muuttuja1 = random.sample(range(50), 5) # Arpoo 5 lukua väliltä 0-50
muuttuja1 = random.choice(['teksti1','teksti2'])

Tiedostot open(), close()[muokkaa]

  • Perusperiaate 1) avaa tiedosto 2) kirjoita 3) sulje. Sulkeminen vasta kirjoittaa tiedostoon ja vapauttaa tiedostokahvan ja varatun muistin. Tiedosto avataan ennen käyttämistä ja suljetaan sen jälkeen, tämä voi tapahtua ohjelman alussa ja lopussa. Tiedostoja voi olla auki useita samanaikaisesti, koska jokainen tiedosto on omassa tiedostokahvassaan.
  • Tallennus merkkijonona eli str(), muunna kokonaisluvut ym. tarviittaessa merkkijonoiksi. Rivi vaihtuu \n -merkinnällä ja tiedoston loppu on rivi jossa ei ole mitään merkkiä eli ei edes \n -merkintää.
  • w = kirjoita, r = lue, r+ = kirjoita ja lue, a = lisää tiedoston loppuun (append)
    • w kirjoittaa aikaisemman saman nimisen tiedoston päälle. r+ huomioi mihin kohtaan kirjoitetaan
  • kirjanmerkki ilmaisee mihin kohtaan kirjoitetaan tai mistä ollaan lukemassa
    • a sijoittaa automaattisesti tiedoston loppuun
    • tiedostonimi.tell() # kuinka monta merkkiä on luettu tiedoston alusta asti
    • tiedostonimi.seek(4) # siirtää kirjanmerkin rivin viidenteen merkkiin, voi olla myös -5 eli laskenta rivin lopusta päin
    • tiedostonimi.seek(4, 3) # viimeinen arvo tarkoittaa: 0 tiedoston alku, 1 nykyinen sijainti, 2 tiedoston loppu
  • encoding (tekstin koodaus) ei ole välttämättä pakollinen, mutta esimerkiksi muiden tiedostoja luettaessa saattaa syntyä virheilmoitus ja encoding on pakko määritellä. utf-8 on yleismaailmallinen ja suositeltavin.
  • Python editorilla voi helposti kirjoittaa editori-ikkunassa ja tallentaa sen .txt tiedostona .py sijaan.

Kirjoittaminen tiedostoon write()[muokkaa]

tiedosto = open("tiedostonimi.txt", "w", encoding="utf-8")
tiedosto.write(str("kirjoitettava teksti") + "\n") 
tiedosto.close()   # huomaa että teksti tallennetaan vasta kun annetaan close()
# Teksti tallennetaan ja tiedosto suljetaan automaattisesti
with open("tiedostonimi.txt", "w") as tiedosto:   # with..as ei kaadu virheisiin!
    tiedosto.write("Kirjoitettava teksti")
# Esimerkki avaamisesta ja sulkemisesta
tiedosto = open("tiedostonimi.txt", "w")     # tiedosto on nk. tiedostokahva
tiedosto.write(str("kirjoitettava teksti") + "\n") 
print (tiedosto.closed)   # antaa arvon False koska tiedosto on vielä auki
tiedosto.close()   # suljetaan tiedosto
print (tiedosto.closed)   # antaa arvon True koska tiedosto suljettiin
.close  # testaa onko tiedosto suljettu. Suljettuna True, avoimena False. 
# Tallennusaliohjelma
def tallennus(muuttuja1, muuttuja2):   # saa muuttuja1 arvona tiedoston nimen ja muuttuja 2 arvona tallennettavan merkkijonon
    tiedosto = open(muuttuja1,"a")
    tiedosto.write(str(muuttuja2+"\n"))
    tiedosto.close()

Koko tiedoston lukeminen read()[muokkaa]

Huolehdi että tiedoston koko ei ylitä tietokoneen käytettävissä olevaa muistia.

tiedosto = open("tiedostonimi.txt", "r", encoding="utf-8")
print(tiedosto.read())
tiedosto.close()
tiedosto = open("tiedostonimi.txt", "r")
for i in tiedosto:
    print (i)
tiedosto.close()

Lukeminen tiedostosta riveittäin readline()[muokkaa]

Rivi sisältää rivinvaihtomerkin, paitsi viimeinen rivi.

# Tulostaa tiedostonimi.txt -tiedoston ensimmäiseltä riviltä 10 ensimmäistä merkkiä. readline() lukee yhden rivin.
tiedosto = open("tiedostonimi.txt", "r")
print (tiedosto.readline(10))
tiedosto.close()
while True: 
    muuttuja1 = tiedosto.readline()
    if len(muuttuja1) == 0: break
    print(muuttuja1, end="")
def luku():
    tiedosto = open("tiedostonimi.txt","r")
    while True:
        rivi = tiedosto.readline()[:-1]
        if len(rivi) == 0: break
        # jos vain tiedosto.readline() silloin rivi = rivi[:len(rivi)-1]
        Aliohjelmaan(rivi)
    tiedosto.close()
def luku():
    tiedosto = open("tiedostonimi.txt","r")
    for i in tiedosto
        rivi = tiedosto.readline()
        if len(rivi) == 0: break
        rivi = rivi.strip()
        Aliohjelmaan(rivi)
    tiedosto.close()
# Ohjelma tulostaa tallennetun tekstitiedoston .txt tai esim .py tiedoston.
muuttuja1 = input("Tiedoston nimi: ")
tiedosto = open(muuttuja1, "r")
muuttuja2 = str(1)
while muuttuja2 !="":       # tai    while len(muuttuja2) >= 1:
    muuttuja2 = tiedosto.readline()
    print(muuttuja2, end="")

Lukeminen tiedoston rivit pötköön readlines()[muokkaa]

tiedosto = open("tiedostonimi.txt", "r")
print (tiedosto.readlines())
tiedosto.close()

Lukeminen listaan[muokkaa]

lista = []
tiedosto = open("nmalli.txt", "r", encoding="utf-8")
    while True:
    muuttuja1 = tiedosto.readline()
    if len(muuttuja1) == 0: break
    lista.append(muuttuja1[:len(muuttuja1)-1])
    print(lista)
    tiedosto.close()

Virheet[muokkaa]

  • Pyrkimys estää yllättävät suorituksen aikaiset kaatumiset. Esimerkiksi ValueError pysäyttää ohjelman ellei sitä estetä seuraavin tavoin.
    • Lisätietoa Help / Python Docs / Library Reference / Built-in Exceptions
Tulostaa Teksti1 1000 kertaa paitsi jos keskeytetään Ctrl-c ilmoittaa siitä
try:
    for muuttuja1 in range(0,1000):
        print("Teksti1")
except KeyboardInterrupt:
    print("Keskeytys Ctrl-c näppäimellä")
  • Exception jatkaa muista virheistä paitsi pysähtyy jos virhe SystemExit tai KeyboardInterrupt
def kyselijaVaihtoehto1():
    while True:
        try:
            muuttuja1 = int(input("Virhe jos ei kokonaisluku: "))
        except Exception: # Exception ei ole pakollinen tässä
            print("Virhe.")
        else:
            print("Kokonaislukü.")


def kyselijaVaihtoehto2():
    while True:
        try:
            muuttuja1 = int(input("Virhe jos ei kokonaisluku: "))
            return muuttuja1 # palauttaa muuttuja1 arvon
        except:
            print("Virhe.")
def kyselijaVaihtoehto3():
    while True:
        muuttuja1 = input("Syötä luku: ")
        try:
            float(muuttuja1)
            return muuttuja1
        except ValueError:
            if luku == "lopeta":
                return muuttuja1
            elif luku.isdigit():
                return muuttuja1
            else: print("Ei kelpaa.")
  • Finally suorittaa annetut tehtävät ja lopettaa ohjelman toiminnan. Se suoritetaan aina eli tätä voidaan käyttää esimerkiksi tiedoston sulkemisen yhteydessä normaalisti, mutta varmistamaan myös sulkeminen jos ohjelmassa tapahtuu virhe.
  • sys.exit(0) means a clean exit without any errors / problems, sys.exit(1) means there was some issue / error / problem and that is why the program is exiting. This is useful for other programs, shell, caller etc. to know what happened with your program and proceed accordingly.
import sys
try:
    tiedosto = open("tiedostonimi.txt","r")
except IOError:
    print("Tiedostoa ei voi avata")
finally: sys.exit(0)
def poikkeusaliohjelma():
    (ZeroDivisionError, IOError, ValueError) # useampi virheilmoitus sulkeiden sisään pilkulla erotettuna

import sys
try: 
     tiedosto = open("tiedostonimi.txt","r")
except: poikkeusaliohjelma()
finally: sys.exit(0)
# Tiedostonluku huomioiden virheet
import sys
try:
    tiedosto = open("tiedostonimi.txt", "r", encoding="utf-8")
    try:    # Tähän koodi kokonaisuudessaan joka tehdään jos ei synny virheilmoituksia
        while True:
            muuttuja1 = tiedosto.readline()
            if len(muuttuja1) == 0: break
            else: print(muuttuja1, end="")
    except IOError:
        print("Lukeminen epäonnistui")
        sys.exit(-2)
    finally:
        tiedosto.close()
except IOError:
    print("Avaaminen epäonnistui")
    sys.exit(-1)
print("\nLuettu")

Debugger[muokkaa]

Windows source koodin seuranta ei toimi[muokkaa]


OSA 2.[muokkaa]

Graafinen käyttöliittymä[muokkaa]

Python graafinen käyttöliittymä

Käyttäjärjestelmän tunnistaminen[muokkaa]

def kayttis():
    from sys import platform as muuttuja1
    if muuttuja1 == "darwin": muuttuja2 = "OS X"
    elif muuttuja1 == "linux": muuttuja2 = "Linux"
    elif muuttuja1 == "windows": muuttuja2 = "Windows"
    else: ktuloste = "Muu"
    print(muuttuja2)

Sähköpostin lähettäminen[muokkaa]

import smtplib

# HUOM! EI HYVÄKSY ÄÄKKÖSIÄ

# Viestin tiedot
vastaanottaja = '[email protected]'
otsikko = 'Otsikko tahan'
sisalto = 'Sisalto kirjoitetaan tahan'

# SMTP palvelimen asetukset
kayttajatunnus = 'postilaatikon kayttajatunnus'
ssana = 'postilaatikon salasana'
smtpserver = smtplib.SMTP("smtp palvelimen osoite",587)

# Lähetys
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo
smtpserver.login(kayttajatunnus, ssana)
header = 'To:' + vastaanottaja + '\n' + 'From: ' + kayttajatunnus + '\n' + 'Subject: ' + otsikko + '\n'
viesti = header + sisalto
smtpserver.sendmail(kayttajatunnus, vastaanottaja, viesti)
print ('Lähetetty viesti: \n\n' + header)
smtpserver.close()

Esimerkkejä[muokkaa]

Kirjaimet ja numerot testi (input)[muokkaa]

Lopettaa kun syötteenä saadaan numeroita, kirjaimet kysyy uudestaan. Ei osaa tulkita . tai , -merkittyjä luvuiksi.

while True:
    muuttuja = input("Syötä jotain:")
    try:
        val = int(muuttuja)
    except ValueError:
        print("Eivät ole pelkästään numeroita")
        continue
    else:
        print("Ovat numeroita")
        break

Hyväksyy vain 1-20 väliset numerot[muokkaa]

Ei osaa tulkita . tai , -merkittyjä luvuiksi.

muuttuja1 = 20
while True:
    try:
        muuttuja2 = int(input('Syötä numero ?'))
    except ValueError:
        continue
    else:
        if muuttuja2 < 1 or muuttuja2 > muuttuja1:
            continue
        else:
            print("Oli arvojen sisällä")
            break

Tulostaa verkkosivun html-koodin[muokkaa]

def verkkosivuTulostin():
    import urllib.request
    muuttuja1 = urllib.request.urlopen("http://www.domain.fi")
    muuttuja2 = muuttuja1.read()
    muuttuja1.close()
    print(muuttuja2.decode("utf-8"))

Esimerkkejä[muokkaa]

Alkulukulaskuri[muokkaa]

a=0
luku = int(input("Anna kokonaisluku: "))
if luku < 2: a=1
for jakaja in range(2,luku):
    if luku % jakaja == 0: a=1
if a == 0:
    print(luku,"on alkuluku")
else:
    print(luku,"ei ole alkuluku")

Python versio[muokkaa]

import sys
if sys.version_info>(2,9,0):
    print("Ohjelma toimii vain Python 2 versioissa")

Sekalaisia huomioita[muokkaa]

Pelit[muokkaa]

  • Ota huomioon Ei pelattu yhtään kierrosta, A voitti, B voitti jne., tasatulos