{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Praktikum 5\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 30.09.2024.
\n", "\n", "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 1:**\n", "\n", "Trüki konsooli allolevas listis loetletud riigid, kasuta nii `while`-tsüklit kui ka `for`-tsüklit. Seega paku välja vähemalt kaks lahendust.\n", "```\n", "riigid = ['Eesti', 'Kanada', 'USA', 'Bhutan']\n", "```" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 2:**\n", "\n", "Kasutades nii `while`-tsüklit kui ka `for`-tsüklit trüki konsooli sõne `'Python'` sümbolid." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 3:**\n", "\n", "Itereeri üle sõne `\"123456789\"` sümbolite. Väljasta tulemus konsooli. Enne väljastamist teisenda leitud sümbolid kümnendmurdarvuks." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 4:**\n", "\n", "Ühenda listis `['Juulius', 'on', 'maskott.']` olevad sõned üheks lauseks." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 5:**\n", "\n", "Jättes vahele sõne `'on'`, ühenda iteratiivselt listis `['Juulius', 'on', 'maskott.']` olevad sõned üheks lauseks." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 6:**\n", "\n", "Leia loendis `[1, 5, 7, 3, 7, 9, 2]` olevate numberite summa iteratiivselt.\n", "\n", "Vastus: `34`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 7:**\n", "\n", "Write a program that asks the user for a whole number $n$ and prints the sum of the numbers $1$ to $n$.\n", "\n", "Give two solutions:\n", "1) Iterative solution.\n", "2) Solution based on the mathematical formula in the following form:\n", "$$1 + 2 + 3 + \\ldots + (n-2) + (n-1) + n \\equiv \\sum_{i = 1}^n i = \\frac{n (n + 1)}{2}.$$\n", "This formula is more suited for large $n$ values." ] }, { "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 8:**\n", "\n", "Kasuta nii `while`-tsüklit kui ka `for`-tsüklit, koos lausendiga `break`. Leia positiivsete täisarvude summad \n", "$$s(n) = \\sum_{i=1}^n i = 1+2+3+ \\ldots +(n-2)+(n-1)+n,$$\n", "kus $n$ on täisarv. Prindi leitud summad $s(n)$ konsooli. Suurim leitud summa ei tohi ületada $200$. Vajadusel peata itereerimine.\n", "\n", "Oodatav tulemus:\n", "\n", "```\n", "1\n", "3\n", "6\n", "10\n", "15\n", "21\n", "28\n", "36\n", "45\n", "55\n", "66\n", "78\n", "91\n", "105\n", "120\n", "136\n", "153\n", "171\n", "190\n", "```" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 9:**\n", "\n", "Leia loendist `[1, 1, 2, 3, 5, 8, 13, 21, 34]` paarisarvud iteratiivselt.\n", "\n", "Vastus: `2`, `8` ja `34`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 10:**\n", "\n", "1) Leia iteratiivselt loendi `[4, 8, 4, 8, 7]` suurima elemendi väärtus.\n", "2) Kui suurimaid väärtused korduvad (neid on rohkem kui üks) tagasta ka nende indeksid\n", "\n", "Vastus: 1) `8`; 2) `8` ja `1` ning `3`." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# 1) Eeldame, et kordusi pole.\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# 2) Kordused esinevad.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 11:**\n", "\n", "Kasuta nii `while`-tsüklit kui ka `for`-tsüklit, leia paaritud ja positiivsed täisarvud mis ei ole suuremad kui `13`.\n", "\n", "Oodatav tulemus:\n", "\n", "```\n", "1\n", "3\n", "5\n", "7\n", "9\n", "11\n", "13\n", "```" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 12:**\n", "\n", "Leia loendist `nimed = ['Sam', 'Marry', 'Juulia', 'Juulius', 'Kaja']` kõik `J` tähega algav nimed.\n", "\n", "Vastus: `Juulia` ja `Juulius`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 13:**\n", "\n", "Leia loendist `nimed = ['Sam', 'Marry', 'Juulia', 'Juulius', 'Kaja']` kõik `X` tähega algavd nimed. Teata kasutajat kui ühtegi nime ei leitud (ainult üks kord)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 14:**\n", "\n", "Leia loendist `nimed = ['Sam', 'Marry', 'Juulia', 'Juulius', 'Kaja']` esimene `J` tähega algav nimi.\n", "\n", "Vastus: `Juulia`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 15:**\n", "\n", "Leia loendist `nimed = ['Sam', 'Marry', 'Juulia', 'Juulius', 'Kaja']` esimene `Z` tähega algav nimi. Teata kasutajat kui ühtegi nime ei leitud (ainult üks kord)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 16:**\n", "\n", "Leia loendist `nimed = ['Sam', 'Marry', 'Juulia', 'Juulius', 'Kaja']` viimane `J` tähega algav nimi. Teata kasutajat kui ühtegi nime ei leitud (ainult üks kord).\n", "\n", "Vastus: `Juulius`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 17:**\n", "\n", "Leia loendist `nimed = ['Sam', 'Marry', 'Juulia', 'Juulius', 'Kaja']` kõik `J` tähega algav nimed. Salvesta leitud nimed listi." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 18:**\n", "\n", "Leia loendi `nimed = ['Sam', 'Marry', 'Juulia', 'Juulius', 'Kaja']` viimase `J` tähega algavs nime indeks iteratiivselt.\n", "\n", "Vastus: `3`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 19:**\n", "\n", "Leia loendi `['Kaunas', 'Vilnius', 'Tallsinki', 'Helsinki', 'Tallinn']` pikim sõne iteratiivselt.\n", "\n", "Vastus: `Tallsinki`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 20:**\n", "\n", "Loo sõne äraarvamise mäng. Kasuta funktsiooni `input` sõne küsimiseks.\n", "```\n", "arvamus = input('Sisesta sõna: ') \n", "```\n", "Kasuta `while`-tsüklit ja korda mängu kuni kasutaja on salasõna ära arvanud. Kui kasutaja arvab õigesti, teata teda võidust ja lõpeta tsükkel." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 21:**\n", "\n", "Kirjuta salasõna äraarvamise mäng. Lase kasutajal arvatas kolm korda ja kui tal ei õnnestu salasõna ära arvata lõpeta mäng ja teata teda sellest (ainult üks kord). Kusjuures:\n", "1) Kasuta lausendit `break`.\n", "2) Ära kasuta lausendit `break`." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# 1)\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# 2)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 22:**\n", "\n", "Kasuta nii pesastatud `while`-tsükleid kui ka pesastatud `for`-tsükleid, prindi konsooli järgmine väljund:\n", "\n", "```\n", "* * * * * \n", "* * * * \n", "* * * \n", "* * \n", "*\n", "```\n", "\n", "Vihje: Alusta lihtsamast probleemist mis on kujul:\n", "\n", "```\n", "* * * * * \n", "* * * * * \n", "* * * * * \n", "* * * * * \n", "* * * * *\n", "```" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 23:**\n", "\n", "Leia arvu faktoriaal iteratiivselt.\n", "\n", "Defineeri kaks funktsiooni mis kasutavad nii `while`-tsüklit kui ka `for`-tsüklit, ning arvutavad täisarvu faktoriaale. Täisarvu $n$ faktoriaal on antud kujul:\n", "$$n! =n \\cdot (n - 1) \\cdot (n - 2) \\cdot (n-3) \\cdot \\ldots \\cdot 3 \\cdot 2 \\cdot 1.$$\n", "\n", "Näide:\n", "$$5! = 5 \\cdot 4 \\cdot 3 \\cdot 2 \\cdot 1 = 1 \\cdot 2 \\cdot 3 \\cdot 4 \\cdot 5 = 120.$$" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 24:**\n", "\n", "Kasuta nii `while`-tsüklit kui ka `for`-tsüklit ja eelmises ülesandes loodud funktsiooni või funktsioone ning leia kõik täisarvude $1$, $2$, $3$, $\\ldots$ faktroaalid mis ei ole suuremad kui $40320$.\n", "\n", "Oodatav tulemus:\n", "\n", "```\n", "1\n", "2\n", "6\n", "24\n", "120\n", "720\n", "5040\n", "40320\n", "```" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 25:**\n", "\n", "Kasuta `for`-tsüklit ja üle-eelmises ülesandes loodud funktsiooni või funktsioone ning leia esimese $25$-e täisarvu faktroaalid, alusta ühest.\n", "\n", "Oodatav tulemus:\n", "\n", "```\n", "1\n", "2\n", "6\n", "24\n", "120\n", "720\n", "5040\n", "40320\n", "362880\n", "3628800\n", "39916800\n", "479001600\n", "6227020800\n", "87178291200\n", "1307674368000\n", "20922789888000\n", "355687428096000\n", "6402373705728000\n", "121645100408832000\n", "2432902008176640000\n", "51090942171709440000\n", "1124000727777607680000\n", "25852016738884976640000\n", "620448401733239439360000\n", "15511210043330985984000000\n", "```" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 26:**\n", "\n", "Kirjuta programm mis sarnaneb loengus näidatud pangaautomaadi programmidele. Kasuta nii `while` kui ka `for`-tsükleid. Seega paku välja vähemalt kaks lahendit.\n", "\n", "Programmis jagab Juulius Tipikas ilusale neiule lilleõisi eurode asemel. Juuliusel peab olema piiratud arv õisi. Juulius küsib mitu õit neiu soovib. Kui Juuliusel on küsitud arv õisi olemas, jagatakse need välja. Peale õite üleandmist (ja ainult siis) küsib Juulius kärsitult neiult ka musi. Kui aga Juuliusel pole piisav arv õisi siis teatab Juulius neiut selles, et ta on möku." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 27:**\n", "\n", "Iteratiivne Fibonacci jada liikme leidmine.\n", "\n", "Defineeri funktsioonid mis kasutavad nii `while`-tsüklit kui ka `for`-tsüklit, $n$-da Fibonacci jada liikme leidmiseks. Meeldetuletus: Fibonacci arvude jada on selline positiivsete täisarvude jada, mille iga liige on kahe eelmise liikme summa ning mis algab kahe number ühega:\n", "$$1,\\;1,\\;2,\\;3,\\;5,\\;8,\\;13,\\;21,\\;34,\\;55,\\;89,\\;144,\\;\\ldots$$" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 28:**\n", "\n", "Kirjuta programm mis itereerib ja väljastab konsooli täisarve vahemikus $1$-st $50$-ni. Kui arv on jaguv kolmega siis väljasta selle asemele sõne `\"Piiks\"`, kui arv on jaguv viiega siis asenda see sõnega `\"Puuks\"` ja kui number on jaguv mõlemaga siis asenda see sõnega `\"PiiksPuuks\"`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 29:***\n", "\n", "Algajatele programmeerijatele ei soovitata muuta loendeid üle nende itereerimise ajal. Proovime seda ja vaatame mis juhtub.\n", "\n", "Eemalda listist `[1, 6, 4, 2]` paarisarvud. Lahenda iteratiivselt ja kasuta listi meetodit `pop`.\n", "\n", "Vihje: Googelda probleemi." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ülesanne 30:***\n", "\n", "Loo programm mis küsib kasutajalt sõna või fraasi, asendab sisestadud sõne täishäälikud tähega `p` ning väljastab tulemuse. Kasuta funktsiooni `input` sisendi saamiseks:\n", "```\n", "fraas = input('Sisesta fraas:')\n", "```\n", "Lisaks kasuta `for`-tsüklit ning sõne konkatenatsiooni (operaator `+`).\n", "\n", "Täishäälikud:\n", "```\n", "a, e, i, o, u, õ, ä, ö, ü\n", "```\n", "\n", "Näide:\n", "```\n", "'python' --> 'pythpn'\n", "'arvuti' --> 'prvptp'\n", "```\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "\n", "## Kodus\n", "\n", "**Ülesanne 31:**\n", "\n", "Täiusta eelmises ülesandes loodud programmi. Muuda koodi nii, et programm suudaks eristada suuri ja väikeseid täishäälikuid (tõstutundlikus).\n", "\n", "Näide:\n", "```\n", "ä --> p\n", "Ä --> P\n", "```" ] }, { "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 }