Praktikum 11¶
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¶
Soovitus: Ülesandeid lahendades kasuta kontekstihaldurit ehk konstruktsiooni with/open/as.
NB! Allolevad ülesanded tuleb lahendada etteantud järjekorras. Mõned ülesanded kasutavad eelmistes ülesannetes loodud faile.
Ülesanne 0:
- Salvesta luuletuse "Tudengi palve" tekst tekstifaili
test.txt. Luuletus on järgmine:
Tudengi palve
Kohv, anna mulle jõudu,
nuudel, anna mõtet.
Õpik, ära vaata mind nii karmilt –
ma teen homme!
Või ülehomme.
Või...
mis päev täna oligi?
Kontrolli kas fail loodi sinu töökausta. Uuri selle sisu.
- Loe loodud faili sisu sisse ja prindi luuletuse tekst konsooli.
Ülesanne 1:
Kirjuta programm mis kirjutab tekstifaili numbri $7$. Võid loodud failile nimeks valida test.txt. Veendu, et programm töötab.
Ülesanne 2:
Kirjuta programm mis loob kaks tekstifaili. Failid peavad sisaldama numbrit $77$ seitse korda.
Paiguta faili kirjutatud numbrid:
- ritta (esimene fail) ja;
- veergu (teine fail).
Oodatav failisisu:
- Fail mille sisu on rida.
77 77 77 77 77 77 77
- Fail mille sisu on veerg.
77
77
77
77
77
77
77
Ülesanne 3:
Kasuta eelmises ülesandes loodud faili millesse on salvestatud üks tulp arve kujul:
77
77
77
77
77
77
77
Loe sisse faili esimene rida ja prindi see konsooli, st. kasuta failiobjekti meetodit readline ja/või readlines. Kui soovid võid kasuta ka meetodit read.
Ülesanne 4:
Kasuta eelmises ülesandes kasutatud faili. Loe sisse failis olev kolmas arv ja liida see arvule $23$.
Vastus: 100.
Ülesanne 5:
Kasuta eelmises ülesandes kasutatud tekstifaili. Loe sisse failis olevad read ühekaupa, st. kasuta failiobjekti meetodit readline või itereeri üle fail enda. Salvesta sisseloetud arvud kahte listi. Esimesse salvesta numbrid sõne andmetüübina ja teise täisarvu andmetüübina.
Abiks: Sõne meetod strip.
Ülesanne 6:
Korda eelmist ülesannet. Kasutada on lubatud failiobjekti meetodeid read ja readlines.
Proovi: Kasuta sõne meetodit split või splitlines ja vastavaid konstruktsioone <faili nimi>.read().split() või <faili nimi>.read().splitlines().
Ülesanne 7:
Kasuta eelmises ülesandes kasutatud faili. Leia failis olevate numbrite summa.
Vastus: $7 \cdot 77 =$ 539.
Ülesanne 8:
TalTech'i Rektor on saanud ananüümse kodeeritud e-kirja. TalTech'i parimad IT teadlased on tuvastanud, et tegu on tekstifailiga mis on kodeeritud kasutades UTF-32BE (Unicode Transformation Format 32-bit Big Endian) kodeeringut. Pythonis on selle kodeeringu nimeks utf-32-be või utf_32_be. E-kirja sisu on kopeeritud data_L11.dat faili. Loe faili sisu, tuvasta kirja saatja ja tema salastatud sõnum.
Vihje: Loe sisseehitatud funktsiooni open dokumentatsiooni.
Oodatav tulemus ja vastus esitatud küsimustele:
- Kirja sisu:
,
/| __
/ | ,-~ /
Y :| // /
| jj /( .^
>-"~"-v"
/ Y
jo o |
( ~T~ j
>._-' _./
/ "~" |
Y _, |
/| ;-"~ _ l
~~~~~~~~~~~~~~~~~~~~~~~~~
KALLIS REKTOR!
MINU SüMPAATIA TEIE VASTU
ON SUUR. MINU AUSTUS TEIE
AKADEEMILISTE SAAVUTUSTE
VASTU ON KA SUUR.
Teie JUULIUS TIPIKAS
~~~~~~~~~~~~~~~~~~~~~~~~~
- Kirja saatja: Juulius Tipikas
- Sõnum: KALLIS REKTOR! MINU SüMPAATIA TEIE VASTU ON SUUR. MINU AUSTUS TEIE AKADEEMILISTE SAAVUTUSTE VASTU ON KA SUUR.
Ülesanne 9:
Kirjuta programm mis loob eelmises ülesandes kasutatud faili data_L11.dat. Võid loodava faili eristamiseks selle ümber nimetada, nt. my_data_L11.dat.
Vihje: Loe sisseehitatud andmetüübi string (sõne) ja/või funktsiooni open dokumentatsiooni.
Soovitus: Kui defineerid enda moodulis kirja sisu sisaldava sõne siis kasuta kodulehte ehk eelmist ülesannet. Kopeeri sõnum veebilehelt see tagab, et tekst on kodeeritud kasutades kodeeringut UTF-8.
Ülesanne 10:
Loo fail test.txt ning kirjuta sellesse sõne 'Juulius Tipikas on tipikas.' kümme korda.
Oodatav tekstifaili sisu:
Juulius Tipikas on tipikas. Juulius Tipikas on tipikas. Juulius Tipikas on tipikas. Juulius Tipikas on tipikas. Juulius Tipikas on tipikas. Juulius Tipikas on tipikas. Juulius Tipikas on tipikas. Juulius Tipikas on tipikas. Juulius Tipikas on tipikas. Juulius Tipikas on tipikas.
Ülesanne 11:
Loe sisse eelminses ülessandes loodud fail ja prindi selle sisu konsooli.
Ülesanne 12:
Loo eelnevalt loodud faili koopia ja anna kopeeritud failile nimeks ja faililaiendiks: test_copy.txt.
Ülesanne 13:
Kopeeri fail test.txt lisa faili asukohale (baidivoo baidile) 27 sõne: ' Ei TalTechikas!'. Ära kirjuta olemasolevat teksti üle.
Oodatav tulemus ehk tekst failis:
Juulius Tipikas on tipikas. Ei TalTechikas! Juulius Tipikas on tipikas. Juulius Tipikas on tipikas. Juulius Tipikas on tipikas. Juulius Tipikas on tipikas. Juulius Tipikas on tipikas. Juulius Tipikas on tipikas. Juulius Tipikas on tipikas. Juulius Tipikas on tipikas. Juulius Tipikas on tipikas.
Ülesanne 14:
Kopeeri kursuse kodulehelt leitav pildifail Juulius.png.
Ülesanne 15:
Loo või kirjuta üle fail test.txt. Täida fail kolme veeruga (tulbaga). Esimeses veerus olgu täisarvud 0-st kuni 9-ni, teises nende arvude ruudud ja kolmandas nende kuubid. Eralda veeru elemendid üksteisest kasutades ühte taanet.
Ära kasuta allpool trükitud teksti sisendina.
Oodatav faili sisu:
0 0 0
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
Ülesanne 16:
Loe sisse fail test.txt, salvesta selle kolmandas veerus olevad objektid listi nimega x ja prindi tulemus konsooli.
Oodatav tulemus:
['0', '1', '8', '27', '64', '125', '216', '343', '512', '729']
Ülesanne 17:
Loo (või kiruta üle) fail test.txt vastavalt allpool näidatud oodatavale faili sisule.
Ära kasuta allpool trükitud teksti sisendina.
Oodatav failisisu:
no. kg kN
0 0 0
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
Kui soovid säilitada vanad andmed ja failile lisada uue rea siis saad seda teha režiimis r+.
Ülesanne 18:
Ava fail test.txt. Loe sisse teise veeru numbrid ilma veergu kirjeldava sõneta 'kg' (päis). Prindi tulemus konsooli.
Oodatav tulemus:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
või
[0.0, 1.0, 4.0, 9.0, 16.0, 25.0, 36.0, 49.0, 64.0, 81.0]
Ülesanne 19:
Loo funktsioon mis võtab argumendina vastu faili nime ja täisarvu n. Funktsioon peab tagastama n esimest failis leiduvat rida. Katseta enda funktsiooni faili test.txt peal.
Oodatav tulemus juhul n = 5:
no. kg kN
0 0 0
1 1 1
2 4 8
3 9 27
Ülesanne 20:
Loe sisse fail test.txt ning loo uus fail test_copy.txt milles asendad kõik nullid tähega a.
Oodatav tulemus: Asendus: $0 \to a$.
no. kg kN
a a a
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
Vihje: Sõne meetodid.
Ülesanne 21:
Kirjuta funktsioon mis leiab tekstifaili test.txt ridade arvu.
Oodatav vastus: 11 rida.
Ülesanne 22:
Kirjuta funktsioon mis võtab argumentidena vastu kahte tekstifaili: test.txt ja test_copy.txt. Programm peab konkatoneerima siseloetud failide vastavad read ja väljastama (trükkima) tulemuse konsooli.
Oodatav tulemus:
no. kg kN no. kg kN
0 0 0 a a a
1 1 1 1 1 1
2 4 8 2 4 8
3 9 27 3 9 27
4 16 64 4 16 64
5 25 125 5 25 125
6 36 216 6 36 216
7 49 343 7 49 343
8 64 512 8 64 512
9 81 729 9 81 729
Vihje: Sisseehitatud funktsioon zip suudab itereerida üle iteraatorite ehk võtab vastu iteraatoreid enda argumentidena.
Ülesanne 23:
Loo dokumendivormi genereeriv programm. Programm peab looma tekstifaili mis sisalda vormi kujul:
{nimi}
{amet}
{kuupaev}
{kellele}
AVALDUS
Palun mind {tegevus}.
Lugupidamisega,
{nimi}
Kasuta järgmiseid muutujate väärtusi:
nimi = "Juulius Tipikas"
amet = "tudeng"
kellele = "Direktorile"
tegevus = "eksmatrikuleerida ja puhkusele saata"
kuupäev = "31. oktoober 2042"
Oodatav faili sisu:
Juulius Tipikas
tudeng
31. oktoober. 2042
Direktorile
AVALDUS
Palun mind eksmatrikuleerida ja puhkusele saata.
Lugupidamisega,
Juulius Tipikas
Ülesanne 24:
Kasuta moodulit csv. Ava fail test.txt loe sisse selle read. Väljasta sisseloetud read konsooli.
Oodatav tulemus:
['no.', 'kg', 'kN']
['0', '0', '0']
['1', '1', '1']
['2', '4', '8']
['3', '9', '27']
['4', '16', '64']
['5', '25', '125']
['6', '36', '216']
['7', '49', '343']
['8', '64', '512']
['9', '81', '729']
Ülesanne 25:
Kirjuta programm mis loob Pythoni mooduli L11_Ul25_code. Siis loeb selle sisse ja interpreteerib koodi kasutades funktsiooni exec. Mooduli L11_Ul25_code sisu peab olema järgmine:
def main():
print("Hello, World!")
if __name__ == "__main__":
main()
Kirjutatud programm peaks trükkima konsooli teate kujul:
Hello, World!
Ülesanne 26:
Kirjuta programm. Programm:
- Loob tekstifaili
L11_Ul26.txt. Faili sisu peab olema järgmine:
3 + 4 * 2
6 - 5 + 3
8 * 3 - 7
15 / 3 + 2
4 * (6 + 2)
(5 + 3) * 2 - 4
12 / (3 + 1) + 5
9 * 2 - 3 * 4
(7 + 5) / 2 + 6
10 - 3 * (2 + 4)
- Loeb loodud faili sisse ja leiab failis olevate algebraliste avaldiste väärtused.
- Väljastab leitud väärtused konsooli. Esitades tulemused kujul:
3 + 4 * 2 = <vastus>.
Oodatav tulemus:
3 + 4 * 2 = 11
6 - 5 + 3 = 4
8 * 3 - 7 = 17
15 / 3 + 2 = 7.0
4 * (6 + 2) = 32
(5 + 3) * 2 - 4 = 12
12 / (3 + 1) + 5 = 8.0
9 * 2 - 3 * 4 = 6
(7 + 5) / 2 + 6 = 12.0
10 - 3 * (2 + 4) = -8
Vihje: Kasuta funktsiooni eval.
Tehisintellekti loodud ülesanded¶
Järgnevad ülesanded on loodud 9.11.2025 juturoboti OpenAI ChatGPT (GPT-5) poolt.
Ülesannete jaoks vajaminevad tekstifailid on salvestatud faili P11_TI_files.zip.
Ülesanne TI-1:
Cat Translator
You have a file called words.txt that contains normal words (one per line). Write a program that reads the file and creates a new file called meows.txt where every word is replaced with string "meow".
Hint: Use with/open/as twice - once to read, once to write.
File words.txt contents must be the following:
car
beer
school
door
bell
pig
File meows.txt contents must be the following:
meow
meow
meow
meow
meow
meow
Ülesanne TI-2:
Cookie Counter
Create a program that reads a file called cookie_log.txt, where each line says either ate_cookie or did_not_eat_cookie. Count how many cookies were eaten, and write the result to cookie_summary.txt as:
Cookies eaten: X
Cookies resisted: Y
Hint: You can loop through each line and count words.
File cookie_log.txt contents must be the following:
ate_cookie
did_not_eat_cookie
did_not_eat_cookie
ate_cookie
ate_cookie
ate_cookie
did_not_eat_cookie
File cookie_summary.txt contents must be the following:
Cookies eaten: 4
Cookies resisted: 3
Ülesanne TI-3:
Alien Diary
Aliens left notes in alien_diary.txt, but every sentence ends with "blorp". Write a program that reads their diary, replaces "blorp" with ".", and saves the fixed version as translated_diary.txt.
Hint: Use .replace() before writing.
File alien_diary.txt contents must be the following:
Today we landed on the small blue planet blorp
The locals have strange head coverings called hats blorp
They communicate by shouting at small rectangles blorp
We tried to blend in by wearing socks on our antennae blorp
One human offered us something called pizza blorp
It was both terrifying and delicious blorp
Tomorrow we will attempt to understand the concept of taxes blorp
Wish us luck blorp
File translated_diary.txt contents must be the following:
Today we landed on the small blue planet.
The locals have strange head coverings called hats.
They communicate by shouting at small rectangles.
We tried to blend in by wearing socks on our antennae.
One human offered us something called pizza.
It was both terrifying and delicious.
Tomorrow we will attempt to understand the concept of taxes.
Wish us luck.
Ülesanne TI-4:
The Great File Merger
You’re a File Wizard who needs to merge the contents of three scrolls — scroll1.txt, scroll2.txt, and scroll3.txt — into one legendary tome called mega_scroll.txt. Each scroll might contain text, spells, or the occasional cat meme. Your job is to merge them in order, add a separator line like:
--- End of scroll X ---
after each file, and then print "The Mega Scroll has been created!" Above, X stands for scroll number. Also, replace all occurrences of " blorp" with "."
Hint: Use with/open/as to read all three, then one more with/open/as to write the merged result.
File scroll1.txt contents must be the following:
Scroll One: The Beginning of Wisdom
Here begins the tale of the File Wizard blorp
He opened his first text file and saw that it was good blorp
Then he promptly forgot where he saved it blorp
File scroll2.txt contents must be the following:
Scroll Two: The Middle of Chaos
Lines tangled, commas fled, and syntax wept blorp
The Wizard battled the terrible beast named FileNotFoundError blorp
He cast the spell "with open" and order was restored blorp
File scroll3.txt contents must be the following:
Scroll Three: The End of Snacks
After many lines of code, the Wizard grew hungry blorp
He discovered a stale cookie from the debugging ages blorp
And thus, with crumbs on his keyboard, he achieved enlightenment blorp
File mega_scroll.txt contents must be the following or similar:
Scroll One: The Beginning of Wisdom
Here begins the tale of the File Wizard.
He opened his first text file and saw that it was good.
Then he promptly forgot where he saved it.
--- End of scroll 1 ---
Scroll Two: The Middle of Chaos
Lines tangled, commas fled, and syntax wept.
The Wizard battled the terrible beast named FileNotFoundError.
He cast the spell "with open" and order was restored.
--- End of scroll 2 ---
Scroll Three: The End of Snacks
After many lines of code, the Wizard grew hungry.
He discovered a stale cookie from the debugging ages.
And thus, with crumbs on his keyboard, he achieved enlightenment.
--- End of scroll 3 ---
Kodus¶
Ülesanne 27: *
Tutvu alloleva lähtekoodiga ja funktsiooniga numpy.loadtxt.
import numpy as np
x, y = np.loadtxt('test.txt', # Eespool loodud fail.
delimiter='\t',
skiprows=1,
usecols=(0, 1),
unpack=True)
print(x)
print(y)
Loo funktsioon minu_loadtxt mis käitub sarnaselt numpy.loadtxt funktsiooniga eespool näidatud mahus. Ignoreeri nimega argumenti unpack. Sinu loodud funktsioon peab töötama alloleva koodilõiguga ja eelnevates ülesannetes loodud failiga test.txt:
x, y, z = minu_loadtxt('test.txt', delimiter='\t', skiprows=1, usecols=(0, 1, 2))
print(x)
print(y)
print(z)
Oodatav konsooli väljatrükk on kujul:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 1, 8, 27, 64, 125, 216, 343, 512, 729]
või
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]
[0.0, 1.0, 4.0, 9.0, 16.0, 25.0, 36.0, 49.0, 64.0, 81.0]
[0.0, 1.0, 8.0, 27.0, 64.0, 125.0, 216.0, 343.0, 512.0, 729.0]