Skip to content

Commit 95514d0

Browse files
committed
More intro rewriting, mainly on lists
1 parent adee4ee commit 95514d0

File tree

1 file changed

+197
-46
lines changed
  • lessons/fast-track/python-basics

1 file changed

+197
-46
lines changed

lessons/fast-track/python-basics/index.md

Lines changed: 197 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -43,20 +43,32 @@ Tyhle symboly se odborně nazývají *operátory*.
4343
``` pycon
4444
>>> 4 * 5
4545
20
46-
>>> 40 / 2
47-
20.0
46+
>>> 5 / 2
47+
2.5
4848
```
4949

50+
> [note]
51+
> V tomto úvodu budeme zadávat jen celá čísla.
52+
> Dělením ale může vzniknout třeba dva a půl
53+
> (tedy `2.5` – Python používá desetinnou *tečku*).
54+
> Z důvodů, do kterých teď nebudeme zabíhat, se desetinné pozice po dělení
55+
> objeví i když vyjde celé číslo:
56+
> ``` pycon
57+
> >>> 4 / 2
58+
> 2.0
59+
> ```
60+
5061
{# XXX:
5162
Kolik je
5263
<math mode="display" style="display:inline-box;" xmlns="http://www.w3.org/1998/Math/MathML"><mfrac><mrow><mn>123</mn> + <mn>456</mn></mrow><mrow><mn>789</mn></mrow></mfrac></math>?
5364
#}
5465
5566
> [style-note]
56-
> Mezery mezi čísly a znamínkem nejsou nutné: `4*5` nebo `4 * 5` dělá
57-
> to samé.
58-
> Je ale zvykem používat jednu mezeru – tak jako to vidíš v materiálech.
59-
> Kód je tak čitelnější.
67+
> Mezery mezi čísly a znamínkem nejsou nutné: `4*5` i `4 * 5` dělá
68+
> to samé co `4 * 5`.
69+
> Je ale zvykem psát kolem operátoru jednu mezeru z každé strany – tak jako
70+
> v těchto materiálech.
71+
> Kód je pak čitelnější.
6072
6173
6274
## Řetězce
@@ -90,9 +102,10 @@ Jinak by Python nepoznal, co je text a co jsou instrukce.
90102
> [note]
91103
> Pozor na mezeru! Když zadáš `'Já jsem'+'Ola'`, spojí se ti dvě slova
92104
> dohromady.
93-
> Počítač považuje mezeru za znak, a chová se k ní stejně jako k jakémukoli
105+
> Počítač považuje i mezeru za *znak*; chová se k ní stejně jako k jakémukoli
94106
> písmenku.
95107
> Když nedáš mezeru do uvozovek, nebude součástí řetězce.
108+
>
96109
> Zkus si:
97110
>
98111
> ``` pycon
@@ -412,91 +425,229 @@ když chceme vypsat věci uvnitř funkce nebo na více řádcích.
412425

413426
## Seznamy
414427

415-
Vedle řetězců a celých čísel má Python další druhy různých typů hodnot.
428+
Vedle řetězců a celých čísel má Python další druhy hodnot.
429+
416430
Teď se podíváme na jeden, který se nazývá *seznam* (anglicky *list*).
417-
Seznamy jsou přesně to, co si myslíš, že jsou: jsou to objekty, které obsahují seznam ostatních objektů :)
431+
To je hodnota, která v sobě obsahuje jiné hodnoty.
418432

419433
{# Anglické termíny všude! #}
420434

421-
Nestyď se a vytvoř seznam:
435+
Seznamy se zadávají tak, že dáš několik hodnot, oddělených čárkami,
436+
do hranatých závorek.
437+
Zkus si vytvořit třeba seznam čísel z loterie:
422438

439+
``` pycon
440+
>>> [3, 42, 12, 19, 30, 59]
441+
[3, 42, 12, 19, 30, 59]
423442
```
424-
>>> []
425-
[]
443+
444+
Abys s takovým seznamem mohl{{a}} pracovat,
445+
ulož si ho do proměnné:
446+
447+
``` pycon
448+
>>> loterie = [3, 42, 12, 19, 30, 59]
426449
```
427450

428-
Ano, tento seznam je prázdný. Není moc užitečný, že? Pojďme vytvořit seznam čísel z loterie. Nechceme se stále opakovat, takže seznam uložíme také do proměnné:
451+
Dobrá, máme seznam! Co s ním můžeme dělat?
452+
Podíváme se, kolik čísel v seznamu je.
453+
Dá se na to použít funkce, kterou už znáš.
454+
Tipneš si, která to je?
429455

456+
{% filter solution %}
457+
``` pycon
458+
>>> len(loterie)
459+
6
430460
```
431-
>>> lottery = [3, 42, 12, 19, 30, 59]
461+
462+
Funkce `len()` umí zjistit nejen délku řetězce, ale i délku seznamu – tedy
463+
počet jeho prvků.
464+
{% endfilter %}
465+
466+
Teď si zkus seznam seřadit. Na to existuje metoda `sort`:
467+
468+
``` pycon
469+
>>> loterie.sort()
432470
```
433471

434-
Dobrá máme seznam! Co s ním můžeme dělat? Uvidíme, kolik čísel loterie je v seznamu. Máš nějakou představu, jakou funkci bys měla použít? Už to přeci víš!
472+
Tato funkce nic nevrátí, jen změní pořadí čísel v seznamu.
473+
Znovu si ho vypiš, ať vidíš co se stalo:
435474

475+
``` pycon
476+
>>> print(loterie)
477+
[3, 12, 19, 30, 42, 59]
436478
```
437-
>>> len(lottery)
438-
6
479+
480+
Čísla v seznamu jsou nyní seřazena od nejnižší k nejvyšší hodnotě.
481+
482+
Podobně funguje metoda `reverse`, která obrátí pořadí prvků.
483+
Vyzkoušej si ji!
484+
485+
``` pycon
486+
>>> loterie.reverse()
487+
>>> print(loterie)
488+
[59, 42, 30, 19, 12, 3]
439489
```
440490

441-
Ano! Funkce `len()` ti zjistí počet objektů v seznamu. Šikovné, že? Možná bychom je teď měli zkusit seřadit:
491+
Pokud chceš do svého něco přidat seznamu, můžeš to provést pomocí metody
492+
`append`.
493+
Ale pozor! Tahle metoda potřebuje vědět co má do seznamu přidat
494+
Nová hodnota se zadává do závorek:
442495

496+
``` pycon
497+
>>> loterie.append(199)
443498
```
444-
>>> lottery.sort()
499+
500+
Metoda opět nic nevrací, takže je potřeba seznam pro kontrolu vypsat:
501+
502+
``` pycon
503+
>>> print(loterie)
504+
[59, 42, 30, 19, 12, 3, 199]
445505
```
446506

447-
Tato funkce nic nevrátí, jen změní pořadí čísel v seznamu. Pojďme ho znovu vypsat a uvidíme co se stalo:
507+
### Vybírání prvků
508+
509+
Když se budeš chtít na jednu věc ze seznamu podívat podrobněji,
510+
přijde vhod možnost vybrat si konkrétní prvek.
511+
Na to se v Pythonu používají hranaté závorky.
448512

513+
{# XXX: MCQ #}
514+
515+
Chceš-li vybrat prvek, zadej jméno seznamu a hned za ním hranaté závorky
516+
s pořadovým číslem prvku, který chceš:
517+
518+
``` pycon
519+
>>> loterie[1]
449520
```
450-
>>> print(lottery)
451-
[3, 12, 19, 30, 42, 59]
521+
522+
Dostaneš první prvek?
523+
524+
{% filter solution %}
525+
``` pycon
526+
>>> loterie
527+
[59, 42, 30, 19, 12, 3, 199]
528+
>>> loterie[1]
529+
42
452530
```
453531

454-
Jak můžeš vidět, čísla v seznamu jsou nyní seřazena od nejnižší k nejvyšší hodnotě. Gratulujeme!
532+
Ne, dostaneš druhý prvek.
455533

456-
Můžeme také zkusit obrátit pořadí? Udělejme to!
534+
Programátoři počítají od nuly.
535+
Chceš li tedy první prvek, popros Python o prvek číslo nula:
457536

537+
``` pycon
538+
>>> loterie[0]
539+
42
458540
```
459-
>>> lottery.reverse()
460-
>>> print(lottery)
461-
[59, 42, 30, 19, 12, 3]
541+
542+
Je to zpočátku divné, ale dá se na to zvyknout.
543+
{% endfilter %}
544+
545+
Číslu prvku se také říká *index* a procesu vybírání prvků *indexování*.
546+
547+
Zkus si indexování s dalšími indexy: 3, 100, 7, -1, -2, -6 nebo -100.
548+
Pokus se předpovědět výsledek před zadáním příkazu.
549+
Jak ti to půjde?
550+
551+
{% filter solution %}
552+
``` pycon
553+
>>> loterie
554+
[59, 42, 30, 19, 12, 3, 199]
555+
556+
>>> loterie[3]
557+
19
462558
```
559+
Index 3 označuje čtvrtý prvek.
463560

464-
Snadné, že? Pokud chceš něco přidat do svého seznamu, můžeš to provést zadáním tohoto příkazu:
561+
``` pycon
562+
>>> loterie[7]
563+
Traceback (most recent call last):
564+
File "<stdin>", line 1, in <module>
565+
IndexError: list index out of range
465566

466567
```
467-
>>> lottery.append(199)
468-
>>> print(lottery)
469-
[59, 42, 30, 19, 12, 3, 199]
568+
Prvek s indexem 100 v seznamu není – nastane chyba.
569+
570+
``` pycon
571+
>>> loterie[1000]
572+
Traceback (most recent call last):
573+
File "<stdin>", line 1, in <module>
574+
IndexError: list index out of range
470575
```
576+
Prvek s indexem 7 v seznamu taky není.
471577

472-
Pokud chceš zobrazit pouze první číslo, můžeš to udělat pomocí **indexů**. Index je číslo, které říká, kde se v seznamu položka najde. Programátoři preferují počítání od 0, takže první objekt v seznamu je v indexu 0, druhý je v indexu 1 a tak dále. Zkus toto:
578+
``` pycon
579+
>>> loterie[-1]
580+
199
581+
```
582+
Index -1 označuje *poslední* prvek.
473583

584+
``` pycon
585+
>>> loterie[-2]
586+
3
474587
```
475-
>>> print(lottery[0])
476-
59
477-
>>> print(lottery[1])
588+
Index -2 označuje předposlední prvek.
589+
590+
``` pycon
591+
>>> loterie[-6]
478592
42
479593
```
594+
Index -6 označuje šestý prvek od konce.
480595

481-
Jak vidíš, pro přístup k různým objektům ve tvém seznamu použiješ jméno seznamu a index objektu uvnitř hranatých závorek.
596+
``` pycon
597+
>>> loterie[-100]
598+
Traceback (most recent call last):
599+
File "<stdin>", line 1, in <module>
600+
IndexError: list index out of range
601+
```
602+
Stý prvek od konce v seznamu není. Nastane chyba.
603+
{% endfilter %}
604+
605+
### Řezání
606+
607+
XXX Slicing
482608

483-
Chceš-li odstranit něco ze svého seznamu, budeš muset použít **indexy**, jak jsme se dozvěděli výše, a příkaz `pop()`. Zkusme to, co jsme se naučily dříve; budeme odstraňovat první číslo našeho seznamu.
609+
### Odstraňování
484610

611+
Chceš-li ze seznamu něco odstranit, můžeš opět použít indexy.
612+
Tentokrát s příkazem `del`.
613+
Následující kód odstraní počáteční číslo seznamu, tedy prvek číslo 0:
614+
615+
``` pycon
616+
>>> del loterie[0]
485617
```
486-
>>> print(lottery)
487-
[59, 42, 30, 19, 12, 3, 199]
488-
>>> print(lottery[0])
489-
59
490-
>>> lottery.pop(0)
491-
>>> print(lottery)
618+
619+
Pak si seznam opět vypiš. Kousek chybí!
620+
621+
``` pycon
622+
>>> loterie
492623
[42, 30, 19, 12, 3, 199]
493624
```
494625

495-
Funguje to všechno skvěle!
626+
Zkusíš odstranit poslední prvek?
627+
628+
{% filter solution %}
629+
``` pycon
630+
>>> del loterie[-1]
631+
>>> loterie
632+
[42, 30, 19, 12, 3]
633+
```
634+
{% endfilter %}
496635

497-
Pro další zábavu zkus nějaké jiné indexy: 6, 7, 1000, -1, -6 nebo -1000. Pokus se předpovědět výsledek před zadáním příkazu. Jsou výsledky správné?
636+
A co prostřední tři?
637+
Zkus si nejdřív vypsat, které to jsou, a pak teprve použít `del`.
638+
639+
{% filter solution %}
640+
``` pycon
641+
>>> loterie
642+
[42, 30, 19, 12, 3]
643+
>>> loterie[1:-1]
644+
[30, 19, 12]
645+
>>> del loterie[1:-1]
646+
>>> loterie
647+
[42, 3]
648+
```
649+
{% endfilter %}
498650

499-
Seznam všech dostupných metod pro seznam nalezneš v této kapitole Python dokumentace: https://docs.python.org/3/tutorial/datastructures.html
500651

501652
## Slovníky
502653

0 commit comments

Comments
 (0)