Programming notes

Programmeerimise ajalugu

  • Alguses kirjutati koodi nullide ja ühtedena (masinkood).
  • Hiljem tulid lihtsamad keeled: Assembler, C, Java, Python.
  • Tänapäeval kasutatakse kõrgkeeli, mis on inimesele arusaadavad.

Süntaks (Syntax)

  • Süntaks = reeglid, kuidas koodi õigesti kirjutada.
  • Vale süntaks → viga (SyntaxError).

Näited:

print("Tere")
a = 5
if a > 3:
    print("Suurem kui 3")

Muutujad (Variables)

  • Muutuja on nimega väärtus.

Näited:

nimi = "Mari"    # tekst
vanus = 17       # arv
summa = 5 + 3

1.Teema: Lineaarsed programmid

Mis on lineaarne programm?

Lineaarne programm on lihtne programm, mis täidab käske järjest, ühtki haru ega kordust pole.

Kõik käsud toimuvad üksteise järel, ülalt alla – nagu retsept.


Näide:

nimi = input("Sisesta nimi: ")
vanus = int(input("Sisesta vanus: "))
print("Tere, " + nimi)
print("Sa oled " + str(vanus) + " aastat vana.")

Kokkuvõte:

  • Lineaarne = otse järjest tehtavad käsud
  • Ei ole korduseid (for, while) ega tingimusi (if)
  • Sobib väga lihtsate programmide jaoks

2.Teema: Valikud (if, elif, else)

Mis on valik?

Valik tähendab, et programm otsustab, mida teha, olukorra järgi.

Kasutatakse võtmesõnu:
if – kui tingimus on tõene
elif – kui eelmine ei sobinud, proovi järgmist
else – kui ükski tingimus ei sobinud

Näide:

vanus = int(input("Sisesta vanus: "))

if vanus < 18:
    print("Oled alaealine.")
elif vanus < 65:
    print("Oled täiskasvanu.")
else:
    print("Oled pensionär.")

Kokkuvõte:

  • if kontrollib tingimust
  • elif kontrollib järgmist tingimust, kui eelmine ei sobinud
  • else tehakse, kui ükski eelmine ei sobinud

3.Teema: Kordused (tsüklid)

Mis on kordus?

Kordus (ehk tsükkel) võimaldab sama koodi mitu korda järjest käivitada.

for tsükkel

Kui tead, mitu korda soovid midagi teha.

for i in range(5):
    print("Tere")

while tsükkel

Kuni tingimus on tõene, kordub.

i = 0
while i < 5:
    print("Hei")
    i += 1

Kokkuvõte:

TsükkelKasutus
forTeatud arv kordi
whileKuni tingimus kehtib

4. Teema: Listid (Loendid)

Mis on list?
List (ehk loend) on andmetüüp, mis hoiab mitut väärtust korraga.

Näide:

puuviljad = ["õun", "banaan", "pirn"]
print(puuviljad[0])  # prindib "õun"

Mida saab listiga teha?

  • Elemente lisada:
puuviljad.append("apelsin")

Elementide arvu teada:

len(puuviljad)

Tsükliga läbi käia:

for puuvili in puuviljad:
    print(puuvili)

Kokkuvõte:
List on nagu karp, kuhu saab panna palju asju ja hiljem neid kasutada või muuta.

5. Pythoni funktsioonid

str()

1234# str() muudab muutuja stringiksa ="Minu arv on "b =10c =a +str(b)

upper()

1234a ="artjom"print(a) # artjoma.upper()print(a) # ARTJOM

lower()

1234a ="Minu Nimi On Artjom"print(a) # Minu Nimi On Artjoma.lower()print(b) # minu nimi on artjom

capitalize()

1234a ="artjom põldsaar"print(a) # artjom põldsaara.capitalize()print(a) # Artjom põldsaar

date.today()

12tana =date.today()print(f"Täna on {tana}") # Täna on 2025-01-27

date()

123aastaLopp =date(tana.year, 12, 31)print(f"Aasta lõpp on {aastaLopp}") # Aasta lõpp on 2025-12-31

strftime()

1234567891011# 27/12/2022tana =tana.strftime("%d/%m/%Y")# December 27, 2022tana =tana.strftime("%B %d, %Y")# 12/27/22tana =tana.strftime("%m/%d/%y")# Dec-27-2022tana =tana.strftime("%b-%d-%Y")

monthrange(a, b)

1234res =calendar.monthrange(tana.year, tana.month)paevadKuus =res[1]print(f"Kuus on {paevadKuus} päeva")# Kuus on 31 päeva

round(arv, punktid)

12a =3.1458139287print(round(a, 2)) # 3.15

isalnum()Returns True if all characters in the string are alphanumeric
isalpha()Returns True if all characters in the string are in the alphabet
isascii()Returns True if all characters in the string are ascii characters
isdecimal()Returns True if all characters in the string are decimals
isdigit()Returns True if all characters in the string are digits
isidentifier()Returns True if the string is an identifier
islower()Returns True if all characters in the string are lower case
isnumeric()Returns True if all characters in the string are numeric
isprintable()Returns True if all characters in the string are printable
isspace()Returns True if all characters in the string are whitespaces
istitle()Returns True if the string follows the rules of a title
isupper()Returns True if all characters in the string are upper case

Saada e-kiri Pythoniga

Samm 1: Impordi e-posti moodulid

import smtplib
from email.message import EmailMessage

Samm 2: Konfigureeri e-posti päise väljad

message = EmailMessage()
email_subject = "Email test from Python"
sender_email_address = "your_email@gmail.com"
receiver_email_address = "receiver_email@address.com"
message['Subject'] = email_subject
message['From'] = sender_email_address
message['To'] = receiver_email_address

Samm 3: Konfigureeri e-kirja keha

message.set_content("Hello from Python!")

Samm 4: Konfigureeri e-posti server

email_smtp = "smtp.gmail.com"
# set smtp server and port
server = smtplib.SMTP(email_smtp, '587')

email_smtp = "smtp.gmail.com"
# set smtp server and port
server = smtplib.SMTP(email_smtp, '587')
# identify this client to the SMTP server
server.ehlo()
# secure the SMTP connection
server.starttls()

Samm 5: e-kirja saatmine

sender_email_address = "your_email@gmail.com"
email_password = "your_email_password"
# login to email account
server.login(sender_email_address, email_password)
# send email
server.send_message(message)
# close connection to server
server.quit(

Samm 6: Kõik kokku panemine

import smtplib
from email.message import EmailMessage
email_subject = "Email test from Python"
sender_email_address = "your_email@gmail.com"
receiver_email_address = "receiver_email@address.com"
email_smtp = "smtp.gmail.com"
email_password = "your_email_password"
# create an email message object
message = EmailMessage()
# configure email headers
message['Subject'] = email_subject
message['From'] = sender_email_address
message['To'] = receiver_email_address
# set email body text
message.set_content("Hello from Python!")# set smtp server and port
server = smtplib.SMTP(email_smtp, '587')
# identify this client to the SMTP server
server.ehlo()
# secure the SMTP connection
server.starttls()
# login to email account
server.login(sender_email_address, email_password)
# send email
server.send_message(message)
# close connection to server
server.quit()

HTML-sisu saatmine e-postiga

&lt;!DOCTYPE html&gt;
&lt;head&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Sending an HTML email from Python&lt;/h1&gt;
&lt;p&gt;Hello there,&lt;/p&gt;
&lt;a href="https://inspirezone.tech/"&gt;Here's a link to an awesome dev
community!&lt;/a&gt;
&lt;/body&gt;
&lt;/html&gt;

# create an email message object
message = EmailMessage()
# read file containing html
with open('message.html', 'r') as file:
file_content = file.read()
# add message content as html type
message.set_content(file_content, subtype='html')

Pildi saatmine e-postiga manusena

with open('image.jpg', 'rb') as file:
image_data = file.read()

import imghdr
# create an email message object
message = EmailMessage()
# open image as a binary file and read the contents
with open('image.jpg', 'rb') as file:
image_data = file.read()
message.set_content("Email from Python with image attachment")
# attach image to email
message.add_attachment(image_data, maintype='image',
subtype=imghdr.what(None, image_data))

6.Teema: Sõnastikud (Dictionaries)

Mis on sõnastik?
Sõnastik (inglise keeles dictionary) on andmetüüp, kus igal väärtusel on oma nimi ehk võti (key).
See on nagu sõnastik päriselus: igal sõnal (võti) on oma tähendus (väärtus).

Näide:

inimene = {
    "nimi": "Mari",
    "vanus": 17,
    "linn": "Tallinn"
}

"nimi" on võti → "Mari" on väärtus

"vanus"17

"linn""Tallinn"

Kuidas väärtust saada?

print(inimene["nimi"])  # prindib: Mari

Kuidas uut lisada?

inimene["hobi"] = "joonistamine"

Kuidas kõiki võtmeid ja väärtusi vaadata?

for võti, väärtus in inimene.items():
    print(võti, ":", väärtus)

Kokkuvõte:
Sõnastik on nagu kast nimega siltidega, kus igal asjal on oma nimi. Väga kasulik, kui on vaja andmeid selgelt korraldada (näiteks inimese andmed).

7.Teema: Failidega töö (Töö tekstifailidega)

Mis see tähendab?
Failidega töö tähendab, et programm loeb või kirjutab andmeid faili – näiteks .txt faili.

Faili kirjutamine (salvestamine)

with open("minu_fail.txt", "w") as f:
    f.write("Tere maailm!")

"w" tähendab write – kirjutab faili (kustutab vana sisu).

with hoolitseb, et fail suletakse pärast kasutamist.

Faili lugemine

with open("minu_fail.txt", "r") as f:
    sisu = f.read()
    print(sisu)

"r" tähendab read – loetakse faili sisu.

Rea kaupa lugemine

with open("minu_fail.txt", "r") as f:
    for rida in f:
        print(rida.strip())

.strip() eemaldab tühikud ja reavahetused lõpus.

Faili sisu lisamine (mitte kustutamine)

with open("minu_fail.txt", "a") as f:
    f.write("\nUus rida")

"a" tähendab append – lisab lõppu, ei kustuta vana sisu.

Kokkuvõte:

RežiimTähendus
"r"lugemine
"w"kirjutamine (uus)
"a"lisamine lõppu

8.1.Teema: Graafikute ja diagrammide loomine (Pythonis)

Mis see tähendab?
Graafikute ja diagrammide abil saame andmeid visuaalselt esitada – näiteks joonistada tulpdiagrammi või joondiagrammi.

Selleks kasutatakse sageli matplotlib teeki (raamatukogu).

Tulpdiagramm

import matplotlib.pyplot as plt

puuviljad = ["Õun", "Banaan", "Pirn"]
kogused = [10, 7, 5]

plt.bar(puuviljad, kogused)
plt.title("Puuviljade kogused")
plt.xlabel("Puuviljad")
plt.ylabel("Kogus")
plt.show()

plt.bar(...) – joonistab tulpdiagrammi.

plt.show() – näitab pilti.

Joondiagramm

päevad = ["E", "T", "K", "N", "R"]
temperatuurid = [18, 20, 19, 22, 21]

plt.plot(päevad, temperatuurid)
plt.title("Temperatuur nädalas")
plt.xlabel("Päev")
plt.ylabel("°C")
plt.show()

Sektordiagramm

ajakasutus = ["Magamine", "Õppimine", "Mängimine"]
tunnid = [8, 6, 10]

plt.pie(tunnid, labels=ajakasutus, autopct="%1.1f%%")
plt.title("Minu päev")
plt.show()

Kokkuvõte:

DiagrammFunktsioonMilleks sobib?
plt.bar()TulpdiagrammVõrdlemine
plt.plot()JoondiagrammNäitamine ajas
plt.pie()SektordiagrammProtsentuaalne jaotus

8.2.Teema: Graafiline liides (Tkinter, CustomTkinter jne)

Mis on graafiline liides?
Graafiline liides (GUI – Graphical User Interface) tähendab, et kasutaja suhtleb programmiga hiire ja nuppude kaudu, mitte ainult tekstiga.

Pythonis saab graafilist liidest teha näiteks Tkinteri abil.

Lihtne Tkinteri näide

import tkinter as tk

aken = tk.Tk()
aken.title("Minu esimene aken")

nupp = tk.Button(aken, text="Vajuta mind!", command=lambda: print("Tere!"))
nupp.pack()

aken.mainloop()

Selgitus:

  • tk.Tk() – loob akna.
  • Button(...) – loob nupu.
  • command=... – ütleb, mida teha, kui nuppu vajutatakse.
  • pack() – paigutab nupu aknasse.
  • mainloop() – hoiab akna lahti.

Väljaga näide

import tkinter as tk

def tervita():
    nimi = sisend.get()
    silt.config(text=f"Tere, {nimi}!")

aken = tk.Tk()
aken.title("Tervitaja")

sisend = tk.Entry(aken)
sisend.pack()

nupp = tk.Button(aken, text="Tervita!", command=tervita)
nupp.pack()

silt = tk.Label(aken, text="")
silt.pack()

aken.mainloop()

CustomTkinter – ilusam liides

Kui tahad ilusamat disaini, võib kasutada customtkinter teeki.

pip install customtkinter

Näide:

import customtkinter as ctk

aken = ctk.CTk()
aken.title("Kaunis aken")

nupp = ctk.CTkButton(aken, text="Vajuta mind")
nupp.pack(pady=10)

aken.mainloop()

Kokkuvõte:

TeekMilleks sobib?
tkinterLihtne ja klassikaline liides
customtkinterModernsem ja ilusam välimus

9.Teema: OOP (Objektorienteeritud programmeerimine)

Mis on OOP?

Objektorienteeritud programmeerimine (OOP) on programmi ülesehitamise viis, kus kood jagatakse objektideks ja klassideks.
See muudab programmi loogilisemaks, korduvkasutatavaks ja lihtsamini hallatavaks.


Miks kasutada OOP-i?

  • ✅ Loogiline jaotus osadeks – lihtsam mõista
  • ✅ Korduvkasutus – vähem dubleerimist
  • ✅ Vigade leidmine on lihtsam
  • ✅ Lihtsam koostöö meeskonnas
  • ✅ Kood on skaleeritavam ja hooldatavam

Põhimõisted

MõisteSelgitus
KlassMall või plaan objektide loomiseks. Kirjeldab, millised omadused ja tegevused objektidel on.
ObjektKlassist loodud isend – tal on omadused (muutujad) ja tegevused (meetodid).
MeetodFunktsioon, mis kuulub klassi ja kirjeldab objekti käitumist.
MuutujaInfo (andmed), mis on seotud objektiga.
IsendÜks konkreetne objekt, mis on loodud klassist.

Klass ja konstruktor

Klass on mall, objekt on reaalne asi:

class Dog:
    def __init__(self, name):
        self.name = name

koer = Dog("Miisu")

  • __init__() on konstruktor – käivitatakse objekti loomisel.
  • self.name – objekti muutuja.

Konstruktorite tüübid:

TüüpSelgitus
VaikekonstruktorLuuakse automaatselt, kui konstruktorit pole
ParameetritetaAinult self, väärtusi ei anta
ParameetrilineSaab luua objekte erinevate väärtustega

Pärimine (inheritance)

Pärimise abil saab üks klass teiselt üle võtta omadusi ja meetodeid.

class Loom:
    def heli(self):
        print("Tegelen heliga")

class Koer(Loom):
    def heli(self):
        print("Haugun")

k = Koer()
k.heli()  # Haugun

Koer pärib Loom klassilt meetodi, aga kirjutab selle ümber.

See võimaldab vältida dubleerimist ja laiendada olemasolevaid klasse.

Koer pärib Loom klassilt meetodi, aga kirjutab selle ümber.

See võimaldab vältida dubleerimist ja laiendada olemasolevaid klasse.

__hind on privaatne – seda ei saa väljastpoolt otse muuta.

Selleks kasutatakse setter-meetodit.

Polümorfism (polymorphism)

Polümorfism tähendab, et eri klassidel võib olla sama-nimeline meetod, aga nad käituvad erinevalt.

class Ring:
    def info(self):
        print("Ringil pole nurki")

class Ristkülik:
    def info(self):
        print("Ristkülikul on 4 nurka")

def testi(kujund):
    kujund.info()

testi(Ring())       # Ringil pole nurki
testi(Ristkülik())  # Ristkülikul on 4 nurka

Sama funktsioon (info) teeb erinevates klassides erinevaid asju.

See võimaldab kirjutada üldisemaid funktsioone, mis töötavad erinevate objektidega.

Abstraktsioon

Abstraktsioon tähendab, et kasutaja näeb ainult olulisemat osa funktsioonist või objektist, aga mitte selle sisemist toimimist.

from abc import ABC, abstractmethod

class Loom(ABC):
    def maga(self):
        print("Magan")

    @abstractmethod
    def heli(self):
        pass

class Kass(Loom):
    def heli(self):
        print("Nurrun")

ABC ja @abstractmethod loovad abstraktse klassi.

Abstraktses klassis peab iga alamklass kindlasti määrama heli() meetodi.

Kasulik, kui tahame luua ühtse struktuuri, mida teised klassid järgivad.

Kokkuvõte

TehnikaSelgitus
KlassKirjeldab objekti omadusi ja käitumist
ObjektKlassist loodud konkreetne asi
KapseldaminePeidab andmed ja kaitseb neid otse muutmise eest
PärimineVõimaldab võtta omadusi/methodid üle teistelt klassidelt
PolümorfismSama-nimeline meetod töötab erinevalt eri klassides
AbstraktsioonNäitab ainult olulist osa, peidab tehnilist sisu