Black Friday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
BF extended 2022

Lekce 3 - Proměnné, typový systém a parsování v Pythonu

Z minulé lekce, PyCharm a první konzolová aplikace v Pythonu, již umíme pracovat s prostředím PyCharm a vytvořit konzolovou aplikaci.

V tomto tutoriálu základů programování v jazyku Python si ukážeme proměnné, základní datové typy a napíšeme si první konzolové aplikace. Samozřejmě nebude chybět cvičení.

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.

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 změ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.

Python je dynamicky typovaný jazyk. Proměnné tedy 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.

V Pythonu máme tři základní datové typy:

  • Celá čísla: int
  • Desetinná čísla: float
  • Textový řetězec: str

Pojďme si nyní něco naprogramovat, ať si nabyté znalosti trochu osvojíme. S teorií budeme pokračovat až příště.

Program vypisující proměnnou

Založíme si nový projekt a pojmenujeme ho Vypis (ke všem příkladům si vždy založíme nový projekt). Zkusíme si nadeklarovat celočíselnou proměnnou a. Dosadíme do ní číslo 56 a její obsah vypíšeme do konzole:

a = 56
print(a)

Na prvním řádku deklarujeme proměnnou a a přiřadíme ji hodnotu 56. Slouží k tomu operátor "rovná se" (=). Druhý příkaz je nám už známý, vypíše do konzole obsah proměnné a. Konzole je chytrá a umí vypsat i číselné proměnné:

Konzolová aplikace
56

Pro desetinnou proměnnou by kód vypadal takto:

a = 56.6
print(a)

Je to téměř stejné jako s celočíselnou proměnnou. Jako desetinný oddělovač používáme tečku (.). Pokud bychom chtěli zjistit, jakého datového typu proměnná je, můžeme typ zjistit pomocí funkce type():

a = 5.56
print(type(a))
Konzolová aplikace
<'class-float'>

Program Papoušek

Minulý program byl poněkud nudný, zkusme tedy 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é. Slouží k tomu metoda input(), která nám vrátí textový řetězec z konzole. Zkusme si napsat následující kód:

print("Ahoj, jsem virtuální papoušek Lóra, rád opakuji!")
print("Napiš něco: ")

vstup = input()
vystup = vstup + ", " + vstup + "!"
print(vystup)

To už je trochu zábavnější 🙂 První dva řádky jsou jasné. V dalším deklarujeme textový řetězec vstup. Do proměnné vstup se přiřadí hodnota z metody input() na konzoli, tedy to, co uživatel zadal. Pro výstup si pro názornost zakládáme další proměnnou typu textový řetězec. Zajímavé je, jak do vystup přiřadíme. Využíváme přitom tzv. konkatenace (spojování) řetězců. Pomocí operátoru + totiž můžeme spojit několik textových řetězců do jednoho. Je jedno, jestli je řetězec v proměnné, nebo jestli je explicitně zadán v uvozovkách ve zdrojovém kódu. Do proměnné tedy přiřadíme vstup, dále čárku, znovu vstup, a poté vykřičník. Nakonec proměnnou vypíšeme do konzole.

Program zdvojnásobovač

Zdvojnásobovač si vyžádá na vstupu číslo, které zdvojnásobí a vypíše. Asi bychom s dosavadními znalostmi napsali něco takového:

print("Zadejte číslo k zdvojnásobení:")
a = input()
a = a * 2
print(a)

Zdvojnásobení čísla a jsme provedli pomocí přiřazení. Pokud zkusíme program přehrát, v konzoli se nám vypíše dvakrát námi zadané číslo! Narážíme na fakt, že funkce input() nám vrací textový řetězec. Pokud se pokusíme sečíst dva řetězce, jednoduše se oba řetězce spojí (jako když se spojují brčka). Cokoli tedy přijde z textové konzole je vždy text. A to i když zadáme číslo. Abychom získali skutečně číslo, budeme ho muset tzv. naparsovat.

Parsování

Parsováním se myslí převod z textové podoby na nějaký specifický typ, např. číslo. Pokud budeme chtít naparsovat např. int z typu string, budeme postupovat takto:

s = "56"
a = int(s)

Zkusme si tedy napsat program, který si na vstupu vyžádá jedno celé číslo, a to nám zdvojnásobí:

print("Zadejte číslo k zdvojnásobení:")
s = input()
a = int(s)
a = a * 2
print(a)

Nejprve si text z konzole uložíme do textového řetězce s. Do celočíselné proměnné a poté uložíme číselnou hodnotu řetězce s. Dále hodnotu v a zdvojnásobíme a vypíšeme do konzole:

Konzolová aplikace
Zadejte číslo k zdvojnásobení:
1024
2048

Parsování se samozřejmě nemusí povést, když bude v textu místo čísla např. "slovo", ale tento případ zatím nebudeme ošetřovat.

Jednoduchá kalkulačka

Ještě jsme nepracovali s desetinnými čísly. Zkusme si tedy napsat slibovanou kalkulačku. Bude velmi jednoduchá. Na vstup přijdou dvě čísla a program poté vypíše výsledky pro sčítání, odčítání, násobení a dělení:

print("Vítejte v kalkulačce")
print("Zadejte první číslo:")
a = float(input())
print("Zadejte druhé číslo:")
b = float(input())
soucet = a + b
rozdil = a - b
soucin = a * b
podil = a / b
print(f"Součet: {soucet}")
print(f"Rozdíl: {rozdil}")
print(f"Součin:  {soucin}")
print(f"Podíl:  {podil}")
print("Děkuji za použití kalkulačky!")
Konzolová aplikace
Vítejte v kalkulačce
Zadejte první číslo:
3.14
Zadejte druhé číslo:
2.72
Součet: 5,86
Rozdíl: 0,42
Součin: 8,5408
Podíl: 1,15441176470588
Děkuji za použití kalkulačky!

Pro jednodušší výpis do konzole zde používáme formátovaný výpis pomocí interpolace (nebo též F-String). Tato šikovná utilita je v pythonu od verze 3.6.

Všechny programy jsou k dispozici v příloze.

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


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 328x (2.9 kB)
Aplikace je včetně zdrojových kódů v jazyce Python

 

Předchozí článek
PyCharm a první konzolová aplikace v Pythonu
Všechny články v sekci
Základní konstrukce jazyka Python
Přeskočit článek
(nedoporučujeme)
Řešené úlohy k 1.-3. lekci Pythonu
Článek pro vás napsal gcx11
Avatar
Uživatelské hodnocení:
700 hlasů
(^_^)
Aktivity

 

 

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

Avatar
Jakub Václavík:18.8.2021 10:00

Výborné zpracování, já si vše zapisuji dopodrobna, protože ,, opakování je matka moudrosti" :D

 
Odpovědět
18.8.2021 10:00
Avatar
Aleš Vlasák:19.8.2021 12:44

Ahoj u cvičení papoušek mi nechce opakovat slovo, co napíšu. Nemohl by mi prosím někdo poradit, nebo poslat obrázek jak to má být správně napsáno?
děkuju

 
Odpovědět
19.8.2021 12:44
Avatar
Vojtěch Perník:26.8.2021 20:05

Pěkný článek! Akorát bych opravil Děkuji za použití kalkulačky, aplikaci ukončíte libovolnou klávesou.Děkuji za použití kalkulačky, aplikaci ukončíte klávesou Enter. Funkce input() totiž skončí pouze po stisknutí této klávesy.

 
Odpovědět
26.8.2021 20:05
Avatar
Petr Smejkal
Člen
Avatar
Petr Smejkal:1.11.2021 22:00

Ahoj, funguje vám to papouškování, zdvojnásobovač atd? Nějak mi to nejede, i když zkopíruji přesně podle zadání. Není to tím, že nová verze Pythonu 3.10.0 dělá něco jiného?

 
Odpovědět
1.11.2021 22:00
Avatar
Stanislav Peřina:25.12.2021 0:11

Proč je všude na posledním řádku input () ? Tak to zbytečně vybízí k uživatelskému vstupu a pokud nedáme jen enter, ale vložíme číslo nebo text, tak to vypíše na výstupu.

 
Odpovědět
25.12.2021 0:11
Avatar
Odpovídá na Petr Smejkal
Petr Nadvornik:16. dubna 23:20

Ahoj, vše funguje. :)

#!/usr/bin/env python3

print("Ahoj, jsem Kakadu a rad opakuji!")
slovo = input("Co mam zopakovat? ")
opakovani = slovo + " " + slovo + " " + slovo
print(opakovani)
input()
Odpovědět
16. dubna 23:20
"Každý začátek je těžký, začít je snadné."
Avatar
Filip Černý:24. června 21:09

Parádní lekce! Poslední úlohu jsem si trošku zkomplikoval, ale funguje to.

 
Odpovědět
24. června 21:09
Avatar
Vladimír Richter:30. června 10:53

Ahoj. nevím si prosím rady. Když opíšu kód přesně podle zadání:
print("Hello world!")
input()
uložím ho a spustím, vše šlape. Ale když ten uložený soubor otevřu, jen problikne obrazovka...

 
Odpovědět
30. června 10:53
Avatar
Jaroslav Hořejší:9. července 18:56

Ahoj, nedá mi to a zeptám se. Proč Idle a ne PyCHarm, kde si mohu nově nabité zkušenosti zkoušet bez toho, abych musel pokaždé naklikat uložený soubor?

 
Odpovědět
9. července 18:56
Avatar
Tomáš Novotný:11. července 15:22

největší problém je zvyk....furt přemýšlím kde mám chybu a pak zjistím, že desetinnou čárku píšu jako čárku a ne tečku....

 
Odpovědět
11. července 15:22
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 98. Zobrazit vše