Hienoa, että olet päättänyt tarttua Pythoniin! Se on super suosittu ja monipuolinen ohjelmointikieli, jolla voi tehdä lähes mitä vain: nettisivuja, pelejä, datan analysointia, automaatiota ja vaikka mitä. Se on myös erityisen hyvä kieli aloittaa, koska sen syntaksi on todella selkeää ja loogista.
Tässä oppaassa käymme läpi Pythonin peruspalikat askel askeleelta. Tarkoitus on, että pääset kunnolla jyvälle siitä, miten koodi toimii ja miten voit alkaa rakentaa omia juttujasi.
**Mitä tarvitset?**
Ei panikoida, jos kaikki ei heti tunnu selvältä. Koodaus on kuin uuden kielen oppimista – harjoitus tekee mestarin. Aloitetaan!
---Ennen kuin pääsemme koodaamaan, Python täytyy asentaa koneellesi. Seuraa oman käyttöjärjestelmäsi ohjeita.
VINKKI: Jos haluat lisätä Pythonin PATH-ympäristömuuttujaan manuaalisesti jälkikäteen Windowsissa, voit hakea Start-valikosta "Ympäristömuuttujat" (Environment Variables), valita "Järjestelmän ympäristömuuttujat" (System Variables) ja muokata PATH-muuttujaa. Lisää sinne polut Pythonin asennuskansioon ja Scripts-alikansioon (esim. C:\Users\Käyttäjä\AppData\Local\Programs\Python\Python39 ja C:\Users\Käyttäjä\AppData\Local\Programs\Python\Python39\Scripts).
macOS:ssä on yleensä esiasennettuna Python 2, mutta se on vanhentunut. Tarvitsemme Python 3:n.
VINKKI: Mac-käyttäjät voivat halutessaan asentaa myös Homebrew-pakettihallinnan (brew.sh) ja asentaa Pythonin sen kautta komennolla brew install python3. Tämä on usein kätevämpi tapa hallita kehitystyökaluja.
Useimmissa Linux-jakeluissa Python 3 on jo esiasennettuna. Voit tarkistaa sen, kuten alla olevassa "Tarkista asennus" -osiossa.
Jos se ei ole asennettuna tai haluat uusimman version, voit asentaa sen jakelusi pakettihallinnalla:
sudo apt update
sudo apt install python3
sudo dnf install python3
sudo pacman -S python
Avaa **komentorivi** (Windowsissa "cmd" tai "PowerShell", macOS:ssä/Linuxissa "Terminal" / "Pääte"). Kirjoita sitten:
python3 --version
Jos näet jotain tyyliin "Python 3.10.x" (missä x on jokin numero), asennus on onnistunut! Jos saat virheilmoituksen, Python ei ole PATH:ssa, ja sinun pitää korjata se (ks. vinkit yllä).
Voit kirjoittaa Python-koodia vaikka Muistioon, mutta koodieditori tekee elämästäsi paljon helpompaa. Se auttaa syntaksikorostuksella (värit, jotka tekevät koodista luettavampaa), automaattisella täydennyksellä ja virheiden etsimisellä.
Suositeltavat koodieditorit aloittelijalle:
Lataa VS Code: code.visualstudio.com
Lataa PyCharm: jetbrains.com/pycharm/download/
Valitse jompikumpi näistä, asenna se ja olet valmis tositoimiin!
---Perinteisesti ensimmäinen ohjelma, jonka jokainen koodari kirjoittaa, on "Hei, maailma!". Se opettaa sinulle, miten koodi suoritetaan.
print("Hei, maailma!")
cd C:\Users\OmaKäyttäjä\Desktop (Windows)
cd ~/Desktop (macOS/Linux)
python3 ensimmainen.py
Sinun pitäisi nähdä tulostus: **"Hei, maailma!"** komentorivillä. Onneksi olkoon, olet koodari!
Mikä ihmeen `print()`?
print() on Pythonin **funktio**, jolla voit tulostaa tekstiä tai numeroita konsoliin (komentoriville). Kaikki sulkujen sisällä oleva teksti (merkkijono) tulostuu. Teksti pitää laittaa lainausmerkkeihin (`""` tai `''`).
Koodaamisessa joudut usein tallentamaan tietoa – nimiä, numeroita, totuusarvoja. Tätä varten käytetään **muuttujia**. Ajattele muuttujaa kuin nimellä varustettua laatikkoa, johon voit laittaa tietoa ja josta voit myöhemmin hakea sen.
nimi = "Marko"
ika = 30
onko_opiskelija = False # True tai False
pii = 3.14159
print(nimi)
print(ika)
print(onko_opiskelija)
print(pii)
Muuttujan nimeämissäännöt:
Jokaisella muuttujalla on jokin **tietotyyppi**, joka kertoo, minkälaista tietoa se sisältää. Python tunnistaa tietotyypin automaattisesti, joten sinun ei tarvitse sitä erikseen määrittää (kuten joissain muissa kielissä).
str (string / merkkijono):** Tekstiä. Aina lainausmerkkien sisällä ("Hei" tai 'moi').
tervehdys = "Hyvää päivää!"
nimi = 'Python'
int (integer / kokonaisluku):** Koko numeroita ilman desimaaleja.
luku1 = 10
vuosi = 2024
float (floating-point number / liukuluku):** Numeroita desimaaleilla.
lampotila = 23.5
paino = 75.2
bool (boolean / totuusarvo):** Vain kaksi mahdollista arvoa: **True** tai **False**. Käytetään usein päätöksenteossa.
onko_paiva = True
onko_yolla = False
list (lista):** Järjestetty kokoelma asioita. Merkitään hakasulkeilla [].
hedelmat = ["omena", "banaani", "appelsiini"]
tuple (tupli):** Kuten lista, mutta muuttumaton (ei voi muuttaa arvoja sen jälkeen kun se on luotu). Merkitään suluilla ().
koordinaatit = (10, 20)
dict (dictionary / sanakirja):** Kokoelma avain-arvo-pareja. Merkitään aaltosulkeilla {}.
henkilo = {"nimi": "Liisa", "ika": 25}
Voit tarkistaa muuttujan tyypin type()-funktiolla:
nimi = "Aino"
ika = 40
print(type(nimi)) # Tulostaa: <class 'str'>
print(type(ika)) # Tulostaa: <class 'int'>
---
Operaattoreilla tehdään laskutoimituksia, vertailuja ja loogisia operaatioita.
| Operaattori | Kuvaus | Esimerkki |
|---|---|---|
+ |
Yhteenlasku | 5 + 3 (tulos 8) |
- |
Vähennyslasku | 10 - 4 (tulos 6) |
* |
Kertolasku | 6 * 2 (tulos 12) |
/ |
Jakolasku (tulos aina liukuluku) | 10 / 3 (tulos 3.333...) |
// |
Kokonaislukujako (jäännös pois) | 10 // 3 (tulos 3) |
% |
Jakojäännös (modulo) | 10 % 3 (tulos 1, koska 10 = 3*3 + 1) |
** |
Potenssi | 2 ** 3 (tulos 8, eli 2*2*2) |
luku1 = 15
luku2 = 4
print(luku1 + luku2) # 19
print(luku1 - luku2) # 11
print(luku1 * luku2) # 60
print(luku1 / luku2) # 3.75
print(luku1 // luku2) # 3
print(luku1 % luku2) # 3 (koska 15 = 3*4 + 3)
print(2 ** 4) # 16
Merkkijonojen yhdistäminen:
+-operaattoria voi käyttää myös merkkijonojen yhdistämiseen (konkatenaatio):
etunimi = "Matti"
sukunimi = "Meikäläinen"
koko_nimi = etunimi + " " + sukunimi
print(koko_nimi) # Tulostaa: Matti Meikäläinen
| Operaattori | Kuvaus | Esimerkki |
|---|---|---|
== |
Yhtä suuri kuin (huom. kaksi yhtäsuuruusmerkkiä!) | 5 == 5 (True) |
!= |
Ei yhtä suuri kuin | 5 != 6 (True) |
> |
Suurempi kuin | 10 > 5 (True) |
< |
Pienempi kuin | 10 < 5 (False) |
>= |
Suurempi tai yhtä suuri kuin | 5 >= 5 (True) |
<= |
Pienempi tai yhtä suuri kuin | 5 <= 6 (True) |
a = 7
b = 7
c = 9
print(a == b) # True
print(a != c) # True
print(c > a) # True
print(a <= b) # True
| Operaattori | Kuvaus | Esimerkki |
|---|---|---|
and |
Molempien ehtojen oltava totta | (True and False) (False) |
or |
Toisen tai molempien ehtojen oltava totta | (True or False) (True) |
not |
Kääntää totuusarvon (True -> False, False -> True) | not True (False) |
ika = 18
onko_ajokortti = True
if ika >= 18 and onko_ajokortti:
print("Voit ajaa autoa!")
saldo = 50
halutaan_ostaa = 100
if saldo >= halutaan_ostaa or onko_ajokortti: # Vaikka saldo ei riitä, jos on ajokortti (eli toinen True), ehto on True
print("Joko rahat riittää tai kortti löytyy!")
---
Olemme jo nähneet print()-funktion, jolla ohjelma "puhuu" käyttäjälle. Mutta miten käyttäjä "puhuu" ohjelmalle?
Siihen käytetään **input()**-funktiota. Se pyytää käyttäjältä syötettä ja tallentaa sen merkkijonona.
nimi = input("Mikä on nimesi? ")
print("Hei, " + nimi + "!")
ika_tekstina = input("Kuinka vanha olet? ")
# Muista muuttaa syöte numeroksi, jos aiot tehdä laskutoimituksia!
ika = int(ika_tekstina)
print("Olet " + str(ika) + " vuotta vanha.")
print("Syntymävuotesi on noin", 2025 - ika) # print voi yhdistää eri tyyppejä pilkulla
Tärkeää `input()`-funktiosta:
input() palauttaa **aina merkkijonon**. Jos odotat käyttäjältä numeroa ja aiot käyttää sitä laskutoimituksissa, sinun on muunnettava se kokonaisluvuksi (`int()`) tai liukuluvuksi (`float()`).
# Esimerkki: Kaksi lukua yhteenlasku
luku1_str = input("Anna ensimmäinen luku: ")
luku2_str = input("Anna toinen luku: ")
luku1 = int(luku1_str) # Muunna merkkijonosta kokonaisluvuksi
luku2 = int(luku2_str)
summa = luku1 + luku2
print("Lukujen summa on:", summa)
Ohjelman on usein tehtävä päätöksiä tiettyjen ehtojen perusteella. Ehtolauseilla kerrotaan Pythonille, mitä tehdä, jos jokin ehto on totta tai epätotta.
Perusrakenne on:
if ehto:
# Tee jotain, jos ehto on True
elif toinen_ehto:
# Tee jotain, jos ensimmäinen ehto oli False JA tämä ehto on True
else:
# Tee jotain, jos kaikki yläpuoliset ehdot olivat False
**TÄRKEÄÄ:** Pythonissa koodilohkot merkitään **sisennyksillä (indentation)**! Käytä yleensä 4 välilyöntiä tai yhtä tabulaattoria sisentämiseen. Sisennyksen puuttuminen tai virheellinen sisennys aiheuttaa virheen!
ika = 20
if ika >= 18:
print("Olet täysi-ikäinen.")
else:
print("Et ole vielä täysi-ikäinen.")
# --- Toinen esimerkki ---
lampotila = 15
if lampotila > 25:
print("On kuuma!")
elif lampotila > 15: # Eli jos ei yli 25, mutta yli 15
print("On mukavan lämmintä.")
else:
print("On viileää.")
# --- Voit myös ketjuttaa ehtoja ---
ika = 15
rahaa = 20
if ika >= 18 and rahaa >= 10:
print("Voit mennä elokuviin ja ostaa popcornia!")
elif ika >= 18:
print("Voit mennä elokuviin, mutta rahat ei ehkä riitä popcorneihin.")
else:
print("Et ole tarpeeksi vanha elokuviin.")
---
Jos haluat toistaa jonkin koodilohkon useita kertoja, käytä **silmukoita**. Ne ovat koodarin parhaita ystäviä tylsän toiston välttämiseksi.
for-silmukkaa käytetään usein, kun haluat käydä läpi kokoelman (esim. listan) kaikki alkiot tai toistaa jotain tietyn määrän kertoja.
# Esimerkki 1: Toista lukuja 0-4
for i in range(5): # range(5) luo lukuja 0, 1, 2, 3, 4
print(i)
# Esimerkki 2: Käy läpi lista
hedelmat = ["omena", "banaani", "appelsiini"]
for hedelma in hedelmat:
print("Pidän", hedelma + "sta.")
# Esimerkki 3: Käy läpi merkkijonon kirjaimet
sana = "Python"
for kirjain in sana:
print(kirjain)
`range()`-funktio:
* `range(5)`: luvut 0, 1, 2, 3, 4 (pysähtyy ennen 5:ttä)
* `range(1, 5)`: luvut 1, 2, 3, 4 (alkaa 1:stä, pysähtyy ennen 5:ttä)
* `range(0, 10, 2)`: luvut 0, 2, 4, 6, 8 (alkaa 0:sta, hyppää kahden välein, pysähtyy ennen 10:tä)
while-silmukka toistaa koodilohkoa niin kauan kuin jokin ehto on totta. Ole varovainen, ettei silmukka jää ikuisesti pyörimään!
laskuri = 0
while laskuri < 5:
print("Laskuri on:", laskuri)
laskuri += 1 # Lyhennys: laskuri = laskuri + 1
print("Silmukka päättyi.")
# --- Varo ikuista silmukkaa! ---
# luku = 1
# while True: # Tämä ehto on aina True
# print(luku)
# luku += 1
# Paina Ctrl+C komentorivillä lopettaaksesi tällaisen.
break ja continue:
* **break:** Katkaisee silmukan kokonaan ja siirtyy silmukan jälkeiseen koodiin.
* **continue:** Hyppää silmukan nykyisen kierroksen yli ja jatkaa seuraavasta kierroksesta.
# Esimerkki break
for i in range(10):
if i == 5:
break # Katkaisee silmukan kun i on 5
print(i) # Tulostaa 0, 1, 2, 3, 4
# Esimerkki continue
for i in range(5):
if i == 2:
continue # Hyppää yli kun i on 2
print(i) # Tulostaa 0, 1, 3, 4
Listat ovat yksi Pythonin tärkeimmistä tietorakenteista. Ne ovat kokoelmia, joihin voit tallentaa useita arvoja. Listat ovat **järjestettyjä** (alkioilla on järjestys) ja **muutettavissa** (voit lisätä, poistaa ja muuttaa alkioita).
Listat luodaan hakasulkeilla `[]`.
hedelmat = ["omena", "banaani", "appelsiini", "mansikka"]
luvut = [1, 5, 2, 8, 3]
sekalainen_lista = ["Hei", 123, True, 3.14]
# Käsiksi listan alkioihin indeksin avulla (indeksointi alkaa nollasta!)
print(hedelmat[0]) # Tulostaa: omena (ensimmäinen alkio)
print(hedelmat[2]) # Tulostaa: appelsiini (kolmas alkio)
print(hedelmat[-1]) # Tulostaa: mansikka (viimeinen alkio)
# Muuta listan arvoa
hedelmat[1] = "kiivi"
print(hedelmat) # Tulostaa: ['omena', 'kiivi', 'appelsiini', 'mansikka']
# Listan pituus (montako alkiota siinä on)
print(len(hedelmat)) # Tulostaa: 4
| Metodi | Kuvaus | Esimerkki |
|---|---|---|
.append(alkio) |
Lisää alkion listan loppuun. | lista.append("uusi") |
.insert(indeksi, alkio) |
Lisää alkion tiettyyn indeksiin. | lista.insert(1, "keskelle") |
.remove(alkio) |
Poistaa ensimmäisen löydetyn alkion. | lista.remove("omena") |
.pop(indeksi) |
Poistaa ja palauttaa alkion tietystä indeksistä (oletus viimeinen). | poistettu = lista.pop(0) |
.sort() |
Järjestää listan alkiot. | luvut.sort() |
.reverse() |
Kääntää listan järjestyksen. | lista.reverse() |
.count(alkio) |
Laskee tietyn alkion esiintymien määrän. | maara = lista.count("omena") |
.index(alkio) |
Palauttaa alkion indeksin. | indeksi = lista.index("banaani") |
ostoslista = ["maito", "leipä", "kahvi"]
ostoslista.append("juusto") # Lisää loppuun
print(ostoslista) # ['maito', 'leipä', 'kahvi', 'juusto']
ostoslista.insert(1, "voi") # Lisää toiseksi alkioksi (indeksi 1)
print(ostoslista) # ['maito', 'voi', 'leipä', 'kahvi', 'juusto']
ostoslista.remove("kahvi") # Poistaa "kahvi"
print(ostoslista) # ['maito', 'voi', 'leipä', 'juusto']
viimeinen = ostoslista.pop() # Poistaa ja ottaa talteen viimeisen
print(viimeinen) # juusto
print(ostoslista) # ['maito', 'voi', 'leipä']
luvut = [3, 1, 4, 1, 5, 9, 2]
luvut.sort() # Järjestää luvut nousevaan järjestykseen
print(luvut) # [1, 1, 2, 3, 4, 5, 9]
---
Tuplit ovat hyvin samanlaisia kuin listat, mutta niitä ei voi muuttaa sen jälkeen, kun ne on luotu. Eli et voi lisätä, poistaa tai muuttaa alkioita. Tuplit luodaan suluilla `()`.
Miksi tupleja sitten käytettäisiin? Ne ovat usein hieman nopeampia, turvallisempia (koska arvoja ei voi vahingossa muuttaa) ja käytetään, kun halutaan varmistaa, että tiedot pysyvät samoina (esim. koordinaatit, päivämäärät).
koordinaatit = (10, 20)
varkauden_paikka = ("Helsinki", "Kampintori", 60.1695, 24.9354)
# Käsiksi alkioihin indeksin avulla (kuten listat)
print(koordinaatit[0]) # Tulostaa: 10
# Yritä muuttaa (tämä aiheuttaa virheen!)
# koordinaatit[0] = 30 # TypeError: 'tuple' object does not support item assignment
---
Sanakirjat ovat kokoelmia, jotka tallentavat tietoa **avain-arvo-pareina**. Ajattele niitä kuin oikeaa sanakirjaa, jossa on sana (avain) ja sen selitys (arvo).
Sanakirjat luodaan aaltosulkeilla `{}`.
henkilo = {
"nimi": "Maija",
"ika": 30,
"kaupunki": "Tampere",
"ammatti": "Ohjelmoija"
}
# Käsiksi arvoihin avaimen avulla
print(henkilo["nimi"]) # Tulostaa: Maija
print(henkilo["kaupunki"]) # Tulostaa: Tampere
# Muuta arvoa
henkilo["ika"] = 31
print(henkilo["ika"]) # Tulostaa: 31
# Lisää uusi avain-arvo-pari
henkilo["harrastus"] = "lukeminen"
print(henkilo) # Tulostaa koko sanakirjan uusitulla sisällöllä
# Poista avain-arvo-pari
del henkilo["ammatti"]
print(henkilo)
# Tarkista, onko avain olemassa
if "nimi" in henkilo:
print("Nimi löytyi!")
# Käy läpi avaimet
for avain in henkilo:
print(avain)
# Käy läpi arvot
for arvo in henkilo.values():
print(arvo)
# Käy läpi avain-arvo-parit
for avain, arvo in henkilo.items():
print(avain + ": " + str(arvo))
---
Funktio on koodilohko, joka suorittaa tietyn tehtävän. Voit "kutsua" funktiota suorittamaan sen tehtävän uudelleen ja uudelleen, ilman että sinun tarvitsee kirjoittaa samaa koodia moneen paikkaan. Funktiot tekevät koodista järjestäytyneempää, helpommin luettavaa ja ylläpidettävää.
Funktio määritellään `def`-avaisanalla, jonka jälkeen tulee funktion nimi ja sulut `()`. Sisennys kertoo, mikä koodi kuuluu funktioon.
# Yksinkertainen funktio
def tervehdi():
print("Hei, maailma!")
print("Mukavaa päivää!")
# Kutsutaan funktiota suorittamaan sen tehtävä
tervehdi()
tervehdi() # Voit kutsua sitä useasti!
def tervehdi_nimella(nimi): # 'nimi' on parametri
print("Hei, " + nimi + "!")
tervehdi_nimella("Matti") # "Matti" on argumentti
tervehdi_nimella("Liisa")
def laske_summa(luku1, luku2):
summa = luku1 + luku2
return summa # Funktio palauttaa summan
tulos = laske_summa(5, 3) # Funktio kutsutaan, tulos tallennetaan muuttujaan 'tulos'
print("Summa on:", tulos) # Tulostaa: Summa on: 8
# Voit käyttää paluuarvoa suoraan
print("Toinen summa on:", laske_summa(10, 20))
Globaalit ja lokaalit muuttujat: * Funktion sisällä määritellyt muuttujat ovat **lokaaleja** – ne ovat olemassa vain funktion suorituksen ajan. * Funktion ulkopuolella määritellyt muuttujat ovat **globaaleja** – ne ovat olemassa koko ohjelman ajan. Älä muokkaa globaaleja muuttujia funktioiden sisältä, ellei ole pakko ja tiedät mitä teet!
Pythonissa on valtava määrä **moduuleja** (kirjastoja), jotka sisältävät valmiita funktioita ja työkaluja eri tarkoituksiin. Ne säästävät sinulta valtavasti työtä, koska sinun ei tarvitse keksiä pyörää uudelleen.
Käytät moduuleja `import`-avainsanalla.
# Tuodaan 'math'-moduuli matematiikkatoimintoja varten
import math
sade = 5
ala = math.pi * sade ** 2 # Käytetään pi-arvoa math-moduulista
print("Ympyrän ala on:", ala)
neliöjuuri = math.sqrt(25) # Käytetään neliöjuuri-funktiota
print("Neliöjuuri 25:stä on:", neliöjuuri)
# Tuodaan 'random'-moduuli satunnaislukujen luomiseen
import random
satunnainen_luku = random.randint(1, 10) # Satunnainen kokonaisluku 1-10
print("Satunnainen luku:", satunnainen_luku)
valinta = random.choice(["kivi", "paperi", "sakset"]) # Satunnainen valinta listasta
print("Pelin valinta:", valinta)
Moduulien asentaminen (pip): Monet moduulit ovat valmiina Pythonin mukana, mutta voit asentaa lisää `pip`-työkalulla (Pythonin pakettienhallinta). Esimerkiksi:
pip install requests # Asentaa requests-kirjaston verkkopyyntöihin
pip install numpy # Asentaa NumPy-kirjaston numeerisiin laskuihin
Kommentit ovat selityksiä, jotka kirjoitat koodiin itsellesi ja muille koodareille. Python ei suorita kommentteja, vaan ne ovat vain muistiinpanoja. Kommentit ovat todella tärkeitä, jotta koodisi on ymmärrettävää myöhemmin!
Yhden rivin kommentti alkaa `#`-merkillä.
# Tämä on yksinkertainen kommentti
print("Hei!") # Tämäkin on kommentti
# Tämä on toinen kommentti
# ja tämä on sen toinen rivi
'''
Tämä on monirivinen kommentti.
Voit kirjoittaa tähän useammalle riville selityksiä.
Se on teknisesti merkkijono, mutta jos sitä ei tallenneta muuttujaan,
Python kohtelee sitä kommenttina.
'''
print("Koodi jatkuu tästä.")
---
Ohjelmat kaatuvat joskus, jos esimerkiksi käyttäjä antaa vääränlaisen syötteen tai tiedostoa ei löydy. Pythonissa voit "käsitellä" virheitä niin, ettei ohjelma kaadu kokonaan. Tähän käytetään `try`- ja `except`-lohkoja.
try:
# Koodi, josta voi tulla virhe
luku = int(input("Anna kokonaisluku: "))
tulos = 10 / luku
print("Tulos on:", tulos)
except ValueError:
# Tämä koodi suoritetaan, jos tapahtuu ValueError (esim. syötteenä teksti)
print("Virhe: Et antanut kokonaislukua!")
except ZeroDivisionError:
# Tämä koodi suoritetaan, jos tapahtuu ZeroDivisionError (eli jaetaan nollalla)
print("Virhe: Et voi jakaa nollalla!")
except Exception as e: # Yleisempi virheen käsittely
print(f"Tapahtui tuntematon virhe: {e}")
finally:
# Tämä koodi suoritetaan aina, tapahtuipa virhe tai ei
print("Virheiden käsittely kokeiltu.")
---
Ohjelmat usein lukevat tietoa tiedostoista tai kirjoittavat tuloksia tiedostoihin. Tähän käytetään `open()`-funktiota.
**Tiedostotilat:** * `"r"`: lukutila (oletus) * `"w"`: kirjoitustila (luo uuden tiedoston tai ylikirjoittaa olemassa olevan) * `"a"`: lisäystila (lisää tiedoston loppuun, luo uuden jos tiedostoa ei ole)
# --- Tiedoston kirjoittaminen ---
# Käytä 'with'-lausetta, se sulkee tiedoston automaattisesti!
with open("tervehdys.txt", "w") as tiedosto:
tiedosto.write("Hei, tämä on ensimmäinen rivi.\n")
tiedosto.write("Ja tässä toinen rivi!\n")
print("Tiedosto kirjoitettu!")
# --- Tiedoston lukeminen ---
try:
with open("tervehdys.txt", "r") as tiedosto:
sisalto = tiedosto.read() # Lukee koko tiedoston
print("Tiedoston sisältö:")
print(sisalto)
with open("tervehdys.txt", "r") as tiedosto:
print("\nTiedoston sisältö rivi kerrallaan:")
for rivi in tiedosto: # Käy läpi rivi kerrallaan
print(rivi.strip()) # .strip() poistaa rivinvaihdot ja tyhjät merkit
except FileNotFoundError:
print("Virhe: Tiedostoa ei löytynyt!")
---
Olio-ohjelmointi (Object-Oriented Programming, OOP) on ohjelmointiparadigma, joka auttaa rakentamaan monimutkaisia ohjelmia järkevämmällä ja modulaarisemmalla tavalla. Se perustuu **luokkien (classes)** ja **olioiden (objects)** käsitteisiin.
# Määritellään 'Auto'-luokka
class Auto:
# Konstruktori: luo olion ja asettaa sen alkuarvot
def __init__(self, merkki, malli, vuosi):
self.merkki = merkki # 'self' viittaa tähän kyseiseen olioon
self.malli = malli
self.vuosi = vuosi
self.nopeus = 0
# Metodi: olion toiminto
def kiihdyta(self, maara):
self.nopeus += maara
print(f"Auto kiihtyy. Nopeus nyt: {self.nopeus} km/h")
# Metodi: olion toiminto
def nayta_tiedot(self):
print(f"Merkki: {self.merkki}, Malli: {self.malli}, Vuosi: {self.vuosi}, Nopeus: {self.nopeus} km/h")
# Luodaan Auto-olioita (eli "autoja")
auto1 = Auto("Toyota", "Corolla", 2018)
auto2 = Auto("Volvo", "XC60", 2022)
# Kutsutaan olioiden metodeja
auto1.nayta_tiedot()
auto2.nayta_tiedot()
auto1.kiihdyta(50)
auto1.nayta_tiedot()
auto2.kiihdyta(20)
auto2.kiihdyta(30)
auto2.nayta_tiedot()
`self` -avainsana: Kun määrität luokan sisällä metodeja, ensimmäinen parametri on aina `self`. Se viittaa siihen olioon, jota parhaillaan käsitellään. Sinun ei tarvitse antaa `self`-arvoa kutsuessasi metodia (Python hoitaa sen automaattisesti).
Kun työskentelet useamman Python-projektin kanssa, saatat huomata, että eri projektit tarvitsevat eri versioita samoista moduuleista. Tämän ongelman ratkaisee **virtuaaliympäristö**.
Virtuaaliympäristö luo jokaiselle projektille oman eristetyn Python-asennuksen ja omat moduulikokoelmat. Näin projektiesi riippuvuudet eivät mene sekaisin toistensa kanssa.
**Näin luot ja aktivoit virtuaaliympäristön (komentorivillä):**
cd C:\Users\OmaKäyttäjä\Projektit\PythonAppi (Windows)
cd ~/Projektit/PythonAppi (macOS/Linux)
python3 -m venv venv
Tämä luo `venv`-nimisen kansion projektikansioosi.
.\venv\Scripts\Activate.ps1
(Jos PowerShell antaa virheen, sinun on ehkä ensin suoritettava `Set-ExecutionPolicy RemoteSigned -Scope CurrentUser` kerran PowerShellissä järjestelmänvalvojana.)
venv\Scripts\activate
source venv/bin/activate
pip install requests
deactivate
Virtuaaliympäristöt ovat hyvä käytäntö ja niitä kannattaa käyttää jokaisen uuden Python-projektin kanssa!
Olet nyt käynyt läpi Pythonin perusasiat! Tämä on loistava pohja, mutta opittavaa on vielä valtavasti. Tässä muutamia vinkkejä jatkoon:
Mahtavaa työtä! Olet nyt käynyt läpi Pythonin ytimen. Muistutetaan vielä, mitä olet oppinut:
Tämä on valtava määrä tietoa, mutta toivottavasti se on esitetty niin, että pystyt ottamaan sen haltuun. Muista: **tee, erehdy, opi ja toista!** Se on paras tapa kehittyä koodaajana.
Onnea koodausmatkalle! Jos tulee kysyttävää, älä epäröi kysyä.