Konspekt


Andmetüübid
Int — täisarv 3,4,5,0,-100
Str — sõne «ema» «32323» «a»
Bool — tõeväärtused True 1 False 0
Float — ujukomaarvud 5.45 -48.125

Programmeerimise ajalugu, Süntaks, Muutujad

Programmeerimine algas mehaaniliste masinatega ja arenes edasi kõrgkeelteks nagu Python. Süntaks on reeglistik, mille järgi kirjutatakse kood. Muutujad on „kastid“, kuhu saab andmeid salvestada.
Esialgu kirjutati programmide juhised otse masinkoodis, kuid hiljem loodi lihtsustamiseks kõrgema taseme keeled nagu Fortran, C ja Python. Tänapäeval kasutatakse programmeerimist laialdaselt igas eluvaldkonnas – alates äppidest kuni tehisintellektini. Programmeerimine põhineb loogikal, täpsusel ja loovusel.

nimi = "Anna"
vanus = 25

nimi = "Anna" – see on muutuja, mis salvestab nime (sõne).
vanus = 25täisarvuline muutuja.

Lineaarsed programmid

nimi=input("Palun sisesta oma nimi ja vajuta ENTER: ")
print("Tere, " + nimi + "!")

input — võimaldab kasutajal midagi sisestada ning edastab saadud teksti Pythonile;
print()funktsioon, mis kuvab teksti ekraanile.
+ – kasutatakse siin sõnede ühendamiseks (konkatenatsioon).

Teema Valikud (If elif else)

Tingimuslikud harud, mis muudavad programmi käitumist. Valib, mida millise tingimuse korral rakendada

vanus = 18
if vanus >= 18:
    print("Täiskasvanu")
elif vanus >= 13:
    print("Teismeline")
else:
    print("Laps")

Muutuv vanus on 18 aastat.
Kui vanus on suurem või võrdne 18 aastaga, olete täiskasvanu.
Kui vanus on suurem või võrdne 13 aastaga, olete teismeline.
Kui väärtus on väiksem, olete laps.

Kasutusjuhendi if struktuur:

if tingimus : operaatorid_1
järgmised operaatorid
või
kui tingimus :
operaatorid_1
järgmised operaatorid

If ja else operaatori struktuur:

if tingimus :
operaatorid_1
else :
operaatorid_2
järgmised operaatorid

If … elif…else operaatori struktuur:

if condition_1 :
operaatorid_1
elif tingimus_2:
operaatorid_2
elif …

else :
operators_n
järgmised operaatorid

Kordused

Kordused täidavad koodi mitu korda.

while tingimus
on täidetud
niikaua kui tingimus on tõene.

kui True:
lõputu tsükkel
Alternatiivina võib true asemel kasutada
kasutada lihtsat
equals, 1 == 1

formuutuja on
määratakse ükshaaval
kõik väärtused nimekirjast.
muutuja jaoks reas:
operaatorid

for i in range(5):
    print(i)
 
x = 0
while x < 5:
    print(x)
    x += 1

on for-silmus, mis kordub 5 korda.
range(5) loob numbrite jada: 0, 1, 2, 3, 4.
muutuja x = 0
while x < 5 — while-tsükkel jätkab täitmist seni,kuni x on väiksem kui 5.
print(x) väljastab x-i praeguse väärtuse.
x += 1 suurendab x-i väärtust 1 võrra igal iteratsioonil (vastab x=x+ 1).

Listid

Nimekirjad on suvalist tüüpi objektide järjestatud ja muudetavad kogumid. Nimekiri võib
sisaldada ükskõik kui palju ükskõik milliseid objekte (sealhulgas sisendatud nimekirju) või ei sisalda midagi.
mitte midagi. Indekseerimine algab 0-st.
Nimekirjade kasutamiseks tuleb need luua.

nimed = ["Marek", "Maksim", "Ilia"]
print(nimed[0])  
nimed.append("Robert")

Nimekiri, mis salvestab kolm nime.
print ( kuvada ) nimi 0 kohale. See on Marek. 0,1,2
Uue nime lisamine nimede loendisse ( append ) Robert

Kasutajate funktsioonid

Pythoni funktsioon on objekt, mis võtab vastu argumente ja tagastab väärtuse(d)

NB! Funktsioon ei tohi lõppeda return-operaatoriga, sellisel juhul tagastab funktsioon väärtuse None.
Funktsioon võib olla mis tahes keerukusega ja tagastada mis tahes objekte (loendeid, tupleid ja isegi funktsioone!).
funktsioonid!)

def tervita(nimi):
    print(f"Tere, {nimi}!")
tervita("Marek")

def — võtmesõna, mida kasutatakse funktsiooni deklareerimiseks.

tervita(nimi) — loob funktsiooni nimega tervita, millel on üks parameeter: nimi.

print(f „Tere, {nimi}!“) — vormistatud string. Selle stringi täitmisel asendatakse üleantud nimi sellega.

Sõnastikud

Sõnastik (dictionary) on võtmepõhine andmestruktuur, mis võimaldab salvestada ja hallata
andmepaaride kogumit kujul võti: väärtus.

Loomine:
#Tühja sõnastiku loomine
andmed = {}
#Võtmete ja väärtustega
andmed = {‘nimi’: ‘Mari’, ‘vanus’: 25, ‘keel’: ‘eesti’}
#dict() funktsiooniga
andmed = dict(nimi=’Mari’, vanus=25, keel=’eesti’)

Väärtustele ligipääs:
print(andmed[‘nimi’]) # Mari
#Või kasutades get() — kui võtit pole, ei tule viga
print(andmed.get(‘aadress’, ‘Ei ole määratud’)) # Ei ole määratud

Väärtuste muutmine ja lisamine:
andmed[‘nimi’] = ‘Kati’ # Väärtuse muutmine
andmed[’email’] = ‘kati@example.com’ # Uue paari lisamine
print(andmed) # {‘nimi’: ‘Kati’, ‘vanus’: 25, ‘keel’: ‘eesti’, ’email’:
‘kati@example.com’}

Elementide eemaldamine:
del andmed[‘vanus’] # Eemaldab võtme ja väärtuse
andmed.pop(‘keel’) # Eemaldab ja tagastab väärtuse
print(andmed) # {‘nimi’: ‘Kati’, ’email’: ‘kati@example.com’}

Failidega töö

Pythonis on võimalik txt faile kiirelt ja efektiivselt kasutada, olgu siis selleks informatsiooni talletamine või
analüüsimine. Esimese sammuna tuleb õige txt fail avada, millega me tegelema hakkame.
Faili avamine:
f = open(‘file.txt’, ‘r’) #open() meetod annab käskluse programmil avada test.txt fail ning r määrab ära,
et tegemist on read ehk faili lugemisega.

Failist lugemine:

#Tekst failist salvestame järjendisse
def Loe_failist(fail:str)-&gt;list:
 f=open(fail,'r',encoding="utf-8-sig")
 jarjend=[]
 for rida in f:
 jarjend.append(rida.strip())
 f.close()
return jarjend

Salvestamine failisse:

#Järjendite elemendid salvestame failisse
def Kirjuta_failisse(fail:str,jarjend:list):
 f=open(fail,'w',encoding="utf-8-sig")
 for line in jarjend:
 f.write(line+'\n')
 f.close()

file.read(n) loeb failist hulga n suuruses tähti, kui n on tühi, siis loeb terve faili.
file.readline(n) loeb failist tekstirea, kuid sealt mitte rohkem kui n märki.
file.readlines(n) loeb failist n tekstirida.

Smtplib:
Python sisaldab sisseehitatud mooduleid, mida saame kasutada e-kirjade saatmiseks. Selleks
on vaja kahte moodulit, mis on smtplib ja email.message.

import smtplib
from email.message import EmailMessage

Konfigureeri e-posti päise väljad:
Kõigepealt loome klassi EmailMessage() abil objekti, mis sisaldab kõiki e-kirja üksikasju.
#create an email message object
message = EmailMessage()
Järgmisena saame lisada e-posti sõnumi päise üksikasjad, et määrata teema, saatja aadress ja
vastuvõtja aadress, nagu allpool näidatud.

email_subject = "Email test from Python"
sender_email_address = "your_email@gmail.com"
receiver_email_address = "receiver_email@address.com"
#configure email headers
message['Subject'] = email_subject
message['From'] = sender_email_address
message['To'] = receiver_email_address

Konfigureeri e-kirja keha:
Selle näite puhul on sõnumi sisu tavaline tekstisõnum. E-kirja sisu määratakse e-posti objekti
meetodi set_content() abil järgmiselt.
#set email body text
message.set_content(«Hello from Python!»)

Konfigureeri e-posti server:
E-posti server on rakendus, mida kasutatakse e-kirjade saatmiseks ja saamiseks. Sellised
serverid kasutavad SMTP-protokolli, et saata e-kirju teistele serveritele.
Meie näites näeme, et e-kiri saadetakse gmaili kontolt, seega peame kasutama serverina
smtp.gmail.com.
Teine seade, mida me peame oma SMTP-serveri jaoks konfigureerima, on meiliport. See on
võrguport, mida meie python-kliendirakendus kasutab e-kirjade saatmiseks teisele serverile.
Me kasutame SMTP porti 587, mis on vaikimisi port, mida kasutatakse e-kirjade saatmise
käsitlemiseks SMTP kaudu.

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

Pärast serveri deklareerimist on meil vaja teha mõned täiendavad sammud, et luua ühendus
SMTP-serveriga.
See hõlmab meie enda tuvastamist serverile, kasutades funktsiooni ehlo(), seejärel turvalise
TLS-ühenduse algatamist serveriga, kasutades funktsiooni starttls().

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()

JSON:

JSON (JavaScript Object Notation) on lihtne andmevorming, mida kasutatakse:
Andmete salvestamiseks failides.
Andmete vahetamiseks programmide vahel.
JSON-i sarnasused Pythoniga:
Python dict = JSON objekt.
Python list = JSON massiiv.
Python True/False = JSON true/false.
Python None = JSON null.

JSON-i kasutamine Pythonis:

Mooduli importimine:
import json

Python andmestik → JSON string:
andmed = {«nimi»: «Anna», «vanus»: 25, «abielus»: False}
json_string = json.dumps(andmed)
print(json_string)

Salvesta JSON faili:
with open(«andmed.json», «w») as f:
json.dump(andmed, f)

Loe JSON failist:
with open(«andmed.json», «r») as f:
andmed_failist = json.load(f)
print(andmed_failist)

Ilusam formaat:
print(json.dumps(andmed, indent=2, sort_keys=True))

Keerulisemad andmestruktuurid:

klass = {
"opetaja": "Tamm",
"opilased": [
{"nimi": "Mari", "hinne": 5},
{"nimi": "Jüri", "hinne": 4}
]
}
with open("klass.json", "w") as f:
json.dump(klass, f, indent=2)

Kokkuvõte:
JSON on Pythonis väga kasulik, et:

Salvestada püsivaid andmeid.
Vahetada infot programmide vahel.
Teha oma projektid professionaalsemaks ja korrastatumaks!

Graafikute ja diagrammide loomine

Matplotlib – Graafikute loomine Pythonis:

matplotlib on üks enimkasutatavaid visualiseerimisteeke Pythonis. Selle alamosa pyplot võimaldab kiiresti graafikuid luua, sarnaselt MATLABi süntaksile.

import matplotlib.pyplot as plt
 
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
 
plt.plot(x, y)
plt.title("Lihtne graafik")
plt.xlabel("x telg")
plt.ylabel("y telg")
plt.show()

Põhilised graafikukäsud:

Matplotlib võimaldab joonistada mitmesuguseid diagramme:

KäskGraafiku tüüp
plot()Joonjoon
scatter()Hajuvusdiagramm
bar()Tulpdiagramm
hist()Histogramm
pie()Sektordiagramm
TähisStiil
'-'Täisjoon
'--'Katkendjoon
'-.'Punkt-kriips
':'Punktiir
''Ainult markerid
TähisMarker
'.'Punkt
'o'Ring
'^'Kolmnurk üles
's'Ruut
'*'Täht
'D'Rombi

Tekst / fondid ja värvid:

Saame graafikutele lisada tekste:
 
plt.title("Graafiku pealkiri", fontsize=14, fontweight='bold')
plt.xlabel("x telg", fontsize=12)
plt.ylabel("y telg", fontsize=12)
plt.text(2, 10, "Tipp-punkt", fontsize=10, color='red')

Matplotlib toetab värvi esitamist:
Värvinimed: 'blue''green''red'
Lühendid: 'b''g''r'
RGB heksakoodid: '#FF5733'
Eelseadistatud paletid: 'viridis''plasma''inferno''cividis'

plt.plot(x, y, color='purple')

Graafiline liides(Tkinter, CustomTkinter)

Tkinter on Pythonisse sisseehitatud moodul, millega saab luua graafilisi aknaid, nuppe, sisestusvälju ja palju muud. See põhineb Tcl/Tk teekidel ja on vaikimisi olemas kõigis Python’i standardpaigaldustes.

Põhiprintsiibid:

Tkinter’i kasutamine põhineb järgmisel loogikal:

Loo põhiaken (Tk)
Lisa sinna vidinad (nupud, sildid, sisestusväljad jne)
Käivita sündmuste tsükkel (mainloop)

Lihtne näide: Põhistruktuur:

import tkinter as tk
 
# Loo põhiaken
aken = tk.Tk()
aken.title("Minu esimene GUI")
aken.geometry("300x200")
 
# Lisa tekstisilt
silt = tk.Label(aken, text="Tere, maailm!")
silt.pack()
 
# Käivita rakendus
aken.mainloop()

Label – Tekstiväli

silt =tk.Label(aken,text="See on tekst",fg="blue",font=("Arial",14))
silt.pack()

Button – Nupp

def vajutati():
    print("Nuppu vajutati!")
 
nupp = tk.Button(aken, text="Vajuta mind", command=vajutati)
nupp.pack()

Entry – Sisestusväli

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

Text – Mitmerealine tekstikast

tekstikast = tk.Text(aken, height=5, width=30)
tekstikast.pack()

Checkbutton – Märkeruut

valik = tk.IntVar()
märk = tk.Checkbutton(aken, text="Valik", variable=valik)
märk.pack()

istbox – Valikuloend

import tkinter as tkaken = tk.Tk()aken.title("Listbox näide")
# Loendi loomine
loend = tk.Listbox(aken)
for vili in ["Õun", "Banaan", "Apelsin", "Ploom"]:
    loend.insert(tk.END, vili)
loend.pack()

# Valiku näitamine
def näita_valik():
    try:
        valitud = loend.get(loend.curselection())
        silt.config(text=f"Valisid: {valitud}")
    except:
        silt.config(text="Palun vali midagi!")

tk.Button(aken, text="Näita valikut", command=näita_valik).pack()
silt = tk.Label(aken)
silt.pack()

aken.mainloop()

Paigutusmeetodid

pack() – lihtne järjestus

tk.Label(aken, text="Üks").pack()
tk.Button(aken, text="Kaks").pack()

grid() – täpne paigutus ridade ja veergudega

tk.Label(aken, text="Eesnimi:").grid(row=0, column=0)
tk.Entry(aken).grid(row=0, column=1)

place() – paigutus x/y koordinaatide järgi

tk.Label(aken, text="Käsitsi paigutus").place(x=50, y=30)

⚠️ Ära kasuta pack() ja grid()/place() samas konteineris!

CustomTkinter:

CustomTkinteril on sama rakendus kui tavalisel Tkinteril, kuid selle nuppude taustad ja ikoonid on ilusamad ja tõsisemad!

Näidis:

import customtkinter as ctk
 
# Valikuline: tee tume või hele teema
ctk.set_appearance_mode("System")  # "Dark", "Light", "System"
ctk.set_default_color_theme("blue")  # või "green", "dark-blue"
 
# Aken
app = ctk.CTk()
app.title("CustomTkinter näidis")
app.geometry("400x300")
 
# Silt
label = ctk.CTkLabel(app, text="Tere tulemast!", font=("Arial", 20))
label.pack(pady=20)
 
# Sisend
entry = ctk.CTkEntry(app, placeholder_text="Sisesta midagi...")
entry.pack(pady=10)
 
# Nupp
def nupp_vajutatud():
    sisend = entry.get()
    label.configure(text=f"Tere, {sisend}!")
 
button = ctk.CTkButton(app, text="Kinnita", command=nupp_vajutatud)
button.pack(pady=10)
 
# Käivitamine
app.mainloop()

OOP

Kuigi Python toetab mitut programmeerimise paradigmat, on neist kõige enam rõhutatud just objektorienteeritud programmeerimise (OOP) paradigmat. Võib öelda, et OOP-i kasutamine tähendab programmikoodi teatud (kindlal) viisil organiseerimist. Selle lähenemise juures leiavad kasutamist mõisted nagu klass ja objekt, teemasse enam süvenedes ka kapseldamine, polümorfism, pärimine, modulaarsus, abstraktsioon. Viimaseid nimetatakse OOP tehnikateks.

Miks kasutada objektorienteeritud programmeerimist?:

Objektorienteeritud programmeerimise plussid:

  • Programmi erinevateks osadeks jaotamine ja organiseeritus
  • Vigade leidmine on kergem
  • Korduvkasutus lühendab koodi pikkust
  • Lihtsam teha koostööd teiste koodikirjutajatega

Klassid:

Klass on kasutaja määratletud andmestruktuur, mis seob andmeliikmed ja meetodid üheks üksuseks. Klass on objekti loomise plaan või koodimall. Klassi abil saate luua nii palju objekte kui soovite. 

  • Iga objekt kuulub mingisse klassi; ta on selle klassi isend (ingl.k. instance), näiteks isend Miisu kuulub klassi «kass».
  • Sama klassi isenditel on samad isendi muutujad (ingl.k. instance variables) ja isendi meetodid (ingl.k. instance methods), isendi muutujate väärtused (olek) on üldjuhul erinevad.
  • Klass võib sisaldada ka muutujaid ja meetodeid, mis ei ole seotud isenditega, nn. klassi muutujad (ingl.k. class variables) ja klassi meetodid (ingl.k. class methods). Klassi muutujad on ühised kõigile isenditele (tavaliselt konstandid, näiteks kassi jalgade arv — 4) ja neid saab kasutada nii klassi meetodites kui ka isendi meetodites. Klassi meetodeid kasutatakse vahel uute isendite loomise juures (isendiloome, ingl.k. instantiation), samuti on neist abi siis, kui me ei soovi meetodit objekti sisse kapseldada.

Näidis:

class Opilane:
    def __init__(self, nimi, vanus):
        self.nimi = nimi
        self.vanus = vanus
 
    def tutvusta(self):
        print(f"Mina olen {self.nimi}, {self.vanus} aastat vana")
 
marek = Opilane("Marek", 20)
marek.tutvusta()

class Opilane: — loob uue klassi nimega Opilane.
init — on eriline meetod, mis käivitatakse, kui objekt luuakse. Ta saab parameetrid nimi ja vanus ning salvestab need objekti sisse.
self.nimi = nimi ja self.vanus = vanus — salvestavad andmed objekti omadustesse.
def tutvusta(self): — meetod, mis kuvab tekstina õpilase andmed.
marek = Opilane(«Marek», 20) — loob uue Opilane objekti nimega marek.
marek.tutvusta() — kutsub meetodi ja väljastab.

https://github.com/Ubunter69/class