comment up next how to end end

2. Proměnné, výrazy a příkazy

  1. Hodnoty a typy
  2. Proměnné
  3. Jména a klíčová slova
  4. Základní datové typy
  5. Změna typu
  6. Operátory a operandy
  7. Operátor modulo
  8. Logické operátory
  9. Booleovské hodnoty a výrazy
  10. Pořadí operací
  11. Příkazy a výrazy
  12. Vstup z klávesnice
  13. Glosář
  14. Cvičení

2.1 Hodnoty a typy

Ústředním pojmem programovacího jazyka Python je objekt. Prototyp objektu je popsán programovou strukturou, zvanou třída. Uživatelské varianty těchto prototypů jsou instancemi prototypových tříd.

Každý objekt má 3 konstituční vlastnosti:

Pokud si nejsme jisti, k jakému typu či třídě hodnota patří, zjistíme to vestavěnou funkcí type():

>>> type("Hello, World!")
<class 'str'>
>>> type(17)
<class 'int'>

Významy pojmů třída a funkce budou vysvětleny v samostatných kapitolách. Vestavěná funkce je součástí programového vybavení Pythonu.

Víme již, že řetězce (strings) patří k typu str a celá čísla (integers) k typu int. Čísla s desetinnou čárkou (či tečkou) patří k typu označeném jako float, protože tato čísla jsou vyjádřena formátem zvaným plovoucí desetinná čárka (floating-point).

>>> type(3.2)
<class 'float'>

A což hodnoty jako "17" a "2.3"? Vypadají jako čísla, ale jsou v uvozovkách.

>>> type("17")
<class 'str'>
>>> type("3.2")
<class 'str'>

Jsou to řetězce.

Řetězce mohou být v Pythonu uzavřeny v jednoduchých ('), dvojitých (") nebo i trojitých uvozovkách.

>>> type('Toto je retiazka.')
<class 'str'>
>>> type("A toto taky.")
<class 'str'>

Uvnitř dvojitých uvozovek mohou být uvozovky jednoduché a obráceně: 'Pravil "Ne!" '.

Při zapisování velkého celého čísla bychom mohli být v pokušení použít oddělovací čárky či tečky mezi trojicemi číslic, např. 1,000,000. Legální celé číslo to není, ale legální číslo to je:

>>> print(1,000,000)
1 0 0

Není to však to, co jsme očekávali. Python interpretuje 1,000,000 jako seznam tří položek.


2.2 Proměnné

Jedním z nejmocnějších rysů programovacího jazyka je jeho schopnost používat proměnné. Proměnná je jméno, které ukazuje na nějakou hodnotu.

Příkaz přiřazení vytváří přiřazení hodnoty ke jménu proměnné:

>>> n = 17
>>> pi = 3.14159
>>> message = "What's up, Doc?"

Znak přiřazení (=) by neměl být chápán jako "je totožno", protože pro tento vztah se používá znak ==. Znak přiřazení spojuje jméno na levé straně s hodnotou na pravé straně. Vytvoříme chybu, když napíšeme:

>>> 17 = n

Grafické vyjádření vztahů je méně zavádějící:

Zobrazené souvztažnosti můžeme vyjádřit slovy: "proměnné n je přiřazena hodnota 17" nebo "n odkazuje na objekt 17". Nikdy neřekneme "n rovná se 17".

Jméno proměnné lze použít ve funkci print:

>>> print(message)
What's up, Doc?
>>> print(n)
17
>>> print(pi)
3.14159
V konzole (nikoliv ve skriptu) se obejdeme i bez funkce print:
>>> message
What's up, Doc?

Ve všech případech je výsledkem hodnota proměnné. Typ proměnné můžeme zjistit dotazem v překladači. Proměnná má typ hodnoty, jež jí je přiřazena:

>>> type(message)
<class 'str'>
>>> type(n)
<class 'int'>
>>> type(pi)
<class 'float'>

Změna přiřazení

Stejné proměnné lze postupně přiřazovat různé hodnoty:

>>> bruce = 5
>>> bruce
5
>>> bruce = 7
>>> print(bruce)
7

Nové přiřazení ruší přiřazení předchozí.

Aktualizace proměnné

Nejběžnější formou změny přiřazení je aktualizace, kdy nová hodnota proměnné závisí na její předchozí hodnotě, například:

x = 6       # inicializace 
print(x)    # --> 6
x = x + 1   # aktualizace 
print(x)    # --> 7

Aktualizace proměnné přičtením hodnoty 1 se nazývá increment, aktualizace odečtením hodnoty 1 se nazývá decrement. Aktualizovaná proměnná musí mít předem přiřazenou počáteční hodnotu (viz inicializace).


2.3 Jména a klíčová slova

Jména proměnných mohou být libovolně dlouhá. Mohou obsahovat jak písmena tak číslice, ale musejí začínat písmenem. I když je přípustné použít velká písmena, z konvenčních důvodů to neděláme. Pokud tak učiníme, musíme si uvědomit, že velikost písmena hraje roli. Bruce a bruce jsou různá jména.

Podtržítko _ se ve jménu smí použít. Často se používá u jmen s více slovy, jako je moje_jmeno nebo price_of_tea_in_china. Podtržítko na počátku názvu mívá speciální význam, takže jej zatím raději takto nepoužívejte.

Dáme-li proměnné nepřípustné jméno, obdržíme syntaktickou chybu:

>>> 76trombones = "big parade"
SyntaxError: invalid syntax
>>> more$ = 1000000
SyntaxError: invalid syntax
>>> class = "Computer Science 101"
SyntaxError: invalid syntax

76trombones není legální, protože nezačíná písmenem, more$ není legální, protože obsahuje nedovolený znak, označení dolaru. Co je ale špatného na class?

Ukazuje se, že class je jedno z klíčových slov Pythonu. Klíčová slova definují pravidla a strukturu jazyka a nemohou být použita jako jména proměnných.

Python má třicet čtyři klíčová slova:

and      del     global      not       with 
as       elif    if          or        yield
assert   else    import      pass      True 
break    except  in          raise     False
class    finally is          return    None 
continue for     lambda      try    
def      from    nonlocal    while 

Tento seznam bychom měli mít po ruce, abychom do něj mohli nahlédnout, když překladač protestuje proti nějakému jménu naší proměnné a my nevíme proč.


2.4 Základní datové typy

Tento tutoriál nemá nahrazovat referenční příručku ale přesto nebude od věci, uvedeme-li si stručný přehled datových typů jazyka Python, i když zpočátku budeme používat jenom asi čtyři:

  1. Číselné typy
  2. Sekvence
  3. Sety
  4. Mappings

Hodnoty některých typů lze po jejich vytvoření dodatečně změnit; říkáme, že jsou měnitelné neboli mutable: list, set, dict

Hodnoty některých typů po jejich vytvoření dodatečně změnit nelze; říkáme, že jsou neměnitelné neboli immutable: int, float, complex, str, bytes, tuple, frozen set


2.5 Změna typu

Změna typu neboli konverze se provádí pomocí několika vestavěných funkcí. Funkce int například přjímá libovolnou hodnotu a je-li to možné, přemění ji na typ integer:

>>> int("32")
32
>>> int("Hello")
ValueError: invalid literal for int(): Hello

Funkce int také přemění hodnotu typu float (desetinné číslo) na integer, ale v tom případě odsekne desetinnou část čísla:

>>> int(3.99999)
3
>>> int(-2.3)
-2
>>> int(1.0)
1

Funkce float přemění celá čísla a řetězce na čísla v plovoucí čárce:

>>> float(32)
32.0
>>> float("3.14159")
3.14159
>>> float(1)
1.0

Může se zdát divné, že Python rozlišuje mezi celočíselnou hodnotou 1 a desetinnou hodnotou 1.0. Obě hodnoty představují stejné číslo, ale patří k rozdílným datovým typům.

Funkce str přemění zadaný argument na typ řetězec:

>>> str(32)
'32'
>>> str(3.14149)
'3.14149'
>>> str(True)
'True'
>>> str(true)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'true' is not defined

2.6 Operátory a operandy

Operátory jsou specielní symboly, které reprezentují výpočty jako sčítání, násobení a dělení. Hodnoty, které operátor používá, jsou operandy.

Následující výrazy jsou všechno přípustné výrazy Pythonu, jejichž význam je více či méně jasný.

20 + 32   hour - 1   hour*60 + minute   5**2   (5+9) * (15-7)

Symboly +, - a kulaté závorky znamenají v Pythonu totéž co v matematice. Hvězdička * je symbol pro násobení, ** je symbol pro umocňování a / je symbol pro dělení.

>>> 4*3 / 2
6.0
>>> 2**3  
8

Objeví-li se na místě operandu proměnná, je zaměměna za svou hodnotu před tím, než se operace provede.

Operátor // je operátorem celočíselného dělení.

>>> minute = 59 
>>> minute // 60  
0

Při celočíselném dělení zaokrouhluje Python dolů a to i v těch případech, kdy jeden z operandů je ve formátu float.

>>> minute // 60.0  
0.0

2.7   Operátor modulo

Operátor modulo pracuje s celými čísly (číselnými výrazy) a poskytuje zbytek při dělení prvního operandu druhým. V Pythonu jej označujeme znakem pro procento (%). V pořadí operací má stejnou preferenci jako násobení.

>>> q = 7 // 3    # operátor celočíselného dělení
>>> print(q)
2
>>> r = 7 % 3     # operátor modulo (určení zbytku)
>>> print(r)
1

Ukazuje se, že modulo operátor je překvapivě užitečný. Na příklad, můžeme zjistit, zda jedno číslo je dělitelné druhým: je-li x % y == 0, pak x je dělitelné číslem y.

Lze jím také oddělit krajní číslice zprava od zadaného čísla. Například, x % 10 vyčlení nejkrajnější číslici čísla x zprava (při základu 10). Podobně x % 100 vyčlení dvě poslední číslice.

Použití operátoru % si ukážeme na pěkném příkladu převodu vteřin na hodiny, minuty a zbývající vteřiny:

secs_celk = int(input("Kolik vteřin celkem?"))
hodiny = secs_celk // 3600
secs_navic = secs_celk % 3600
minuty = secs_navic // 60
sekundy = secs_navic % 60

print("Celkem vteřin: ", secs_celk)
print("Hodin, minut, vteřin: ", hodiny, minuty, sekundy) 

2.8   Logické operátory

Logické operátory jsou tři: and , or a not. Jak vidíme, jsou to zároveň klíčová slova. Význam těchto operátorů je podobný jejich významu v češtině (a, nebo, ne). Například, výrazy x > 0 and x < 10 jsou pravdivé pouze tehdy, jsou-li pravdivá obě tvrzení, to jest, je-li x větší než 0 a menší než 10.

Tvrzení n%2 == 0 or n%3 == 0 je pravdivé, je-li alespoň jedna z podmínek pravdivá, to jest, je-li číslo dělitelné dvěma nebo třemi.

Konečně, operátor not neguje následující výraz, takže not(x > y) je pravda, je-li x > y nepravda; to jest je-li x menší nebo rovno y.


2.9   Booleovské hodnoty a výrazy

Pythonovský typ pro uložení hodnoty True nebo False zvaný bool je pojmenován po britském matematikovi George Booleovi, jenž vytvořil tak zvanou booleovu algebru, která je základem moderní počítačové aritmetiky.

Jsou pouze dvě booleovské hodnoty: True a False. Velká počáteční písmena jsou důležitá, neboť true a false booleovskými hodnotami nejsou.

>>>type(True) 
<class 'bool'>
>>>type(true)
Traceback (most recent call last):
>>File "<stdin>", line 1, in <module>
NameError: name 'true' is not defined

Booleovský výraz je výraz, který vede k boooleovské hodnotě. Operátor == (je totožné) porovná dvě hodnoty a předá booleovskou hodnotu:

>>> 5 == 5
True
>>> 5 == 6
False

Operátor == je jedním z relačních operátorů, dalšími jsou tyto:

      x != y               # x není totožné y
      x > y                # x je větší než y
      x < y                # x je menší než y
      x >= y               # x je větší nebo rovno y
      x <= y               # x je menší nebo rovno y

2.10 Pořadí operací

Objeví-li se ve výrazu více než jeden operátor, závisí pořadí výpočtu na pravidlech o pořadí operací. Python respektuje stejná pravidla, jaká se používají v matematice. Pořadí operací si lze pamatovat pomocí akronymu ZUNDSO (PEMDAS anglicky):


2.11 Příkazy a výrazy

Příkaz je instrukce, kterou může překladač provést. Samotný příkaz však neprodukuje žádný výstup. Dosud jsme poznali pouze příkaz přířazení =. V krátké době se seznámíme s příkazy while, for, if a import. Jak vidíme, jsou to také klíčová slova.

Výraz je kombinace hodnot, proměnných, operátorů a případně i volaných funkcí. Zapíšeme-li výraz na příkazový řádek, překladač jej vyhodnotí a zobrazí výsledek.

>>> 1 + 1
2
>>> len("hello")
5

V ukázce vidíme vestavěnou funkci len, která vrací délku zadané sekvence, v tomto případě délku řetězce. Po print a type je to třetí ukázka vestavěné funkce.

Vyhodnocení výrazu dává hodnotu a proto se výrazy mohou vyskytovat jen na pravé straně příkazu přiřazení. Hodnota sama o sobě je jednoduchý výraz, stejně jako proměnná.

>>> x = 5+3
>>> x
8
>>> 17
17

2.12 Vstup z klávesnice

Pro vkládání údajů do programu z klávesnice se používá funkce input(). V konzole nebo ve skriptu zadáme

>>> n = input("Zadejte své jméno: ") 
načež se na novém řádku zadá vstup, nebo pokud tuto záležitost řešíme v PyScripteru (či skriptu), otevře se nám následující okno, do kterého svůj vstup zapíšeme:



Funkce input() ukládá všechny vložené údaje jako řetězce. Chceme-li použít vstup jako číselnou hodnotu, musíme jej konvertovat na celé nebo desetinné číslo:

>>> m = int(input("Zadejte svůj věk: ")) 

Výzva v závorce je nepovinná, pokud je uvedena, zobrazí se v dialogovém okně či na příkazovém řádku.


2.13 Glosář

hodnota (value)
Číslo nebo řetězec (nebo jiná entita, o které budeme hovořit později) jež může být přiřazeno k proměnné nebo počítáno ve výrazu.
typ (type)
Typ hodnoty určuje jak může být použita ve výrazech. Typy, které jsme zatím poznali, jsou celá čísla (integers, typ int), čísla s plovoucí desetinnou čárkou (floating-point numbers, typ float ), a řetězce (strings, typ string).
int
Datový typ Pythonu pro kladná a záporná celá čísla.
str
Datový typ Pythonu pro "řetězce" alfanumerických znaků.
float
Datový typ Pythonu pro čísla s plovoucí desetinnou čárkou. Interně se tato čísla skládají ze dvou částí: z báze a exponentu. Kvůli chybě při zaokrouhlování jde o číslo s přibližnou hodnotou.
proměnná (variable)
Jméno, které odkazuje na hodnotu.
příkaz přířazení (assignment statement)
Příkaz, který jménu (proměnné) přiřadí hodnotu. Na levé straně operátoru přiřazení (=) je jméno. Na pravé straně operátoru je hodnota nebo výraz, který je překladačem Pythonu nejprve vyhodnocen a potom přiřazem jménu. Rozdíl mezi levou a pravou stranou si začínající programátoři někdy pletou. V následujícím přiřazení:
 n = n + 1 
hraje písmeno n velmi rozdílnou roli na obou stranách přiřazení. Na pravé straně je to hodnota a tvoří část výrazu, který je vyhodnocen před přiřazením proměnné na levé straně.
plovoucí desetinná čárka (floating point)
Formát pro zobrazení čísel s desetinnou částí.
klíčové slovo (keyword)
Vyhražené slovo, které používá překladač při analýze skladby programu; klíčová slova jako if, def, a while nemůžeme použít jako jména proměnných.
operátor (operator)
Specielní symbol, který představuje jednoduchý výpočet jako je sčítání, násobení, nebo zřetězení řetězců.
operand (operand)
Jedna z hodnot, s nimiž operátor pracuje.
výraz (expression)
Kombinace proměnných, operátorů a hodnot, které lze vyjádřit výslednou hodnotou.
vyhodnocení (evaluation)
Zjednodušení výrazu provedením operací, které jsou tak nahrazeny jednou hodnotou.
celočíselné dělení (integer division)
Operace, která dělí jedno celé číslo druhým celým číslem. Celočíselné dělení udává celým číslem kolikrát je dělenec dělitelný dělitelem; jakýkoliv zbytek se zanedbává.
pravidla pro pořadí důležitosti (rules of precedence)
Pravidla, určující pořadí v němž je prováděn výpočet výrazů obsahujících vícero operátorů a operandů.
zřetězit (concatenate)
Připojit těsně k sobě dva operandy.
skladba (composition)
Spojení jednoduchých výrazů a příkazů do složených příkazů a výrazů za účelem stručnější prezentace složitých výpočtů.
komentář (comment)
Informace v programu určená pro jiného programátora (či kohokoliv, kdo bude číst zdrojový kód), která nemá žádný vliv na provedení programu.

2.14 Cvičení

  1. Co se stane, když dáte příkaz k tisku přiřazení?
    >>> print(n = 7)
    
  2. A což toto?
    >>> print(7 + 5)
    
    Nebo toto?
    >>> print(5.2, "toto", 4-2, 5/2.0)
    
  3. Použijte větu: All work and no play makes Jack a dull boy. Každé slovo uložte do samostatné proměnné a potom větu vytiskněte na jeden řádek s použitím funkce print().
  4. Přidejte závorky k výrazu 6 * 1 - 2 tak, aby se změnila jeho hodnota ze 4 na -6.
  5. Za prompt překladače Pythonu zapište houby + 4. To vyvolá chybu:
    NameError: name 'houby' is not defined
    
    (jméno 'houby není definováno') Jménu houbeles přiřaďte takovou hodnotu, aby houby + 4 bylo 10.
  6. Dovedl byste napsat program pro výpočet výsledné hodnoty A počátečního vkladu P?
    kde:
    • P = počáteční vklad
    • r = úroková míra per annum jako desetinné číslo
    • n = počet hodnocených období za rok
    • t = počet roků
    Pro P=10000 Kč, n=12 měsíců, r=8%(0,08) a t=10 let by hodnota A měla být přibližně 22196.4 Kč.

  7. Odjíždíte na báječnou dovolenou ve středu, to je ve 3. dnu v týdnu. Vrátíte se po 137 nocích. Napište program, který se zeptá na pořadové číslo dne vašeho odjezdu, délku pobytu a vrátí vám pořadové číslo dne, kdy se vrátíte. Bude to neděle?

comment up next how to end end