Proměnné

Důležitým konceptem v programování jsou proměnné. Proměnná není nic jiného než pojmenování něčeho, co budeme chtít použít později. Programátoři proměnné používají k ukládání dat, aby byl jejich kód čitelnější a nemuseli si pamatovat konkrétní hodnoty.

Řekněme, že chceš vytvořit novou proměnnou s názvem jmeno. To se zapíše takto:

>>> jmeno = 'Ola'

Proměnná jmeno teď bude mít hodnotu 'Ola'.

Jak sis mohl/a všimnout, tenhle příkaz nic nevrátil – Python nevypsal žádný výslede. Jak tedy víme, že proměnná skutečně existuje?

Zadej samotné jméno proměnné (tedy jmeno) a stiskni Enter:

>>> jmeno
'Ola'

Zkus si nastavit i jinou proměnnou – třeba svoji oblíbenou barvu:

>>> barva = 'modrá'
>>> barva
'modrá'

Kdykoli můžeš do proměnné přiřadit znovu, a změnit tak co se pod daným jménem skrývá:

>>> jmeno
'Ola'
>>> jmeno = "Soňa"
>>> jmeno
'Soňa'

Můžeš ji také použít ve funkcích:

>>> len(jmeno)
4

Super, ne? Proměnná může obsahovat cokoliv, například také čísla! Zkus tohle:

>>> sirka = 4
>>> delka = 6
>>> sirka * delka
24

Ale co když použiješ nesprávné jméno? Dokážeš odhadnout, co se stane?

Řešení

Chyba!

Python má různé typy chyb. Tato se nazývá NameError. Python ti vrátí tuto chybu, pokud se pokusíš použít proměnnou, která dosud nebyla nastavena. Pokud někdy dojde k této chybě, zkontroluj svůj kód, abys zjistil/a, jestli jsi někde neudělal/a překlep.

Jména proměnných

Profesionální programátoři pojmenovávají proměnné anglicky, aby jim rozuměli co nejvíc kolegů po celém světě. Ze začátku ale doporučujeme češtinu – je tak jasnější, která jména si můžeš zvolit sám/sama (např. barva) a která jsou z Pythonu (např. upper). Nevýhoda je, že si časem budeš muset odvyknout.

Každopádně je dobré nepoužívat diakritiku a vyhnout se velkým pímenům: místo Jméno použij jen jmeno.

Která z těchto jmen ti Python dovolí použít jako proměnnou?

  • tlacitko5
  • 5tlacitko
  • oblibena barva
  • oblibena-barva

Řešení

Shrnutí

  • Proměnné jsou jména pro hodnoty.
  • Přiřazením (=) můžeš proměnnou nastavit na jakoukoli hodnotu.
  • Proměnné pojmenováváme malými písmenky bez diakritiky.
  • Na oddělení slov v rámci jména můžeme použít podtržítko.
{
  "data": {
    "sessionMaterial": {
      "id": "session-material:2018/snake-brno-codeweek:intro:4",
      "title": "Proměnné",
      "html": "\n          \n    \n\n    <h1>Prom&#x11B;nn&#xE9;</h1>\n<p>D&#x16F;le&#x17E;it&#xFD;m konceptem v&#xA0;programov&#xE1;n&#xED; jsou <em>prom&#x11B;nn&#xE9;</em>.\nProm&#x11B;nn&#xE1; nen&#xED; nic jin&#xE9;ho ne&#x17E; <em>pojmenov&#xE1;n&#xED;</em> n&#x11B;&#x10D;eho,\nco budeme cht&#xED;t pou&#x17E;&#xED;t pozd&#x11B;ji.\nProgram&#xE1;to&#x159;i prom&#x11B;nn&#xE9; pou&#x17E;&#xED;vaj&#xED; k ukl&#xE1;d&#xE1;n&#xED; dat,\naby byl jejich k&#xF3;d &#x10D;iteln&#x11B;j&#x161;&#xED; a nemuseli si pamatovat konkr&#xE9;tn&#xED; hodnoty.</p>\n<p>&#x158;ekn&#x11B;me, &#x17E;e chce&#x161; vytvo&#x159;it novou prom&#x11B;nnou s&#xA0;n&#xE1;zvem <code>jmeno</code>.\nTo se zap&#xED;&#x161;e takto:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">jmeno</span> <span class=\"o\">=</span> <span class=\"s1\">&apos;Ola&apos;</span>\n</pre></div><p>Prom&#x11B;nn&#xE1; <code>jmeno</code> te&#x10F; bude m&#xED;t hodnotu <code>&apos;Ola&apos;</code>.</p>\n<p>Jak sis mohl/a v&#x161;imnout, tenhle p&#x159;&#xED;kaz nic nevr&#xE1;til &#x2013; Python nevypsal\n&#x17E;&#xE1;dn&#xFD; v&#xFD;slede.\nJak tedy v&#xED;me, &#x17E;e prom&#x11B;nn&#xE1; skute&#x10D;n&#x11B; existuje?</p>\n<p>Zadej samotn&#xE9; jm&#xE9;no prom&#x11B;nn&#xE9; (tedy <code>jmeno</code>) a stiskni <kbd>Enter</kbd>:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">jmeno</span>\n<span class=\"go\">&apos;Ola&apos;</span>\n</pre></div><p>Zkus si nastavit i jinou prom&#x11B;nnou &#x2013; t&#x159;eba svoji obl&#xED;benou barvu:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">barva</span> <span class=\"o\">=</span> <span class=\"s1\">&apos;modr&#xE1;&apos;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">barva</span>\n<span class=\"go\">&apos;modr&#xE1;&apos;</span>\n</pre></div><p>Kdykoli m&#x16F;&#x17E;e&#x161; do prom&#x11B;nn&#xE9; p&#x159;i&#x159;adit znovu, a zm&#x11B;nit tak co se pod\ndan&#xFD;m jm&#xE9;nem skr&#xFD;v&#xE1;:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">jmeno</span>\n<span class=\"go\">&apos;Ola&apos;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">jmeno</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;So&#x148;a&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">jmeno</span>\n<span class=\"go\">&apos;So&#x148;a&apos;</span>\n</pre></div><p>M&#x16F;&#x17E;e&#x161; ji tak&#xE9; pou&#x17E;&#xED;t ve funkc&#xED;ch:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">jmeno</span><span class=\"p\">)</span>\n<span class=\"go\">4</span>\n</pre></div><p>Super, ne?\nProm&#x11B;nn&#xE1; m&#x16F;&#x17E;e obsahovat cokoliv, nap&#x159;&#xED;klad tak&#xE9; &#x10D;&#xED;sla!\nZkus tohle:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">sirka</span> <span class=\"o\">=</span> <span class=\"mi\">4</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">delka</span> <span class=\"o\">=</span> <span class=\"mi\">6</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">sirka</span> <span class=\"o\">*</span> <span class=\"n\">delka</span>\n<span class=\"go\">24</span>\n</pre></div><p>Ale co kdy&#x17E; pou&#x17E;ije&#x161; nespr&#xE1;vn&#xE9; jm&#xE9;no? Dok&#xE1;&#x17E;e&#x161; odhadnout, co se stane?</p>\n<div class=\"solution\" id=\"solution-0\">\n    <h3>&#x158;e&#x161;en&#xED;</h3>\n    <div class=\"solution-cover\">\n        <a href=\"/2018/snake-brno-codeweek/fast-track/variables/index/solutions/0/\"><span class=\"link-text\">Uk&#xE1;zat &#x159;e&#x161;en&#xED;</span></a>\n    </div>\n    <div class=\"solution-body\" aria-hidden=\"true\">\n        <div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">mesto</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Tokyo&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">mmesto</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n  File <span class=\"nb\">&quot;&lt;stdin&gt;&quot;</span>, line <span class=\"m\">1</span>, in <span class=\"n\">&lt;module&gt;</span>\n<span class=\"gr\">NameError</span>: <span class=\"n\">name &apos;mmesto&apos; is not defined</span>\n</pre></div>\n    </div>\n</div><p>Chyba!</p>\n<p>Python m&#xE1; r&#x16F;zn&#xE9; typy chyb. Tato se naz&#xFD;v&#xE1; <code>NameError</code>.\nPython ti vr&#xE1;t&#xED; tuto chybu, pokud se pokus&#xED;&#x161; pou&#x17E;&#xED;t prom&#x11B;nnou,\nkter&#xE1; dosud nebyla nastavena.\nPokud n&#x11B;kdy dojde k t&#xE9;to chyb&#x11B;, zkontroluj sv&#x16F;j k&#xF3;d, abys zjistil/a,\njestli jsi n&#x11B;kde neud&#x11B;lal/a p&#x159;eklep.</p>\n<h2>Jm&#xE9;na prom&#x11B;nn&#xFD;ch</h2>\n<p>Profesion&#xE1;ln&#xED; program&#xE1;to&#x159;i pojmenov&#xE1;vaj&#xED; prom&#x11B;nn&#xE9; anglicky,\naby jim rozum&#x11B;li co nejv&#xED;c koleg&#x16F; po cel&#xE9;m sv&#x11B;t&#x11B;.\nZe za&#x10D;&#xE1;tku ale doporu&#x10D;ujeme &#x10D;e&#x161;tinu &#x2013; je tak jasn&#x11B;j&#x161;&#xED;, kter&#xE1; jm&#xE9;na\nsi m&#x16F;&#x17E;e&#x161; zvolit s&#xE1;m/sama (nap&#x159;. <code>barva</code>) a kter&#xE1; jsou\nz&#xA0;Pythonu (nap&#x159;. <code>upper</code>).\nNev&#xFD;hoda je, &#x17E;e si &#x10D;asem bude&#x161; muset odvyknout.</p>\n<p>Ka&#x17E;dop&#xE1;dn&#x11B; je dobr&#xE9; nepou&#x17E;&#xED;vat diakritiku a vyhnout se velk&#xFD;m p&#xED;men&#x16F;m:\nm&#xED;sto <code>Jm&#xE9;no</code> pou&#x17E;ij jen <code>jmeno</code>.</p>\n<p>Kter&#xE1; z&#xA0;t&#x11B;chto jmen ti Python dovol&#xED; pou&#x17E;&#xED;t jako prom&#x11B;nnou?</p>\n<ul>\n<li><code>tlacitko5</code></li>\n<li><code>5tlacitko</code></li>\n<li><code>oblibena barva</code></li>\n<li><code>oblibena-barva</code></li>\n</ul>\n<div class=\"solution\" id=\"solution-1\">\n    <h3>&#x158;e&#x161;en&#xED;</h3>\n    <div class=\"solution-cover\">\n        <a href=\"/2018/snake-brno-codeweek/fast-track/variables/index/solutions/1/\"><span class=\"link-text\">Uk&#xE1;zat &#x159;e&#x161;en&#xED;</span></a>\n    </div>\n    <div class=\"solution-body\" aria-hidden=\"true\">\n        <ul>\n<li><code>tlacitko5</code> ano</li>\n<li><code>5tlacitko</code> ne: jm&#xE9;na mus&#xED; za&#x10D;&#xED;nat p&#xED;smenkem</li>\n<li><code>oblibena barva</code> ne: to nen&#xED; jedno jm&#xE9;no, ale dv&#x11B;!</li>\n<li><code>oblibena-barva</code> taky ne: je to v&#xFD;raz <code>oblibena</code> m&#xED;nus <code>barva</code></li>\n</ul>\n<p>Kdybys pot&#x159;eboval/a ve jm&#xE9;nu v&#xED;ce slov, pou&#x17E;ij podtr&#x17E;&#xED;tko: nap&#x159;.\n<code>oblibena_barva</code>.</p>\n    </div>\n</div><h2>Shrnut&#xED;</h2>\n<ul>\n<li><strong>Prom&#x11B;nn&#xE9;</strong> jsou jm&#xE9;na pro hodnoty.</li>\n<li>P&#x159;i&#x159;azen&#xED;m (<code>=</code>) m&#x16F;&#x17E;e&#x161; prom&#x11B;nnou nastavit na jakoukoli hodnotu.</li>\n<li>Prom&#x11B;nn&#xE9; pojmenov&#xE1;v&#xE1;me <strong>mal&#xFD;mi p&#xED;smenky</strong> bez diakritiky.</li>\n<li>Na odd&#x11B;len&#xED; slov v&#xA0;r&#xE1;mci jm&#xE9;na m&#x16F;&#x17E;eme pou&#x17E;&#xED;t <strong>podtr&#x17E;&#xED;tko</strong>.</li>\n</ul>\n\n\n        "
    }
  }
}