{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Praktikum 6\n", "\n", "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.\n", "\n", "
Viimati uuendatud 7.10.2024.
\n", "\n", "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 1:**\n", "\n", "Kasuta `for`-`in`-`if` avaldist ehk filtreeri etteantud järjend. Etteantud järjendi kuju:\n", "```python\n", "num = [1, 2, 3, 4.0, 5.123, 66/4, 77e-5]\n", "```\n", "Jäta järjendisse alles ainult murdarvud ehk eemalda järjendist kõik täisarvud.\n", "\n", "Oodatav tulemus: `[4.0, 5.123, 16.5, 0.00077]`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 2:**\n", "\n", "Kasuta `for`-`in` avaldist ehk filtreeri etteantud järjend. Kasuta võimalikult vähe koodiridu. Etteantud järjendi kuju:\n", "```python\n", "nimed = ['Juulius Tipikas', 'Juulia Tipikas', 'Adolf Hitler']\n", "```\n", "Loo uus järjend, milles on perekonnanimed Tipikas asendatud nimega Hitler.\n", "\n", "Oodatav tulemus: `['Juulius Hitler', 'Juulia Hitler', 'Adolf Hitler']`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 3:**\n", "\n", "Kasuta `for`-`in` avaldist ehk filtreeri etteantud ennik. Ringjoone ümbermõõdu $c$ arvutamise valem on kujul:\n", "$$ c = 2 \\pi r, $$\n", "kus $r$ on ringi raadius ja $\\pi = 3.142$. Leia ennikus, kujul:\n", "```python\n", "raadiused = (0.5, 1.0, 1.5, 2.0, 3.0)\n", "```\n", "esitatud raadiustele vastavad ringjoone pikkused. Salvesta ühele raadiusele vastavad tulemused ennikusse kujul `(, <ümbermõõt>)` ja kõigile raadiustele vastavad tulemused Pythoni hulka.\n", "\n", "Võimalik vastus: `{(2.0, 12.568), (0.5, 3.142), (1.0, 6.284), (3.0, 18.852), (1.5, 9.426)}`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 4:**\n", "\n", "Kasuta `for`-`in` avaldist ehk filtreeri etteantud list. Ringjoone ümbermõõdu $c$ arvutamise valem on kujul:\n", "$$ c = 2 \\pi r, $$\n", "kus $r$ on ringi raadius ja $\\pi = 3.142$. Ringjoonega määratud pinna pindala $A$ leidmise valem on kujul:\n", "$$A = \\pi r^2.$$\n", "Leia listist, kujul:\n", "```python\n", "raadiused = [1, 2, 3, 4, 44, 6]\n", "```\n", "esitatud raadiustele vastavad ringjoone pikkused juhul kui raadiuse väärtus on paaris arv ja pindalad juhul kui raadius on paaritu arv. Salvesta tulemused Pythoni loendisse.\n", "\n", "Vastus: `[3.142, 12.568, 28.278, 25.136, 276.496, 37.704]`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 5:**\n", "\n", "Kasuta `for`-`in` avaldist ehk filtreeri etteantud ennik. Ringjoone ümbermõõdu $c$ arvutamise valem on kujul:\n", "$$ c = 2 \\pi r, $$\n", "kus $r$ on ringi raadius ja $\\pi = 3.142$. Ringjoonega määratud pinna pindala $A$ leidmise valem on kujul:\n", "$$A = \\pi r^2.$$\n", "Leia ennikus, kujul:\n", "```python\n", "raadiused = (0.5, 1.0, 1.5, 2.0, 3.0)\n", "```\n", "esitatud raadiustele vastavad ringjoone pikkused ja pindalad. Salvesta ühele raadiusele vastavad tulemused paarikaupa ennikusse ja kõigile raadiustele vastavad tulemused Pythoni loendisse.\n", "\n", "Vastus: `[(3.142, 0.7855), (6.284, 3.142), (9.426, 7.0695), (12.568, 12.568), (18.852, 28.278)]`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 6:**\n", "\n", "Ilma lähtekoodi interpreteerimiseta ennusta programmi tulem.\n", "```python\n", "x = 'globaalne x'\n", "\n", "def valine():\n", " x = 'väline x'\n", " def sise():\n", " x = 'sise x'\n", " print(x)\n", " sise()\n", " print(x)\n", "\n", "valine()\n", "print(x)\n", "```\n", "Vihje: LEGB reegel." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 7:**\n", "\n", "Ilma lähtekoodi interpreteerimiseta ennusta programmi tulem.\n", "```python\n", "x = 'globaalne x'\n", "\n", "def valine():\n", " x = 'väline x'\n", " def sise():\n", " print(x)\n", " sise()\n", " print(x)\n", "\n", "valine()\n", "print(x)\n", "```\n", "Vihje: LEGB reegel." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 8:**\n", "\n", "Ilma lähtekoodi interpreteerimiseta ennusta programmi tulem.\n", "```python\n", "x = 'globaalne x'\n", "\n", "def valine():\n", " def sise():\n", " print(x)\n", " sise()\n", " print(x)\n", "\n", "valine()\n", "print(x)\n", "```\n", "Vihje: LEGB reegel." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 9:**\n", "\n", "Ilma lähtekoodi interpreteerimiseta ennusta programmi tulem.\n", "```python\n", "x = 'globaalne x'\n", "\n", "def valine():\n", " x = 'väline x'\n", " def sise():\n", " nonlocal x\n", " x = 'sise x'\n", " print(x)\n", " sise()\n", " print(x)\n", "\n", "valine()\n", "print(x)\n", "```\n", "Vihje: LEGB reegel." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 10:**\n", "\n", "Juulius Tipikas kirjutas Pythoni programmi mis leiab mitu ringjoone diameerit mahub ringjoonele. Programmikood on järgmine:\n", "```python\n", "pi = 3.14\n", "tau = 7.12\n", "\n", "def ringi_umbermoot(r):\n", " c = 2 * pi * r\n", " return c\n", "\n", "# Kustutan mittevajaliku\n", "del pi, tau\n", "raadius = 1\n", "# Diameetri leidmine\n", "diameeter = 2 * raadius\n", "# Arvutus\n", "mitu_diameetrit_joonel = ringi_umbermoot(raadius) / diameeter\n", "\n", "print('Ringjoonele mahub', mitu_diameetrit_joonel, 'ringi diameetrit.')\n", "```\n", "Programm ei tööta. Millise lihtsa paranduse teeksid koodi parandamiseks? Olemasoleva koodi kustutamine pole.\n", "\n", "Vihje: Muutujate skoop.\n", "\n", "Oodatav tulemus: `Ringjoonele mahub 3.14 ringi diameetrit.`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 11:**\n", "\n", "Kas allolev kood töötab? Kui ei tööta siis paranda see. Lubatud on lisada ainult üks rida koodi funktsioonile `my_print`. Etteantud kood:\n", "```python\n", "def area(r, pi_par):\n", " A = pi_par * r ** 2\n", " return A\n", "\n", "def my_print(r):\n", " pi = 3.14\n", " if r % 2 == 0:\n", " print(f'Raadius on paaris, A = {area(r, pi)}')\n", " else:\n", " print(f'Raadius on paaritu, A = {area(r, pi)}')\n", "\n", "r = 3\n", "my_print(r)\n", "print(f'A = {area(r, pi)}')\n", "```\n", "\n", "Vihje: Muutujate skoop." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 12:**\n", "\n", "Kas allolev kood töötab? Kui ei tööta siis paranda see. Muutujaid on lubatud liigutada ainult selle praeguse skoobi ulatuses. Etteantud kood:\n", "```python\n", "def area(r, pi_par):\n", " A = pi_par * r ** 2\n", " return A\n", "\n", "r = 2\n", "\n", "if isinstance(r, int) and r % 2 == 0:\n", " pi = 3.14\n", " print(f'Raadius on paaris, A = {area(r, pi)}')\n", "elif isinstance(r, int) and r % 2 != 0:\n", " print(f'Raadius on paaritu, A = {area(r, pi)}')\n", "else:\n", " print(f'Paarsust ei saa määrata, A = {area(r, pi)}')\n", "```\n", "\n", "Vihje: Muutujate skoop." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 13:**\n", "\n", "Interpreteeri lähtekood:\n", "\n", "```python\n", "lst = [1, 2, 3, 4, 5, 6]\n", "\n", "a, *b, c, d = lst\n", "\n", "print(a)\n", "print(b)\n", "print(c)\n", "print(d)\n", "\n", "```\n", "\n", "Seleta saadud tulemus." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 14:**\n", "\n", "Paki lahti järgmine list ning prindi tulemus konsooli.\n", "```python\n", "lst = [1, 2, 3, 'a']\n", "```\n", "Oodatav tulemus: `1 2 3 a` või `(1, 2, 3, 'a')`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 15:**\n", "\n", "Eemalda alltoodud listi esimene ja viimane element. Kasuta kokkupakkimise operaatorit `*`. Uue listi loomine on lubatud.\n", "```python\n", "lst = ['Pthirus pubis', 6, 66, 666, 6666, 66666, 666666, 'on kubemetäi.']\n", "```" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 16:**\n", "\n", "Ühenda antud sõnaraamatud üheks sõnaraamatuks.\n", "```python\n", "dict1 = {'a': 4, 'b': 5, 'c': 6}\n", "dict2 = {'d': 4, 'e': 5, 'a': 6}\n", "```\n", "Veendu, et võtmesõnale `'a'` vastab väärtus 4. Vajadusel paranda loodud sõnaraamatut.\n", "\n", "Oodatav tulemus: `{'a': 4, 'b': 5, 'c': 6, 'd': 4, 'e': 5}` või `{'d': 4, 'e': 5, 'a': 4, 'b': 5, 'c': 6}`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 17:**\n", "\n", "Kasuta lahtipakkimise operaatorit `*` ning eemalda listis `a` esinevad pesastatud listi sulud ja korteeži sulud. Uue listi loomine on lubatud.\n", "```python\n", "a = [1, [2, 3, 4], 5, (6, 7), 8, 9, 10, 11, 12]\n", "```\n", "Oodatav tulemus: `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 18:**\n", "\n", "Kasuta lahtipakkimise operaatorit `*` ning eemalda listis `a` esinevad pesastatud listid ja korteežid. Uue listi loomine on lubatud.\n", "```python\n", "a = [1, [2, 3, 4], 5, (6, 7), 8, 9, 10, 11, 12]\n", "```\n", "Oodatav tulemus: `[1, 5, 8, 9, 10, 11, 12]`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 19:**\n", "\n", "Eemalda listis `a` esinevad pesastatud listid ja korteežid. Uue listi loomine on lubatud.\n", "```python\n", "a = [1, [2, 3, 4], 5, (6, 7), 8, 9, 10, 11, 12]\n", "```\n", "Oodatav tulemus: `[1, 5, 8, 9, 10, 11, 12]`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 20:**\n", "\n", "Loo funktsioon mis korrutab talle edastatud meelevaldse arvu numbreid." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 21:**\n", "\n", "Loo funktsioon või protseduur mis võtab sisendina vastu õpilase nime ja perekonnanime ning omab vaikimisi väärtusega argumenti\n", "```python\n", "kool = 'Tallinna Tehnikaülikool'\n", "```\n", "Loodud funktsioon peab väljastama konsooli lause: ` on Tallinna Tehnikaülikooli tudeng.`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 22:**\n", "\n", "Loo funktsioon mis leiab etteantud arvude seast vähima ja väljastab selle." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 23:**\n", "\n", "Loo funktsioon või protseduur mille sisendid on järgmised võtmesõnade ja väärtuste paarid (esitatud järjekorras). Kasuta Pythoni konkatenatsiooni operaatsiooni ning liida alltoodud väärtused üheks sõneks.\n", "```python\n", "a = \"Python \"\n", "b = \"on \"\n", "c = \"lahe \"\n", "d = \"madu\"\n", "e = \"!\"\n", "```\n", "Oodatav tulemus: `Python on lahe madu!`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 24:**\n", "\n", "Kasuta `for`-`in` avaldist ehk filtreeri etteantud vahemik. Leia arvude vahemikust $[1, 30]$ (algus ja lõpp kaasaarvatud) arvud mis jaguvad kolmega, viiega ja kolmega ning viiega samaaegselt. Väljasta tulemus selliselt, et asendad kolmega jaguvad arvud sõnega `Piiks`, viiega jagvad arvud sõnega `Puuks` ja kolmega ning viiega jaguvad arvud sõnega `PiiksPuuks`. Ülevaate huvides prindi leitud tulemused ühte tulpa.\n", "\n", "Vastus:\n", "```\n", "1\n", "2\n", "Piiks\n", "4\n", "Puuks\n", "Piiks\n", "7\n", "8\n", "Piiks\n", "Puuks\n", "11\n", "Piiks\n", "13\n", "14\n", "PiiksPuuks\n", "16\n", "17\n", "Piiks\n", "19\n", "Puuks\n", "Piiks\n", "22\n", "23\n", "Piiks\n", "Puuks\n", "26\n", "Piiks\n", "28\n", "29\n", "PiiksPuuks\n", "```" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 25:**\n", "\n", "Kasuta `for`-`in` avaldist ehk filtreeri etteantud sõne. Leia sõnest kõik täishäälikud ja asenda need tähega `p`. Etteantud sõne on kujul: `'Juulius Tipikas on maskott.'`. Täishäälikuteks loeme järgmisi tähti: a, e, i, o, u, õ, ä, ö, ü.\n", "\n", "Vastus: `Jpplpps Tpppkps pn mpskptt.`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 26:**\n", "\n", "Kasuta `for`-`in`-`if` avaldist ehk filtreeri etteantud sõne. Leia tekstist:\n", "```python\n", "txt = 'Juulius Tipikas on maskott. Juulia Tipikas on tudeng. Juhan Liive lagi on must.'\n", "```\n", "tähega `J` algavad sõned." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 27:**\n", "\n", "Leia mitu kolmega jaguva mittenegatiivse arvu kuupi, mis on miljonist väiksemad, eksisteerib. Lahenda ühes reas.\n", "\n", "Vastus: `34`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 28:**\n", "\n", "Kasutades `for`-`in`-`if` avaldist teisenda loendis `numbrid` olevad arvud täisarvudeks (kasuta sisseehitatud funktsiooni `int`) ning elimineeri negatiivsed loendi elemendid.\n", "```python\n", "numbrid = [34.6, -203.4, 68.3, -12.2, 44.6, 12.7]\n", "```\n", "Oodatav tulemus: `[34, 68, 44, 12]`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 29:**\n", "\n", "1) Kasutades `for`-`in`-`if` avaldist leia 50-ne esimese mitte-negatiivse täisarvu 16-dad astmed. Lisaks filtreeri välja paarisarvulised tulemused.\n", "2) Mitme erineva lahenduskäiguga leitud lahendite korral kontrolli leitud loendite võrtsust.\n", "\n", "Oodatav tulemus:\n", "```\n", "[1,\n", " 43046721,\n", " 152587890625,\n", " 33232930569601,\n", " 1853020188851841,\n", " 45949729863572161,\n", " 665416609183179841,\n", " 6568408355712890625,\n", " 48661191875666868481,\n", " 288441413567621167681,\n", " 1430568690241985328321,\n", " 6132610415680998648961,\n", " 23283064365386962890625,\n", " 79766443076872509863361,\n", " 250246473680347348787521,\n", " 727423121747185263828481,\n", " 1977985201462558877934081,\n", " 5070942774902496337890625,\n", " 12337511914217166362274241,\n", " 28644003124274380508351361,\n", " 63759030914653054346432641,\n", " 136614025729312093462315201,\n", " 282748441902441558837890625,\n", " 566977372488557307219621121,\n", " 1104427674243920646305299201]\n", "```" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# 1)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# 2)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 30:**\n", "\n", "Kasutades `for`-`in`-`if` avaldist leia sõnes `lause` olevate sõnade pikkused (tähtede arv, kasuta funktsiooni `len`). Sõnade leidmiseks kasuta sõne meetodit `split`.\n", "```python\n", "lause = 'Juulius elab kuuse all ja unistab kodust'\n", "```\n", "Oodatav tulemus: `[7, 4, 5, 3, 2, 7, 6]`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.0" } }, "nbformat": 4, "nbformat_minor": 4 }