Praktikum 11¶

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 10.11.2024.

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

Kirjuta programm mis kirjutab tekstifaili numbri $7$. Võid loodud failile nimeks panna 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:

  1. ritta (esimene fail) ja;
  2. veergu (teine fail).

Oodatav failisisu 1. fail:

77 77 77 77 77 77 77

Oodatav failisisu 2. fail:

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 fail sisu, tuvasta kirja saatja ja tema salastatud sõnum.

Vihje: Loe sisseehitatud funktsiooni open dokumentatsiooni.

Oodatav tulemus ja vastus esitatud küsimustele:

             ,
            /|      __
           / |   ,-~ /
          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
~~~~~~~~~~~~~~~~~~~~~~~~~

Ü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.

Ü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, 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 kuni 9, teises nende arvude ruudud ja kolmandas nende kuubid. Eralda veeru elemendid üksteisest kasutades ühte taanet. Ära kasuta siin äratoodu 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 siin äratoodu 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'. 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_copu.txt milles asendad kõik nullid tähega a. Asendus: $0 \to a$.

Oodatav tulemus:

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 või protseduur mis leiab tekstifaili test.txt ridade arvu.

Oodatav vastus: 11 rida.

Ülesanne 22:

Kirjuta protseduur või funktsioon mis võtab argumentidena vastu kahte tekstifaili: test.txt ja test_copy.txt. Programm peab konkatoneerima siseloetud failide vastavad read ja väljastama (printima) 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}
{kellele}
                  {kuupäev}


            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"

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

def main():
    print("Hello, World!")

if __name__ == "__main__":
    main()

Kirjutatud programm peaks trükkima konsooli:

Hello, World!

Ülesanne 26:

Kirjuta programm. Programm:

  1. 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)
  1. Loeb loodud faili sisse ja leiab failis olevate algebraliste avaldiste väärtused.
  2. 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.


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]

















☻   ☻   ☻