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.
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:
- Prindi konsooli selle DocString.
- Prindi konsooli moodulis oleva funktsiooni
kuupDocString/abiinfo. - Leia mitu funktsiooni ja atribuuti moodul sisaldab. Prindi tulemus konsooli.
- Leia mis on mooduli
moodulFunkidspetsiaalse muutuja__name__väärtus kui alustad interpreteerimist moodulist mis impordib seda? Prindi tulemus konsooli.
Vastused:
- Kontrollimiseks ava moodul ja vaata järele.
- Kontrollimiseks ava moodul ja vaata järele.
- Objekte moodulis on 30
- 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:
- Impordi moodulist
moodulFunkidjärgmised funktsioonid:fibonacci,recursive_fibonacci. Lühenda nende nimesid:fibonacci→fjarecursive_fibonacci→f2. - Kontrolli imporditud funktsioonide töökorrektsust kasutades võtmesõna
assertning 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:
- Loo funktsioon
teretamis prindib konsooli sõneTere päevast. - 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
datetimemoodulit/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!')