Praktikum 10¶
Allolevad ülesanded on kusrsuse "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.
NB! Enne allolevate ülesannete lahendamist lae kursuse kodulehelt alla moodudul nimega moodulFunkid
(moodulFunkid.py). Salvesta see enda töökausta.
Ülesanne 1:
Impordi moodul moodulFunkid
:
- Prindi konsooli selle DocString.
- Prnidi konsooli moodulis oleva funktsiooni
kuup
DocString/abiinfo. - Leia mitu funktsiooni ja atribuuti moodul sisaldab. Prindi tulemus konsooli.
- Leia mis on spetsiaalse muutuja
__name__
väärtus. Prindi tulemus konsooli.
Vastused:
- Kontrollimiseks ava moodul ja vaata järele.
- Kontrollimiseks ava moodul ja vaata järele.
- Objekte moodulis on 26
- Küsitud väärtud 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. 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]
Ü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
moodulFunkid
järgmised funktsioonid:fibonacci
,recursive_fibonacci
. Lühenda nende nimesid:fibonacci
→f
jarecursive_fibonacci
→f2
. - 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: Loo protseduur.
Ü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 $f(n+1)/f(n)$ või $f(n)/f(n-1)$ juhul kui $n \gg 1$. Kasuta moodulis moodulFunkid
olemasolevaid 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 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.
Kodus¶
Ülesanne 22:
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 23:
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 24:
Impordi moodulist functools
dekoraator lru_cache
. Loe selle abiinfot 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 25:*
Kirjuta programm:
- Loo funktsioon
tereta
mis 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 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!')