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.

Viimati uuendatud 4.11.2024.

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

Ülesanne 1:

Impordi moodul moodulFunkid:

  1. Prindi konsooli selle DocString.
  2. Prnidi konsooli moodulis oleva funktsiooni kuup DocString/abiinfo.
  3. Leia mitu funktsiooni ja atribuuti moodul sisaldab. Prindi tulemus konsooli.
  4. Leia mis on spetsiaalse muutuja __name__ väärtus. Prindi tulemus konsooli.

Vastused:

  1. Kontrollimiseks ava moodul ja vaata järele.
  2. Kontrollimiseks ava moodul ja vaata järele.
  3. Objekte moodulis on 26
  4. 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:

  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: 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:

  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!')

















☻   ☻   ☻