logo Workshop Python DATA

Řetězce

#Accessing string characters in Python
str = 'octopus'
print('str = ', str)             #-> str = octopus
print('str[0] = ', str[0])       #-> o (první znak - s indexem [0])
print('str[-1] = ', str[-1])     #-> s (poslední znak)
print('str[1:5] = ', str[1:5])   #-> ctop ("substring" od-do)
print('str[3:-2] = ', str[3:-2]) #-> op (od-do odzadu)
...

Vybrané metody:

>>> 'octopus'.upper() # převede na velká písmena
'OCTOPUS'

>>> 'hledej slovo jablko'.find("jablko") # pozice výskytu hledaného řetězce
13

>>> 'hledej slovo jablko'.find("meloun") # nenalezeno: -1
-1

>>> 'zamena slova jablko'.replace('jablko', 'meloun')
'zamena slova meloun'

>>> ...

Řetězcový tahák 🡒 /strings-cs.pdf


Pole / seznamy

# definice seznamu
>>> s = [3, 1, 2]
>>> list(s)

Seznamy podporují, podobně jako řetězce, mnoho operací. Namátkou jmenujme spojování, násobení celým číslem, indexování, operace s podsekvencemi (slice) a další. Zjednodušně tedy můžeme navázat na řetězec, který je vlastně seznamem znaků a proto některé operace budou obdobné. Například spojení +, opakování *, přístup k prvku [index]... a více dalších. Seznamy a řetězce mají své speciální příkazy split a join.

>>> slova = "první druhé třetí"
>>> slova.split()    #Rozdělí řetězec na slova

>>> data = "123,42,66"
>>> data.split(",")  #Rozdělí "vstup" daným oddělovačem (zde čárka)

>>> ''.join(['o', 'c', 't','o', 'p', 'u', 's'])  #Spojí s do jednoho řetězce
...

Rovnež lze přiřadit hodnotu urcité subsekvenci. Takto dokonce můžeme změnit i počet prvků seznamu:

>>>  a = ["x", "y", 123, 567]

>>> # Změna prvků:
... a[0:2] = [11, 22]
>>> a
[11, 22, 123, 567]
>>> # Jejich odstranění:
... a[0:2] = []
>>> a
[123, 567]
>>> # Vložení nových:
... a[1:1] = ["abc", "octopus"]
>>> a
[123, ’abc’, ’octopus’, 567]
>>> a[:0] = a # Vložení kopie seznamu do sebe sama (stejně tak: a * 2)
>>> a
[123, ’abc’, ’octopus’, 567, 123, ’abc’, ’octopus’, 567]
...

Je-li třeba iterovat přes prvky aritmetické posloupnosti, využijeme interní funkci range(), která vrací tuto posloupnost jako klasický seznam. Funkci range() předáme konečnou hodnotu posloupnosti. Pro všechny prvky pak bude platit, že jsou menší než tato hodnota:

>>> list(range(7)) # [0, 1, 2, 3, 4, 5, 6]
>>> list(range(5, 10)) # [5, 6, 7, 8, 9]
>>> list(range(0, 15, 3)) # [0, 3, 6, 9, 12]
>>> list(range(-10, -100, -30)) # [-10, -40, -70]

for i in range(7):
     print(1,end="")

123456

Tahák na seznamy 🡒 /lists-cs.pdf


Slovníky

Uspořádané dvojice klíč key a hodnota value mají skvělé využití v mnoha algoritmizačních "problémech" a často slouží jako základ jednoduchých databázových struktur.

dict = {"key","value"}
# vytvoření slovníku
>>> barvy = {'jablko': 'cervena', 'hruska': 'zelena'} # Micropython bez diakritiky
>>> barvy['boruvka'] = 'modra'                        # nový záznam
>>> barva = barvy['jablko']

>>> hodnoty = dict(a=1, b=2) # z pojmenovaných argumentů
>>> hodnota = hodnoty['b']

# d.get(k)
# d.pop(k)
...

# iterace: d.keys() d.values() d.items()
for ovoce, barva in barvy.items():
    print('{}: {}'.format(
    ovoce, barva))
# json
import json
json.loads(s)
json.dumps(d)
json.dumps(d, indent=2, ensure_ascii=False) # : odsazení o 2 mezery, nekódovat diakritiku

Slovníkový tahák 🡒 /dicts-cs.pdf


Rozšíření

Micropython neobsahuje vše, co plnohodnotný Python, ale praktické věci můžeme řešit dodatečnou instalací rozšířujícího modulu. Například pro práci s iterátory itertools.


Struktury

Pro složitější struktury využíváme objektové vlastnosti při definici tříd. Můžeme vytvářet libovolnou složitost, propojování a vnořování. Klidně se může jednat i o "pole objektů tvořených slovníky a dalšími objekty".


Databáze

Micropython má implementovánu jednoduchou "databázi" btree. Tuto jsme trochu rozšířili a zpřístupnili pro práci s našimi projekty. Stručně v Octopus FrameWork 🡒 /docs/database


Config

Framework Octopus má třídu Config, která usnadní práci s externím nastavováním. V adresáři config je uložen json soubor, do (ze) kterého se ukládají (načítají) data (hodnoty nastavení).

Podrobněji na 🡒 /basicdoc/config.

Modifikovaná ukázka práce s Configem s využitím práce se seznamy a slovníky:

>>> from config import Config
>>> promenne = "tempMax tempMin" # slova oddělená mezerami
>>> keys = promenne.split()      # keys = ["tempMax","tempMin"]
>>> conf = Config("termostat", keys) # > config/termostat.json
>>> conf.setup()

==================================================
        S E T U P - config/termostat.json
==================================================
[ 1] -          tempMax - 23
[ 2] -          tempMin - 18
[q] - Quit from json setup
==================================================
...