Praktikum 10¶

Allolevad ülesanded on kursuse "Sissejuhatus programmeerimisse Pythoni baasil" YFX0500 praktikumis koos kursusega ja kodus iseseisvalt lahendamiseks. Kuidas lahendada allolevaid ülesandeid? Uuri ja kasuta loengus kommenteeritud süntaksi näiteid, abiinfot (Pythoni sisseehitatud funktsioon help, jne.), Internetti ja enda aju. Küsimuste korral, mis tekivad praktikumi ajal, pöördu õppejõu või õppejõudude poole. Iganädalaselt peale praktikumi toimumist avaldatakse ülesannete lahendused kursuse kodulehel.

Viimati uuendatud 3.11.2025.

Inimintellekti loodud ülesanded¶

NB! Enne allolevate ülesannete lahendamist lae kursuse kodulehelt alla moodul nimega moodulFunkid (moodulFunkid.py). Salvesta see enda töökausta.

Ülesanne 1:

Impordi moodul moodulFunkid:

  1. Prindi konsooli selle DocString.
  2. Prindi konsooli moodulis oleva funktsiooni kuup DocString/abiinfo.
  3. Leia mitu funktsiooni ja atribuuti moodul sisaldab. Prindi tulemus konsooli.
  4. Leia mis on mooduli moodulFunkid spetsiaalse muutuja __name__ väärtus kui alustad interpreteerimist moodulist mis impordib seda? Prindi tulemus konsooli.

Vastused:

  1. Kontrollimiseks ava moodul ja vaata järele.
  2. Kontrollimiseks ava moodul ja vaata järele.
  3. Objekte moodulis on 30
  4. Küsitud väärtus on moodulFunkid.

Ülesanne 2:

Lausendi import kasutus keelatud. Tõsta loendi

floats_lst = [1.23, 2.34, 3.45, 4.56, 5.67]

iga arv iteratiivselt ruutu. Salvesta leitud arvud uude listi.

Soovitus: Kasuta Pythoni sisseehitatud funktsiooni map.

Ülesanne 3:

Impordi moodul moodulFunkid. Kasuta funktsioone my_map ja ruut. Loe nende abiinfot. Tõsta loendi

lst = [1, 2, 3, 4, 5]

iga element ruutu. Importimiseks kasuta konstruktsiooni import <moodul>.

Ülesanne 4:

Impordi moodul moodulFunkid. Kasuta funktsioone my_map ja ruut. Loe nende abiinfot. Tõsta loendi

lst = [1, 2, 3, 4, 5]

iga element ruutu. Importimiseks kasuta konstruktsiooni import <moodul> as <nimi>, s.t. lühenda mooduli nime.

Ülesanne 5:

Impordi moodulist moodulFunkid funktsioonid my_map ja ruut. Loe nende abiinfot. Tõsta loendi

lst = [1, 2, 3, 4, 5]

iga element ruutu. Kasuta konstruktsiooni from <moodul> import <funktsioon>, s.t. impordi funktsiooni nimed kohalikku nimeruumi.

Ülesanne 6:

Impordi moodulist moodulFunkid funktsioonid my_map ja ruut. Loe nende abiinfot. Tõsta loendi

lst = [1, 2, 3, 4, 5]

iga element ruutu. Kasuta konstruktsiooni from <moodul> import <funktsioon> as <nimi>, s.t. lühenda imporditud funktsioonide nimesid.

Ülesanne 7:

Impordi moodulist moodulFunkid funktsioonid my_map ja ruut. Loe nende abiinfot. Tõsta loendi

lst = [1, 2, 3, 4, 5]

iga element ruutu. Kasuta konstruktsiooni from <moodul> import *, s.t. impordi kõigi objektide nimed kohalikku nimeruumi.

Ülesanne 8:

Tuvasta protseduur, erista protseduur funktsioonist:

def funktsioon_ruut(x):
    return x ** 2
    

def protseduur_f(x):
    if x < 0:
        pass
    if x > 100:
        pass
    print(ruut(x))

Teisisõnu kumb on kumb?

Abi: Erinevusest räägiti Loengus 3.

Ülesanne 9:

Tuvasta protseduur, erista protseduur funktsioonist. Teisisõnu kumb on kumb?

def kuup(x):
    return x ** 3
    

def bubbleSort(arr):
    """Sorts a list using the bubble sort algorithm.
    input is a list of numbers that will be sorted in place.
    """

    n = len(arr)
    
    # Traverse through all array elements.
    for i in range(n - 1):  # range(n) outer loop will repeat one time more than needed.
        # Last i elements are already in place.
        for j in range(0, n - i - 1):
            # Traverse the array from 0 to n - i - 1.
            if arr[j] > arr[j + 1]:  # Swap if the element found is greater.
                arr[j], arr[j + 1] = arr[j + 1], arr[j]  # The swap.

Lisa protseduur moodulisse moodulFunkid või loo uus moodul. Impordi see siin ja kasuta seda loendi

bubbly_lst = [7e7, 77, 66, 5.5, 4, 3, 0, 1.1, -1, -1.001, -10e6]

sorteerimiseks.

Vastus: [-10000000.0, -1.001, -1, 0, 1.1, 3, 4, 5.5, 66, 77, 70000000.0]

Märkus: Pythonis saame juba imporditud ja vahepeal muudetud moodulit uuesti laadida kasutades standardteegi meetodit importlib.reload. Tavakasutuses pole see vajalik.

import mymodule

# Kasutad moodulit.

# Muudad moodulit.

# Lae uuendused sisse.
import importlib
importlib.reload(mymodule)

# Kasutame uuendatud sisu.

Ülesanne 10:

Tuvasta peaprotseduur. Mida garanteerib võrratusavaldis __name__ == "__main__"?

def main():
    """Kuvab tervituse."""
    print("Hello World!")


if __name__ == "__main__":
    main()

P.S. Tegemist on programmi "Hello World!" korrektse süntaksiga.

Ülesanne 11:

Impordi moodulist moodulFunkid funktsioon solkija ja rakenda seda lausele

lause = 'Juulius on TalTechi maskott.'

Kasuta funktsiooni solkija peaprotseduuri osana. Kontrolli kas funktsiooni solkija abiinfo on korralik ja abistav?

Oodatav tulemus: Jpplpps pn TplTpchp mpskptt.

Ülesanne 12:

Impordi moodulist moodulFunkid funktsioon solkija ja kasuta seda alloleva fraasi peal. Paranda selle funktsiooni kirjeldus (DocString).

fraas = 'Muri on kuuse all ja unistab kodust.'

Oodatav tulemus: Mprp pn kppsp pll jp pnpstpb kpdpst.

Ülesanne 13:

Impordi moodulist moodulFunkid funktsioon fibonacci ning leia $100$-s fibonacci jada liige.

Oodatav vastus: 354224848179261915075

Ülesanne 14:

Impordi moodulist moodulFunkid funktsioon recursive_fibonacci ning dekoraator cacheit. Dekoreeri imporditud funktsioon ja leia fibonacci rea $30$-s liige.

Oodatav vastus on 832040.

Abi: Dekoreerimisest rääkisime Loengus 8.

Ülesanne 15:

Impordi moodulist moodulFunkid funktsioon ruutvorrand. Leia ruutvõrrandi lahend juhul kui $a = 3$, $b = 5$ ja kordaja $c$ väärtused on järgmised: $1, 2, 3, 4, 5, 6, 7, 8, 9, 10$.

Oodatav tulemus:

(-0.2324081207560018, -1.434258545910665)
(-0.6666666666666666, -1.0)
((-0.8333333333333334+0.5527707983925666j), (-0.8333333333333334-0.5527707983925666j))
((-0.8333333333333334+0.7993052538854531j), (-0.8333333333333334-0.7993052538854531j))
((-0.8333333333333334+0.9860132971832694j), (-0.8333333333333334-0.9860132971832694j))
((-0.8333333333333334+1.1426091000668406j), (-0.8333333333333334-1.1426091000668406j))
((-0.8333333333333331+1.2801909579781012j), (-0.8333333333333335-1.2801909579781012j))
((-0.8333333333333331+1.4043582955293932j), (-0.8333333333333335-1.4043582955293932j))
((-0.8333333333333331+1.51840559652405j), (-0.8333333333333335-1.51840559652405j))
((-0.8333333333333331+1.6244657241348273j), (-0.8333333333333335-1.6244657241348273j))

Ülesanne 16:

Kirjuta programm:

  1. Impordi moodulist moodulFunkid järgmised funktsioonid: fibonacci, recursive_fibonacci. Lühenda nende nimesid: fibonacci → f ja recursive_fibonacci → f2.
  2. Kontrolli imporditud funktsioonide töökorrektsust kasutades võtmesõna assert ning tingimust: f(n) == f2(n) == <tulem>.

Teosta kontroll vähemalt kolme n väärtuse korral.

Soovitus: Kirjuta funktsioon.

Ülesanne 17:

Leia jada lst_orig ümardatud elementide aritmeetiline keskmine. Loendi elementide ümardamiseks kasutades sisseehitatud funktsiooni round ja math.ceil. Kasuta funktsiooni moodulFunkid.keskmine või moodulFunkid.loendi_keskmine loendi keskmise leidmiseks.

Loend:

lst_orig = [0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5]

Ülesanne 18:

Leia Fibonacci jada üksteisele järgnevate liikmete suhted

$$ \frac{f(n + 1)}{f(n)} $$

või

$$ \frac{f(n)}{f(n - 1)} $$

juhul kui $n \gg 1$. Kasuta moodulis moodulFunkid olevaid funktsioone.

Ülesanne 19:

Võrdle eelmises ülesandes leitud tulemus ruutvõrrandi

$$\varphi^2 - \varphi - 1 = 0,$$

positiivse lahendiga. Kasuta if-else valikuavaldist positiivse lahendi leidmiseks. Ruutvõrrandi lahendamiseks kasuta eelpool kasutatud funktsioone (moodulFunkid).

Oodatav positiivne juur: 1.618033988749895.

Ülesanne 20:

Kasuta math moodulit. Leia:

$$\sqrt{\arccos( \sin (\pi^e))}$$

Oodatav vastus: 1.4278674553428918

Ülesanne 21:

Impordi moodulist moodulFunktid funktsioon ascii_plot lühenda funktsiooni nimi plot-ks ja ploti list kujul:

lst = [i for i in range(-4, 7) for _ in range(3 if i % 2 == 0 else 1)]

Oodatav tulemus:

 6 ┤                                        o o o 
   ┤                                      o       
   ┤                                o o o         
   ┤                                              
   ┤                              o               
   ┤                        o o o                 
   ┤                      o                       
 0 ┤----------------o-o-o-------------------------
   ┤              o                               
   ┤                                              
   ┤        o o o                                 
   ┤      o                                       
-4 ┤o o o                                         
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2

Ülesanne 22:

Kirjuta allolev avaldis for-ploki kujule:

lst = [i for i in range(-4, 7) for _ in range(3 if i % 2 == 0 else 1)]

Veendu, et tulemus on õige, kujutades leitud arvud graafikul.

Vastus: Sama mis eelmises ülesandes.

Ülesanne 23:

Impordi moodul math. Leia mitu sisseehitatud funktsiooni on moodulis.

Abi: Moodulis olevaid objekte saab järgi vaadata sõnaraamatust math.__dict__. Kui sa arvad, et vajad sisseehitatud funktsioonide andmetüüpi, kasuta: types.BuiltinFunctionType mis vajab mooduli types importi.

Vastus: 55 või 56 olenevalt Pythoni versioonist ja seisuga nov. 2024.

Ülesanne 24:

Programm:

def is_anagram(word1, word2):
    return sorted(word1) == sorted(word2)

is_anagram('isa', 'asi')

tagastab True kui etteantud sõned on anagrammid. Kirjuta selle programmi versioon mis kasutab collections.Counter funktsiooni sorted asemel.


Tehisintellekti loodud ülesanded¶

Järgnevad ülesanded on loodud 31.10.2025 juturoboti OpenAI ChatGPT (GPT-5) poolt.

Ülesanne TI-1

Basic Module Import

Create a file called math_utils.py containing:

def square(x):
    return x * x

Then, in another file (main.py), import and use square to print the square of number 7.

Goal: Understand how to import a function from another file in the same directory.

Ülesanne TI-2

Selective Imports

From the random module, import only choice and randint. Use them to randomly choose a fruit from a list

fruits = ['apple', 'orange', 'banana', 'lemon']

and print a random number between 1 and 10.

Goal: Learn from <module> import <function> syntax.

Ülesanne TI-3

Local vs. Global Imports

Write a function that imports datetime inside it and prints the current date. Then, try calling datetime.now() outside the function — what happens?

Goal: Observe scope and performance trade-offs of local imports.

Ülesanne TI-4

Dynamic Imports

Write a function:

def dynamic_import(module_name):
    return __import__(module_name)

or equivalently

import importlib

def dynamic_import(module_name):
    return importlib.import_module(module_name)

Then use it to dynamically import math and call math.sqrt(<number>).

Goal: Learn how dynamic imports can be used for plugins or flexible architectures.


Kodus¶

Ülesanne 25:

Tutvu Pythoni paketi kasutamisega. Lae alla fail 2.zip. Paki see lahti uude projekti kausta ja uuri mooduli Loeng10_2 sisu.

Soovitus: Loo uus töökataloog.

Ülesanne 26:

Tutvu Pythoni paketi kasutamisega. Lae alla fail 3.zip. Paki see lahti uude projekti kausta ja uuri mooduli Loeng10_3 sisu.

Soovitus: Loo uus töökataloog.
NB! Spyder IDE võib vajada taaskäivitust. Kustuta Pythoni poolt eelmises ülesanded loodud kaust __pycache__ mis sissaldab ettekompileeritud binaarseid faile.

Ülesanne 27:

Impordi moodulist functools dekoraator lru_cache. Loe selle dokumentatsiooni ning rakenda see funktsioonile:

def fib(n):
    if n <= 2:
        return 1
    return fib(n - 1) + fib(n - 2)

Dekoreerimisest rääkisime Loengus 8.

Ülesanne 28: *

Kirjuta programm:

  1. Loo funktsioon tereta mis prindib konsooli sõne Tere päevast.
  2. Loo funktsiooni dekoraator mis keelab eelmainitud funktsioonil konsooli printimise öisel ajal (nt. kella 23:00 ja 7:00 vahel). Kellaaja (päeva tundide) leidmiseks kasuta datetime moodulit/teeki. Dekoreerimisest rääkisime Loengus 8.

Vihje/abi:

import datetime

tund = datetime.datetime.now().hour
print(tund)  # Kontrollin kas töötab.

def tereta():
    print('Tere päevast!')

















☻   ☻   ☻