You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
> 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ší.
60
72
61
73
62
74
## Řetězce
@@ -90,9 +102,10 @@ Jinak by Python nepoznal, co je text a co jsou instrukce.
90
102
> [note]
91
103
> Pozor na mezeru! Když zadáš `'Já jsem'+'Ola'`, spojí se ti dvě slova
92
104
> 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
94
106
> písmenku.
95
107
> Když nedáš mezeru do uvozovek, nebude součástí řetězce.
108
+
>
96
109
> Zkus si:
97
110
>
98
111
> ```pycon
@@ -412,91 +425,229 @@ když chceme vypsat věci uvnitř funkce nebo na více řádcích.
412
425
413
426
## Seznamy
414
427
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
+
416
430
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.
418
432
419
433
{# Anglické termíny všude! #}
420
434
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:
422
438
439
+
```pycon
440
+
>>> [3, 42, 12, 19, 30, 59]
441
+
[3, 42, 12, 19, 30, 59]
423
442
```
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]
426
449
```
427
450
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?
429
455
456
+
{% filter solution %}
457
+
```pycon
458
+
>>> len(loterie)
459
+
6
430
460
```
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()
432
470
```
433
471
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:
435
474
475
+
```pycon
476
+
>>> print(loterie)
477
+
[3, 12, 19, 30, 42, 59]
436
478
```
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]
439
489
```
440
490
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:
442
495
496
+
```pycon
497
+
>>> loterie.append(199)
443
498
```
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]
445
505
```
446
506
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.
448
512
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]
449
520
```
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
452
530
```
453
531
454
-
Jak můžeš vidět, čísla v seznamu jsou nyní seřazena od nejnižší k nejvyšší hodnotě. Gratulujeme!
532
+
Ne, dostaneš druhý prvek.
455
533
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:
457
536
537
+
```pycon
538
+
>>> loterie[0]
539
+
42
458
540
```
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
462
558
```
559
+
Index 3 označuje čtvrtý prvek.
463
560
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
465
566
466
567
```
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
470
575
```
576
+
Prvek s indexem 7 v seznamu taky není.
471
577
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.
473
583
584
+
```pycon
585
+
>>> loterie[-2]
586
+
3
474
587
```
475
-
>>> print(lottery[0])
476
-
59
477
-
>>> print(lottery[1])
588
+
Index -2 označuje předposlední prvek.
589
+
590
+
```pycon
591
+
>>> loterie[-6]
478
592
42
479
593
```
594
+
Index -6 označuje šestý prvek od konce.
480
595
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
482
608
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í
484
610
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]
485
617
```
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
492
623
[42, 30, 19, 12, 3, 199]
493
624
```
494
625
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 %}
496
635
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 %}
498
650
499
-
Seznam všech dostupných metod pro seznam nalezneš v této kapitole Python dokumentace: https://docs.python.org/3/tutorial/datastructures.html
0 commit comments