Skip to content

Commit a37376e

Browse files
authored
Rework lessons on turtle & loops
pyvec#626
2 parents ef6da0d + 3024609 commit a37376e

File tree

5 files changed

+363
-68
lines changed

5 files changed

+363
-68
lines changed

courses/pyladies/info.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ plan:
4242
- lesson: beginners/basic-functions
4343
- lesson: intro/turtle
4444
- lesson: beginners/while
45+
- lesson: beginners/reassignment
4546
- title: Tahák s užitečnými funkcemi
4647
url: https://pyvec.github.io/cheatsheets/basic-functions/basic-functions-cs.pdf
4748
type: cheatsheet
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
# Přepisování proměnných
2+
3+
Už víš, že hodnota proměnné se může v čase měnit:
4+
když přiřadíš do už existující proměnné, stará hodnota se zahodí
5+
a použije se nová.
6+
7+
```python
8+
oblibena_barva = 'modrá'
9+
print(oblibena_barva)
10+
11+
oblibena_barva = 'žlutá'
12+
print(oblibena_barva)
13+
14+
# Na tomhle místě programu už se k řetězci 'modrá' nedostaneš...
15+
```
16+
17+
Trošku zajímavější (nebo složitější?) je situace, kdy hodnotu proměnné
18+
přepíšeš výrazem, který používá tu stejnou proměnnou.
19+
Zkus si to:
20+
21+
22+
```python
23+
oblibene_cislo = 7
24+
print(oblibene_cislo)
25+
26+
oblibene_cislo = oblibene_cislo * 6
27+
print(oblibene_cislo)
28+
```
29+
30+
Co se tady děje?
31+
Python vyhodnotí výraz za `=` se *starou* hodnotou proměnné, a teprve když
32+
zná výsledek, přiřadí ho (a na starou hodnotu zapomene).
33+
V našem příkladu postupuje takhle:
34+
35+
```python
36+
oblibene_cislo = oblibene_cislo * 6
37+
# ╰──────────┬─╯
38+
oblibene_cislo = 7 * 6
39+
# ╰─┬───╯
40+
oblibene_cislo = 42
41+
# ▲ |
42+
# ╰──────────────────╯
43+
```
44+
45+
46+
47+
## Přepisování v cyklu
48+
49+
Ještě „zajímavější“ je použít podobné přepisování v cyklu.
50+
51+
Zopakuj si, že `for` cyklus jako:
52+
53+
```python
54+
print("Tady je pár čísel:")
55+
56+
for cislo in 8, 45, 9, 21:
57+
print(cislo)
58+
```
59+
60+
opakuje *přiřazení do proměnné* a *tělo cyklu*; můžeš si ho rozepsat jako:
61+
62+
```python
63+
print("Tady je pár čísel:")
64+
65+
cislo = 8
66+
print(cislo)
67+
68+
cislo = 45
69+
print(cislo)
70+
71+
cislo = 9
72+
print(cislo)
73+
74+
cislo = 21
75+
print(cislo)
76+
```
77+
78+
Zkus podobně rozepsat cyklus v následujícím programu
79+
a popsat, co se děje:
80+
81+
```python
82+
celkem = 0
83+
84+
for delka_trasy in 8, 45, 9, 21:
85+
print('Jdu', delka_trasy, 'km do další vesnice.')
86+
celkem = celkem + delka_trasy
87+
88+
print('Celkem jsem ušla', celkem, 'km')
89+
```
90+
91+
92+
{% filter solution %}
93+
```python
94+
celkem = 0
95+
96+
delka_trasy = 8
97+
print('Jdu', delka_trasy, 'km do další vesnice.')
98+
celkem = celkem + delka_trasy
99+
100+
delka_trasy = 45
101+
print('Jdu', delka_trasy, 'km do další vesnice.')
102+
celkem = celkem + delka_trasy
103+
104+
delka_trasy = 9
105+
print('Jdu', delka_trasy, 'km do další vesnice.')
106+
celkem = celkem + delka_trasy
107+
108+
delka_trasy = 21
109+
print('Jdu', delka_trasy, 'km do další vesnice.')
110+
celkem = celkem + delka_trasy
111+
112+
print('Celkem jsem ušla', celkem, 'km')
113+
```
114+
115+
Příkaz `celkem = celkem + delka_trasy` vypočítá hodnotu
116+
`celkem + delka_trasy`, tedy přičte aktuální číslo k součtu.
117+
Výsledek uloží opět do proměnné `celkem`.
118+
Nová hodnota `celkem` se pak použije v dalším průchodu cyklem.
119+
120+
Na začátku je `celkem` 0 a na konci se celkový součet všech čísel vypíše.
121+
{% endfilter %}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
title: Přepisování proměnných
2+
style: md
3+
attribution: Pro PyLadies Brno napsal Petr Viktorin, 2014-2019.
4+
license: cc-by-sa-40

lessons/beginners/while/index.md

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
# While
22

3-
Kromě cyklu `for` máme ještě druhý typ cyklu uvozený příkazem `while`
4-
(angl. *dokud*).
3+
Kromě cyklu `for` máme ještě druhý typ cyklu: `while` (angl. *dokud*).
54
Na rozdíl od `for`, kde *předem známe počet opakování*,
65
se while používá, když cyklus závisí na nějaké podmínce.
7-
Tělo cyklu se opakuje, dokud je podmínka splněna. Například:
6+
Tělo cyklu se opakuje, dokud je podmínka splněna.
7+
Zkus si naprogramovat následující postup pro zubaře:
8+
9+
* Řekni, aby pacient řekl „Ááá“, a počkej na odpověď
10+
* Dokud pacient *ne*řekl „Ááá“:
11+
* Vynadej pacientovi
12+
* Znovu počkej na odpověď
813

914
```python
1015
odpoved = input('Řekni Ááá! ')
@@ -17,6 +22,10 @@ Ale pozor! Je velice jednoduché napsat cyklus,
1722
jehož podmínka bude splněna vždycky.
1823
Takový cyklus se bude opakovat donekonečna.
1924

25+
* Dokud je pravda pravdivá:
26+
* Napiš náhodné číslo
27+
* Napiš hlášku
28+
2029
```python
2130
from random import randrange
2231

@@ -47,7 +56,7 @@ print('Hotovo, ani to nebolelo.')
4756
```
4857

4958
Příkaz `break` se dá použít jenom v cyklu (`while` nebo `for`)
50-
a pokud máme víc cyklů zanořených v sobě, vyskočí jen z toho vnitřního.
59+
a pokud máš víc cyklů zanořených v sobě, vyskočí jen z toho vnitřního.
5160

5261
```python
5362
for i in range(10): # Vnější cyklus

0 commit comments

Comments
 (0)