KMI/PHT Programování v jazyce Python: Seminář 01

Úvod do jazyka Python

Jaká verze jazyka (2.7 vs 3.X)

Většina existujících programů je v Python 2.7 a nižšší. Ostré nasazení verze 3.X komplikuje především nekompatibilita těchto verzí. V dnešní době jsou straší verze na ústupu. V roce 2020 končí podpora 2.7.

Instalace a volání programu.

Instalaci každý zvládne sám.

Implementace jazyka

CPython, Jython, IronPython, Stackless a PyPy

IDE

Emacs, Visual Studio Code, Spyder, Atom, SublimeText 3, Jupyter notebook, prakticky cokoliv

  1. úkol 0

    Vytvořte program v libovolném jazyce, který převede vstupní soubor ve formátu dat (formát používaný v data miningu pro uložení binárních tabulkových dat) do formátu csv. Výstup programu je uložen do souboru. Například:

    # soubor in.dat obsahuje:
    5 2 1
    3 4
    2 3
    5
    3 4
    
    # po ukonceni programu soubor out.csv obsahuje:
    1, 2, 0, 0, 5
    0, 0, 3, 4, 0
    0, 2, 3, 0, 0
    0, 0, 0, 0, 5
    0, 0, 3, 4, 0
# reseni v jazyce Python
file_in = open('in.dat', 'r')

M = []
# sila jazyka
for line in file_in:
  M.append([int(i) for i in line.strip().split(' ')])

# sila mysleni
m = max(map(max, M))

file_in.close()
file_out = open('out.csv', 'w')

# opet sila jazyka
for i in M:
  X = [0]*m
  for j in i:
    X[j-1] = j

  # no fuj, ale funguje :-)
  file_out.write(str(X)[1:-1]+'\n')

file_out.close()

Užitečné odkazy

Jupyter notebook

Jupyter notebook umožňuje psát a vyhodnocovat kód ve webovém prohlížeči. Na seminářích jej budeme používát pro demonstraci. Pro samotné programování je ale lepší zvolit plnohodnotné IDE.

Jupyter notebook z dnešního semináře.

Zadání

  1. úkol 1

    Zprovozněte jazyk Python a libovolné IDE. Vyzkoušejte hello world program.

    print("Hello world!")
  2. úkol 2

    Implementujte jednoduchou sparse data structure (Úmění programování, D. E. Knuth, strana 302).

    # reseni
    Matrix = {} # pouzijeme slovnik
    
    # tuples jako index ve strukture
    # na tomto prikladu je krasne videt uzitecnost n-tic, seznam v teto situaci pouzit nelze
    Matrix[(1, 2)] = 11
    Matrix[(5, 8)] = 22
    
    print(Matrix)
    
    # get metoda
    print(Matrix.get((1, 2), 0))
    print(Matrix.get((3, 3), 0))
  3. úkol 3

    # zjistete prunik seznamu L1 a L2
    L1 = [1, 2, 3, 4, 5]
    L2 = [4, 5, 6, 7, 8]