Java týden Slevový týden - Srpen
30 % bodů zdarma na online výuku díky naší Slevové akci!
Pouze tento týden sleva až 80 % na e-learning týkající se Javy.

Lekce 2 - Proměnné, základní datové typy a funkce

V minulé lekci, Úvod do Pythonu, jsme si řekli něco o tomto jazyku, ukázali IDLE a naučili jsme se základní matematické operátory. V dnešním tutoriálu si ukážeme proměnné, základní datové typy a napíšeme si první konzolové aplikace. Samozřejmě nebude chybět cvičení :-)

Typový systém

Existují dva základní typové systémy: statický a dynamický.

  • Dynamický typový systém nás plně odstiňuje od toho, že proměnná má vůbec nějaký datový typ. Ona ho samozřejmě vnitřně má, ale jazyk to nedává najevo. Dynamické typování jde mnohdy tak daleko, že proměnné nemusíme ani deklarovat, jakmile do nějaké proměnné něco uložíme a jazyk zjistí, že nebyla nikdy deklarována, sám ji založí. Do té samé proměnné můžeme ukládat text, potom objekt uživatele a potom desetinné číslo. Jazyk se s tím sám popere a vnitřně automaticky mění datový typ. V těchto jazycích jde vývoj rychleji díky menšímu množství kódu, zástupci jsou např. PHP nebo Ruby.
  • Statický typový systém naopak striktně vyžaduje definovat typ proměnné a tento typ je dále neměnný. Jakmile proměnnou jednou deklarujeme, není možné její datový typ změnit. Jakmile se do textového řetězce pokusíme uložit objekt uživatel, dostaneme vynadáno.

Python je dynamicky typovaný jazyk, proměnné nemusíme deklarovat s jejich datovým typem. Díky tomu je vývoj v jazyce rychlejší a jazyk se ze začátku lépe osvojuje.

Proměnné

V Pythonu jsou proměnné brány jako odkazy na objekty, díky čemuž je můžeme používat ve funkcích a volat na nich metody (ukážeme si později). Proměnná nám většinou uchovává nějakou hodnotu určitého (datového) typu.

Základní datové typy

Celé číslo

Anglicky integer, zkratka int - uchovává v paměti celé číslo, jehož velikost je limitována pouze pamětí počítače.

Desetinné číslo

Anglicky floating point number, zkratka float - uchovává v paměti desetinné číslo, není však neomezeně přesné. U desetinných čísel se nepíše čárka, ale tečka. Čísla začínající nulou se dají psát bez nuly. Např. 0.25 se dají psát jako .25.

Řetězec

Anglicky string, zkratka str - uchovává v paměti řetězec (sled znaků - např. slovo). Definuje se tak, že se výraz, který uchovává, zapíše do uvozovek. Buď jednoduchých ' ', nebo do dvojitých " ".

Datové typy deklarovat nemusíme, pokud nechceme nějaké speciální.

Hodnoty uložené v proměnných

Teď si otevřte pythonovskou konzoli nebo IDLE. Vytvoříme si naši první proměnnou:

>>> a = 1

Máme a, což je odkaz na objekt o hodnotě 1. Zkusíme zvýšit hodnotu proměnné o 1:

>>> a = a + 1

A teď vypíšeme hodnotu a:

>>> a
2

Proměnných můžeme i více. Přidáme si proměnnou b.

>>> b = 3
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

A nyní vydělíme b proměnnou a a to celé uložíme do c:

>>> c = b / a

Kolik je c ?

>>> c
1.5

Někoho z vás možná napadne, že c nebude celé číslo. Python si určí, jakého typu bude proměnná. Zjistit typ proměnné můžeme funkcí type():

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

Proměnná c je desetinné číslo!

Velikost písmen

Teď ještě vsuvka ohledně velikosti písmen:

>>> a = 1
>>> A = 2
>>> a
1
>>> A
2

Python na rozdíl od některých jiných jazyků, rozlišuje velikost písmen u proměnných, takže a a A jsou úplně jiné proměnné!

Hello World!

V téměř každém jazyce je první aplikace Hello World! - neboli Ahoj světe! My si ji také vytvoříme. Otevřte si IDLE -> dále pak file -> New File (nebo můžete stisknout Ctrl + N). Vyskočí vám nové okno. Tam zapíšeme následující kód, který si hned vysvětlíme:

#!/usr/bin/env python3

print("Hello world!")
input()

První řádek je komentář, který zároveň slouží k spuštění interpretu (Pythonu) na unixových systémech. Komentář začíná # a Python dále ignoruje co je za ním (na řádce). Poté následuje mezera pro přehlednost. Na další řádce je funkce print(). Tato funkce zobrazí řetězec nebo číslo v konzoli. Další je funkce input(), která přijímá vstup od uživatele jako řetězec (v tomto případě čeká na stisk klávesy, jinak by se okno okamžitě zavřelo).

Pokud program spustíte, dostanete toto:

Konzolová aplikace
Hello world!

Teď zkuste zapsat do vašeho nového programu tento kód a ten poté uložte a spusťte:

#!/usr/bin/env python3

print("Já jsem první řádka.")
print("A já druhá.")
input()

Výstup:

Konzolová aplikace
Já jsem první řádka.
A já druhá.

Máte menší problém. Funkce print() po vypsání textu ukončí řádek. Pokud byste chtěli další výstup "vytisknout" na ten samý řádek, tak máte (zatím) smůlu. Později si ukážeme, jak si přizpůsobit funkci print() k obrazu svému. Funkce print() ale dokáže vypsat více textu najednou, stačí oddělit text čárkou:

#!/usr/bin/env python3

print("Já jsem první část textu", "a já druhá!")
input()

Teď si ukážeme, že i řetězce lze "sčítat":

#!/usr/bin/env python3

print("Já jsem první část textu" + " " + "a já druhá!")
input()

Výstup do konzole je pokaždé stejný a vypadá takto:

Konzolová aplikace
Já jsem první část textu a já druhá!

Papoušek

Minulý program byl poněkud nudný, zkusme nějak reagovat na vstup od uživatele. Napíšeme program papoušek, který bude dvakrát opakovat to, co uživatel napsal. Ještě jsme nezkoušeli z konzole nic načítat, ale je to velmi jednoduché. Zkusme si napsat následující kód:

#!/usr/bin/env python3

print("Ahoj, jsem virtuální papoušek Lóra, rád opakuji!")
slovo = input("Napiš něco: ") #získá od uživatele vstup a uloží jej do proměnné
vysledek = slovo + " " + slovo # vytvoří novou proměnnou
print(vysledek)
input()

Zde je ukázka:

Konzolová aplikace
Ahoj, jsem virtuální papoušek Lóra, rád opakuji!
Napiš něco: Nazdar ptáku!
Nazdar ptáku! Nazdar ptáku!

Parsování

Funkce input() vrací řetězec. Ale co když potřebujeme dostat od uživatele například číslo?

Musíme provést tzv. parsování. Číslo vytvoříme z řetězce (nebo z něčeho jiného) pomocí vestavěné funkce int(). Naopak můžeme převést číslo (nebo něco jiné - např. desetinné číslo) na řetězec pomocí funkce str(). A teď praxe:

Program zdvojnásobovač

#!/usr/bin/env python3

print("Zdvojnásobovač!")
cislo = int(input("Zadejte číslo: ")) # řetězec z input() se převede na celé číslo
print("Jeho dvojnásobek je:", 2 * cislo)
input()

Zde je příklad:

Konzolová aplikace
Zdvojnásobovač!
Zadejte číslo:
3
Jeho dvojnásobek je: 6

Kalkulačka

Teď si vytvoříme konzolovou aplikaci, která dokáže sčítat, odčítat, násobit a dělit dvě čísla.

#!/usr/bin/env python3

print("Vítejte v kalkulačce\n")
prvni_cislo = float(input("Zadejte první číslo: "))
druhe_cislo = float(input("Zadejte druhé číslo: "))
print("Součet:", prvni_cislo + druhe_cislo)
print("Rozdíl:", prvni_cislo - druhe_cislo)
print("Součin:", prvni_cislo * druhe_cislo)
print("Podíl:", prvni_cislo / druhe_cislo)
input("\nDěkuji za použití kalkulačky, aplikaci ukončíte libovolnou klávesou.")

Znak \n v textu způsobí, že se text odřádkuje. To znamená, že text za tímto znakem se zobrazí na další řádce (v tomto případě se udělá prázdný řádek, jelikož za tímto znakem nic nenásleduje).

Pokud budete mít v Pythonu víceslovné názvy proměnných, doporučuje se oddělovat názvy podtržítkem.

Nyní si ukážeme, jak kalkulačka vypadá:

Konzolová aplikace
Vítejte v kalkulačce

Zadejte první číslo:
3
Zadejte druhé číslo:
2
Součet: 5
Rozdíl: 1
Součin: 6
Podíl: 1.5

Děkuji za použití kalkulačky, aplikaci ukončíte libovolnou klávesou.

Tak a to je pro tuto lekci vše. V lekci příští, Řešené úlohy k 1. a 2. lekci Pythonu, se podíváme na větvení programu pomocí if, elif a else; výraz in a dále si ukážeme booleovské hodnoty, logické operátory a napíšeme si pár dalších programů.

V následujícím cvičení, Řešené úlohy k 1. a 2. lekci Pythonu, si procvičíme nabyté zkušenosti z předchozích lekcí.


 

Předchozí článek
Úvod do Pythonu
Všechny články v sekci
Základní konstrukce jazyka Python
Článek pro vás napsal gcx11
Avatar
Jak se ti líbí článek?
67 hlasů
(^_^)
Aktivity (9)

 

 

Komentáře
Zobrazit starší komentáře (67)

Avatar
Matěj Přerovský:9.11.2019 21:52

Můžeš si to zaokrouhlit pomocí round()

#!/usr/bin/env python3

print("Vítejte v kalkulačce\n")
první_číslo = float(input("Zadejte první číslo: "))
druhé_číslo = float(input("Zadejte druhé číslo: "))
print("Součet:", první_číslo + druhé_číslo)
print("Rozdíl:", první_číslo - druhé_číslo)
print("Součin:", round(první_číslo * druhé_číslo, 2))
print("Podíl:", první_číslo / druhé_číslo)
input("\nDěkuji za použití kalkulačky, aplikaci ukončíte libovolnou klávesou.")
Odpovědět
9.11.2019 21:52
42
Avatar
Standa H.
Člen
Avatar
Standa H.:25.11.2019 13:56

Ahoj, už od papouška mi kod nefunguje,pokud jej spustím v konzoli mám pouze

Ahoj, jsem virtuální papoušek Lóra, rád opakuji!
Napiš něco:
dík za radu

 
Odpovědět
25.11.2019 13:56
Avatar
Filip Šídlo:7. ledna 5:42

Dobrý den, zajímalo by mě proč se mi program nevypne když na konci něco zmáčknu. Ten input na konci se tam od verez 3.8 psát nemusí ? díky

 
Odpovědět
7. ledna 5:42
Avatar
Vilfein
Člen
Avatar
Vilfein:31. ledna 19:20

Opravdu perfektně napsaná lekce :)

 
Odpovědět
31. ledna 19:20
Avatar
Odpovídá na Jegor Semenov
Jegor Semenov:1. dubna 20:58

už jsem zjistil

Editováno 1. dubna 21:00
 
Odpovědět
1. dubna 20:58
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Jarda Mraček:27. dubna 10:21

Zdravím, mohl by mě někdo posunout prosím.. potřeboval bych do proměnné načíst více než jedno číslo. Například řadu celých čísel oddělených čárkou a tyto čísla pak třeba sečíst, udělat z nich průměr atd.. Ty matematické operace chápu, ale nevím jak dostat to proměnné více čísel.. Díky moc!

 
Odpovědět
27. dubna 10:21
Avatar
Fíla N.
Člen
Avatar
Odpovídá na Jarda Mraček
Fíla N.:27. dubna 12:02

Ok, přispěji svým svým amatérským názorem :D
Nejspíš tak, že by si na vstupu zadal všechna čísla oddělená čárkou, pomocí splitu to rozdělil do pole a pak s tím pracoval dál

 
Odpovědět
27. dubna 12:02
Avatar
Jarda Mraček:27. dubna 12:08

Díky moc! Možná jsem moc hrrr a měl bych si napřed pořádně přečíst základy a pak až se ptát, ať moc neotravuju :D Teď už jsem o kousek chytřejší a místo "obyčejné" proměnné budou mít v tomto případě význam seznamy. Ty už jsem nějak nastudoval a pro můj účel ideální. Akorát je to dycky seznam, který já jako tvůrce zadám.. Potřebuju se ale dostat do fáze, aby ten seznam zadal uživatel z klávesnice a na základě těchto dat už by se provedli požadované operace.. Druhá volba je ještě externí soubor s daty, ale ta klávesnice mi připadá víc user friendly.. No nějak se k výsledku snad doplazím :)

 
Odpovědět
27. dubna 12:08
Avatar
Rozbita Zaluzie:15. května 18:02

Díky moc jen by mě zajímalo jestli nejde nějak nastavit UTF-8 protože mi nefunguje diakritika a při outputu mě to odkazuje na tento problém

 
Odpovědět
15. května 18:02
Avatar
cinkim
Člen
Avatar
Odpovídá na Jarda Mraček
cinkim:23. července 13:04

Ahoj, jestli potřebuješ celá čísla a budou vzestupně, např 1, 2, 3, 4, .... můžeš použít cyklus for. Například "for i in range(1, 50):" bude do proměnné "i" postupně dosazovat hodnoty čísel 1 - 49. Přidáním třetího parametru "for i in range(1, 50, 2):" jde vypsat lichou číselnou řadu. Třetí parametr udává skok.
Jestli ale máš čísla různých hodnot, pak vytvoření seznamu je dobrá volba.

 
Odpovědět
23. července 13:04
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 77. Zobrazit vše