Teď se vrátíme do základní školy a zkusíme si napsat program, který vypočítá obsah a obvod čtverce, u kterého známe délku strany.
Vytvoř si v editoru nový soubor a ulož ho do adresáře pro dnešní lekci
pod jménem ctverec.py
.
Zkus do něj napsat program, který spočítá a vypíše obvod a obsah čtverce
se stranou 356 cm.
Po spuštění by se mělo vypsat něco jako:
Obvod čtverce se stranou 356 cm je 1424 cm
Obsah čtverce se stranou 356 cm je 126736 cm2
Pro připomenutí, obvod čtverce se stranou a se dá vypočítat jako O = 4a a obsah jako S = a².
Matematika!
Doufám, že tenhle příklad nikoho neodradí, ale „počítač“ je holt od slova počítat. Není třeba se děsit; na základy programování si vystačíme s matematickými znalostmi ze základní školy.
Výsledky by měl spočítat Python; číslo 1424 nebo 126736 do programu nepiš.
Jestli si nevíš rady, podívej se na program printing.py
z lekce o print
, kde jeden řádek dělá něco podobného.
Až budeš mít program hotový, nebo až budeš chtít vyzkoušet rozepsaný kousek, spusť ho:
(venv)
,
aktivuj si virtuální prostředí,cd
donaviguj do adresáře s programem,python ctverec.py
.Funguje? Jestli ne, oprav ho a zkus to znovu!
Když už jsi v příkazové řádce ve správném adresáři, stačí zadat python ctverec.py
.
Abys to nemusel/a celé psát, můžeš zkusit zmáčknout šipku nahoru,
↑, a vrátit se tak k předchozímu příkazu.
Jestli všechno funguje, zkus změnit program tak, aby počítal obsah a obvod čtverce o straně 123 cm.
Zvládneš to i pro stranu 3945 cm, 832 cm, 956 cm? Baví tě přepisování čísel? Kdyby byl program delší (několikastránkový), jak bys zajistil/a, že jedno z těch čísel nepřehlédneš?
Existuje způsob, jak program napsat, aniž bys musela pokaždé přepisovat všechna čísla: stranu čtverce si „pojmenuješ“ a potom používáš jenom její jméno. V Pythonu na pojmenovávání hodnot slouží proměnné (angl. variables). Používají se takto:
strana = 123
print('Obvod čtverce se stranou', strana, 'je', 4 * strana, 'cm')
print('Obsah čtverce se stranou', strana, 'je', strana * strana, 'cm2')
Neboli: napíšeš jméno, pak rovnítko a za rovnítkem výraz, jehož hodnota se do proměnné přiřadí. Když potom napíšeš jméno proměnné ve výrazu, použije se zapamatovaná hodnota.
Je zvykem dát před i za rovnítko po jedné mezeře.
To nás vede k jedné ze základních programátorských zásad: „neopakuj se“ (anglicky Don't repeat yourself, DRY). Když se někde opakuje stejná hodnota, stejný výraz nebo stejný kus kódu, dobrý programátor ten kus programu pojmenuje a několikrát pak použije jen jméno. Často se totiž stává, že je program potřeba změnit – buď je v něm chyba nebo se změní zadání. A potom je mnohem jednodušší změnu udělat jen na jednom místě.
Kromě toho dobrá jména usnadňují čtení programu:
4 * strana
nepotřebuje komentář, ale
u 4 * 183
není příliš jasné, co ta čísla znamenají.
Tohle je příklad navíc! Klidně ho přeskoč.
Změna zadání! Zkus program doplnit tak, aby kromě čtverce počítal i obvod a obsah kruhu se stejným poloměrem, jakou má čtverec stranu.
Pro připomenutí, obvod kruhu s poloměrem r je o = 2πr, obsah S = πr² a π je zhruba 3,1415927.
Všechna čísla, která matematici označují jen jedním písmenkem (klidně řeckým), vhodně pojmenuj.
Program si teď zpřehledníme komentářem.
V Pythonu komentář začíná dvojkřížkem (#
),
za který můžeš napsat úplně cokoliv – až do konce
řádku bude Python všechno ignorovat.
Komentáře jsou důležité: programy nečte jen počítač, ale i lidé. Do komentářů si můžeš poznamenat, co dělá celý program, vysvětlit, jak funguje nějaká složitější část, nebo vyjasnit něco, co není jasné přímo z programu.
Vždycky, když píšeš program, snaž se vžít do role někoho, kdo potom ten program bude číst, a všechno, co by mohlo být nejasné, upřesnit v komentářích. (Nejčastěji to budeš číst sám/sama, třeba po několika měsících, takže tím pomáháš sám/sama sobě!)
# Tento program počítá obvod a obsah čtverce.
strana = 123 # v centimetrech
print('Obvod čtverce se stranou', strana, 'je', 4 * strana, 'cm')
print('Obsah čtverce se stranou', strana, 'je', strana * strana, 'cm2')
Píšeš-li komentáš na stejný řádek jako kód, je zvykem před #
dát dvě
mezery (nebo i víc).
Za #
pak patří právě jedna.
Nakonec se podíváme, jak zařídit, aby číslo nemuselo být zapsáno v programu, ale aby ho mohl uživatel zadat sám.
Stejně jako když ses naučil/a používat print
i tady jen řeknu, že na to použijeme funkce.
Detaily si vysvětlíme později;
pro teď to budou kouzelná zaříkadla:
Chceš-li načíst řetězec (text), použij:
promenna = input('Zadej řetězec: ')
Chceš-li načíst celé číslo, použij:
promenna = int(input('Zadej číslo: '))
Chceš-li načíst desetinné číslo, použij:
promenna = float(input('Zadej číslo: '))
Místo řetězce 'Zadej …'
se dá napsat i jiná výzva.
A výsledek se samozřejmě dá uložit i do jiné proměnné než promenna
.
Hotový program může vypadat takto:
# Tento program počítá obvod a obsah čtverce.
strana = float(input('Zadej stranu čtverce v centimetrech: '))
print('Obvod čtverce se stranou', strana, 'je', 4 * strana, 'cm')
print('Obsah čtverce se stranou', strana, 'je', strana * strana, 'cm2')
{ "data": { "sessionMaterial": { "id": "session-material:2018/pyladies-hradec-podzim:hello-world:5", "title": "Proměnné", "html": "\n \n \n\n <h1>Čtverec</h1>\n<p>Teď se vrátíme do základní školy a zkusíme si napsat program,\nkterý vypočítá obsah a obvod čtverce, u kterého známe délku strany.</p>\n<p>Vytvoř si v editoru nový soubor a ulož ho do adresáře pro dnešní lekci\npod jménem <code>ctverec.py</code>.\nZkus do něj napsat program, který spočítá a vypíše obvod a obsah čtverce\nse stranou 356 cm.</p>\n<p>Po spuštění by se mělo vypsat něco jako:</p>\n<div class=\"highlight\"><pre><code>Obvod čtverce se stranou 356 cm je 1424 cm\nObsah čtverce se stranou 356 cm je 126736 cm2</code></pre></div><p>Pro připomenutí, obvod čtverce se stranou <var>a</var>\nse dá vypočítat jako <var>O</var> = 4<var>a</var>\na obsah jako <var>S</var> = <var>a</var>².</p>\n<div class=\"admonition note\"><p class=\"admonition-title\">Matematika!</p>\n<p>Doufám, že tenhle příklad nikoho neodradí,\nale „počítač“ je holt od slova <em>počítat</em>.\nNení třeba se děsit;\nna základy programování si vystačíme s matematickými\nznalostmi ze základní školy.</p>\n</div><p>Výsledky by měl spočítat Python; číslo 1424 nebo 126736 do programu nepiš.<br>\nJestli si nevíš rady, podívej se na program <code>printing.py</code>\nz <a href=\"/2018/pyladies-hradec-podzim/beginners/print/\">lekce o <code>print</code></a>, kde jeden řádek dělá něco podobného.</p>\n<p>Až budeš mít program hotový, nebo až budeš chtít vyzkoušet rozepsaný kousek,\nspusť ho:</p>\n<ul>\n<li>pokud ti už na začátku příkazové řádky nesvítí <code>(venv)</code>,\naktivuj si virtuální prostředí,</li>\n<li>pomocí <code>cd</code> donaviguj do adresáře s programem,</li>\n<li>zadej <code>python ctverec.py</code>.</li>\n</ul>\n<p>Funguje? Jestli ne, oprav ho a zkus to znovu!\nKdyž už jsi v příkazové řádce ve správném adresáři, stačí zadat <code>python ctverec.py</code>.\nAbys to nemusel/a celé psát, můžeš zkusit zmáčknout šipku nahoru,\n<kbd>↑</kbd>, a vrátit se tak k předchozímu příkazu.</p>\n<div class=\"solution\" id=\"solution-0\">\n <h3>Řešení</h3>\n <div class=\"solution-cover\">\n <a href=\"/2018/pyladies-hradec-podzim/beginners/variables/index/solutions/0/\"><span class=\"link-text\">Ukázat řešení</span></a>\n </div>\n <div class=\"solution-body\" aria-hidden=\"true\">\n <p>Program, který vypíše správný výsledek, může vypadat třeba takhle:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Obvod čtverce se stranou 356 cm je'</span><span class=\"p\">,</span> <span class=\"mi\">4</span> <span class=\"o\">*</span> <span class=\"mi\">356</span><span class=\"p\">,</span> <span class=\"s1\">'cm'</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Obsah čtverce se stranou 356 cm je'</span><span class=\"p\">,</span> <span class=\"mi\">356</span> <span class=\"o\">*</span> <span class=\"mi\">356</span><span class=\"p\">,</span> <span class=\"s1\">'cm2'</span><span class=\"p\">)</span>\n</pre></div>\n </div>\n</div><h2>Menší čtverec</h2>\n<p>Jestli všechno funguje, zkus změnit program tak,\naby počítal obsah a obvod čtverce o straně 123 cm.</p>\n<div class=\"solution\" id=\"solution-1\">\n <h3>Řešení</h3>\n <div class=\"solution-cover\">\n <a href=\"/2018/pyladies-hradec-podzim/beginners/variables/index/solutions/1/\"><span class=\"link-text\">Ukázat řešení</span></a>\n </div>\n <div class=\"solution-body\" aria-hidden=\"true\">\n <div class=\"highlight\"><pre><span></span><span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Obvod čtverce se stranou 123 cm je'</span><span class=\"p\">,</span> <span class=\"mi\">4</span> <span class=\"o\">*</span> <span class=\"mi\">123</span><span class=\"p\">,</span> <span class=\"s1\">'cm'</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Obsah čtverce se stranou 123 cm je'</span><span class=\"p\">,</span> <span class=\"mi\">123</span> <span class=\"o\">*</span> <span class=\"mi\">123</span><span class=\"p\">,</span> <span class=\"s1\">'cm2'</span><span class=\"p\">)</span>\n</pre></div>\n </div>\n</div><h2>Proměnné</h2>\n<p>Zvládneš to i pro stranu 3945 cm, 832 cm, 956 cm?\nBaví tě přepisování čísel?\nKdyby byl program delší (několikastránkový),\njak bys zajistil/a, že jedno z těch čísel nepřehlédneš?</p>\n<p>Existuje způsob, jak program napsat,\naniž bys musela pokaždé přepisovat všechna čísla:\nstranu čtverce si „pojmenuješ“ a potom používáš jenom její jméno.\nV Pythonu na pojmenovávání hodnot slouží <em>proměnné</em> (angl. <em>variables</em>).\nPoužívají se takto:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">strana</span> <span class=\"o\">=</span> <span class=\"mi\">123</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Obvod čtverce se stranou'</span><span class=\"p\">,</span> <span class=\"n\">strana</span><span class=\"p\">,</span> <span class=\"s1\">'je'</span><span class=\"p\">,</span> <span class=\"mi\">4</span> <span class=\"o\">*</span> <span class=\"n\">strana</span><span class=\"p\">,</span> <span class=\"s1\">'cm'</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Obsah čtverce se stranou'</span><span class=\"p\">,</span> <span class=\"n\">strana</span><span class=\"p\">,</span> <span class=\"s1\">'je'</span><span class=\"p\">,</span> <span class=\"n\">strana</span> <span class=\"o\">*</span> <span class=\"n\">strana</span><span class=\"p\">,</span> <span class=\"s1\">'cm2'</span><span class=\"p\">)</span>\n</pre></div><p>Neboli: napíšeš jméno, pak rovnítko a za rovnítkem výraz,\njehož hodnota se do proměnné <em>přiřadí</em>.\nKdyž potom napíšeš jméno proměnné ve výrazu,\npoužije se zapamatovaná hodnota.</p>\n<div class=\"admonition style-note\"><p>Je zvykem dát před i za rovnítko po jedné mezeře.</p>\n</div><p>To nás vede k jedné ze základních programátorských\nzásad: „neopakuj se“ (anglicky <em>Don't repeat yourself</em>, <abbr class=\"initialism\">DRY</abbr>).\nKdyž se někde opakuje stejná hodnota, stejný výraz\nnebo stejný kus kódu,\ndobrý programátor\nten kus programu pojmenuje\na několikrát pak použije jen jméno.\nČasto se totiž stává, že je program potřeba změnit –\nbuď je v něm chyba nebo se změní zadání.\nA potom je mnohem jednodušší změnu udělat jen na jednom místě.</p>\n<p>Kromě toho dobrá jména usnadňují čtení programu:\n<code>4 * strana</code> nepotřebuje komentář, ale\nu <code>4 * 183</code> není příliš jasné, co ta čísla znamenají.</p>\n<div class=\"admonition extra-activity\"><h2>Kruhy</h2>\n<p><em>Tohle je příklad navíc! Klidně ho přeskoč.</em></p>\n<p>Změna zadání!\nZkus program doplnit tak, aby kromě čtverce počítal\ni obvod a obsah kruhu se stejným poloměrem,\njakou má čtverec stranu.</p>\n<p>Pro připomenutí, obvod kruhu s poloměrem <var>r</var>\nje <var>o</var> = 2π<var>r</var>, obsah <var>S</var> = π<var>r</var>²\na π je zhruba 3,1415927.</p>\n<p>Všechna čísla, která matematici označují jen jedním\npísmenkem (klidně řeckým), vhodně pojmenuj.</p>\n</div><h2>Komentáře</h2>\n<p>Program si teď zpřehledníme <em>komentářem</em>.\nV Pythonu komentář začíná dvojkřížkem (<code>#</code>),\nza který můžeš napsat úplně cokoliv – až do konce\nřádku bude Python všechno ignorovat.</p>\n<p>Komentáře jsou důležité: programy nečte jen počítač, ale i lidé.\nDo komentářů si můžeš poznamenat, co dělá celý program,\nvysvětlit, jak funguje nějaká složitější část,\nnebo vyjasnit něco, co není jasné přímo z programu.</p>\n<p>Vždycky, když píšeš program, snaž se vžít do role někoho,\nkdo potom ten program bude číst,\na všechno, co by mohlo být nejasné, upřesnit v komentářích.\n(Nejčastěji to budeš číst sám/sama, třeba po několika měsících,\ntakže tím pomáháš sám/sama sobě!)</p>\n<div class=\"highlight\"><pre><span></span><span class=\"c1\"># Tento program počítá obvod a obsah čtverce.</span>\n\n<span class=\"n\">strana</span> <span class=\"o\">=</span> <span class=\"mi\">123</span> <span class=\"c1\"># v centimetrech</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Obvod čtverce se stranou'</span><span class=\"p\">,</span> <span class=\"n\">strana</span><span class=\"p\">,</span> <span class=\"s1\">'je'</span><span class=\"p\">,</span> <span class=\"mi\">4</span> <span class=\"o\">*</span> <span class=\"n\">strana</span><span class=\"p\">,</span> <span class=\"s1\">'cm'</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Obsah čtverce se stranou'</span><span class=\"p\">,</span> <span class=\"n\">strana</span><span class=\"p\">,</span> <span class=\"s1\">'je'</span><span class=\"p\">,</span> <span class=\"n\">strana</span> <span class=\"o\">*</span> <span class=\"n\">strana</span><span class=\"p\">,</span> <span class=\"s1\">'cm2'</span><span class=\"p\">)</span>\n</pre></div><div class=\"admonition style-note\"><p>Píšeš-li komentáš na stejný řádek jako kód, je zvykem před <code>#</code> dát dvě\nmezery (nebo i víc).\nZa <code>#</code> pak patří právě jedna.</p>\n</div><h2>Načítání vstupu</h2>\n<p>Nakonec se podíváme, jak zařídit, aby číslo nemuselo být\nzapsáno v programu, ale aby ho mohl uživatel zadat sám.</p>\n<p>Stejně jako když ses naučil/a používat <code>print</code>\ni tady jen řeknu, že na to použijeme <em>funkce</em>.\nDetaily si vysvětlíme později;\npro teď to budou kouzelná zaříkadla:</p>\n<ul>\n<li><p>Chceš-li načíst <strong>řetězec</strong> (text), použij:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">promenna</span> <span class=\"o\">=</span> <span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">'Zadej řetězec: '</span><span class=\"p\">)</span>\n</pre></div></li>\n<li><p>Chceš-li načíst <strong>celé číslo</strong>, použij:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">promenna</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">'Zadej číslo: '</span><span class=\"p\">))</span>\n</pre></div></li>\n<li><p>Chceš-li načíst <strong>desetinné číslo</strong>, použij:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">promenna</span> <span class=\"o\">=</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">'Zadej číslo: '</span><span class=\"p\">))</span>\n</pre></div></li>\n</ul>\n<p>Místo řetězce <code>'Zadej …'</code> se dá napsat i jiná výzva. \nA výsledek se samozřejmě dá uložit i do jiné proměnné než <code>promenna</code>.</p>\n<p>Hotový program může vypadat takto:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"c1\"># Tento program počítá obvod a obsah čtverce.</span>\n\n<span class=\"n\">strana</span> <span class=\"o\">=</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">'Zadej stranu čtverce v centimetrech: '</span><span class=\"p\">))</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Obvod čtverce se stranou'</span><span class=\"p\">,</span> <span class=\"n\">strana</span><span class=\"p\">,</span> <span class=\"s1\">'je'</span><span class=\"p\">,</span> <span class=\"mi\">4</span> <span class=\"o\">*</span> <span class=\"n\">strana</span><span class=\"p\">,</span> <span class=\"s1\">'cm'</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Obsah čtverce se stranou'</span><span class=\"p\">,</span> <span class=\"n\">strana</span><span class=\"p\">,</span> <span class=\"s1\">'je'</span><span class=\"p\">,</span> <span class=\"n\">strana</span> <span class=\"o\">*</span> <span class=\"n\">strana</span><span class=\"p\">,</span> <span class=\"s1\">'cm2'</span><span class=\"p\">)</span>\n</pre></div>\n\n\n " } } }