Převádění typů

Pojď zkusit něco nového: zjistit délku čísla stejným způsobem, jakým jsme zjišťovali délku našeho jména. Zadej len(304023) a stiskni Enter:

>>> len(304023)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()

Zobrazila se ti naše první chyba! Ta říká, že objekty typu int (zkratka anglického integer, celé číslo) nemají délku. Tak co můžeme udělat teď? Možná můžeme zkusit napsat naše číslo jako řetězec? Řetězce mají délky, že?

>>> len("304023")
6

Existuje i funkce, která převede číslo na řetězec. Jmenuje se str:

>>> str(304023)
"304023"
>>> len(str(304023))
6

Podobně funkce int převádí věci na celá čísla:

>>> int("304023")

Můžeš převést čísla na text, ale nemůžeš jen tak převést text na čísla. Co by se stalo, kdyby ses pokusil/a na číslo převést řetězec, ve kterém nejsou číslice?

Řešení

{
  "data": {
    "sessionMaterial": {
      "id": "session-material:2018/snake-brno-codeweek:intro:3",
      "title": "Převádění typů",
      "html": "\n          \n    \n\n    <h1>P&#x159;ev&#xE1;d&#x11B;n&#xED; typ&#x16F;</h1>\n<p>Poj&#x10F; zkusit n&#x11B;co nov&#xE9;ho: zjistit d&#xE9;lku &#x10D;&#xED;sla stejn&#xFD;m zp&#x16F;sobem,\njak&#xFD;m jsme zji&#x161;&#x165;ovali d&#xE9;lku na&#x161;eho jm&#xE9;na.\nZadej <code>len(304023)</code> a stiskni <kbd>Enter</kbd>:</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=\"mi\">304023</span><span class=\"p\">)</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\">TypeError</span>: <span class=\"n\">object of type &apos;int&apos; has no len()</span>\n</pre></div><p>Zobrazila se ti na&#x161;e prvn&#xED; chyba!\nTa &#x159;&#xED;k&#xE1;, &#x17E;e objekty typu <code>int</code> (zkratka anglick&#xE9;ho <em>integer</em>, cel&#xE9; &#x10D;&#xED;slo)\nnemaj&#xED; d&#xE9;lku.\nTak co m&#x16F;&#x17E;eme ud&#x11B;lat te&#x10F;?\nMo&#x17E;n&#xE1; m&#x16F;&#x17E;eme zkusit napsat na&#x161;e &#x10D;&#xED;slo jako &#x159;et&#x11B;zec?\n&#x158;et&#x11B;zce maj&#xED; d&#xE9;lky, &#x17E;e?</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=\"s2\">&quot;304023&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">6</span>\n</pre></div><p>Existuje i funkce, kter&#xE1; <em>p&#x159;evede</em> &#x10D;&#xED;slo na &#x159;et&#x11B;zec. Jmenuje se <code>str</code>:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"mi\">304023</span><span class=\"p\">)</span>\n<span class=\"go\">&quot;304023&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"mi\">304023</span><span class=\"p\">))</span>\n<span class=\"go\">6</span>\n</pre></div><p>Podobn&#x11B; funkce <code>int</code> p&#x159;ev&#xE1;d&#xED; v&#x11B;ci na cel&#xE1; &#x10D;&#xED;sla:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"s2\">&quot;304023&quot;</span><span class=\"p\">)</span>\n</pre></div><p>M&#x16F;&#x17E;e&#x161; p&#x159;ev&#xE9;st &#x10D;&#xED;sla na text, ale nem&#x16F;&#x17E;e&#x161; jen tak p&#x159;ev&#xE9;st text na &#x10D;&#xED;sla.\nCo by se stalo, kdyby ses pokusil/a na &#x10D;&#xED;slo p&#x159;ev&#xE9;st &#x159;et&#x11B;zec, ve kter&#xE9;m\nnejsou &#x10D;&#xED;slice?</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/conversion/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=\"nb\">int</span><span class=\"p\">(</span><span class=\"s1\">&apos;hello&apos;</span><span class=\"p\">)</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\">ValueError</span>: <span class=\"n\">invalid literal for int() with base 10: &apos;ahoj&apos;</span>\n</pre></div>\n    </div>\n</div>\n\n\n        "
    }
  }
}