2. Základní struktury¶
V rámci následující kapitoly se naučíte používat základní struktury, jako jsou proměnné, for cyklus a funkce.
Proměnná
Na proměnné se dá dívat jako na pojmenované „šuplíky“, do kterých si můžeme
ukládat informace. Pokud chceme do proměnné přiřadit nějakou hodnotu,
používáme operátor přiřazení =
. Je zvykem v názvech proměnných používat
pouze malá písmena a číslice. V případě víceslovných názvu proměnných
jednotlivá slova oddělujeme podtržítkem.
for cyklus
Občas narazíme na situace, kdy je potřeba zopakovat nějaký úkon několikrát
za sebou. Pro tyto účely můžeme použít for cyklus. Pro použití for cyklu
jsou potřeba 2 věci: řídící proměnná a prvky, které procházíme (seznam,
sekvence, iterátor, generátor, …). Program, který chceme zopakovat
označujeme jako tělo for cyklu a musí být odsazené. For cyklus postupně
přiřazuje prvky for cyklu do řídící proměnné a spouští své tělo. V
následujícím příkladu používáme řídící proměnnou i
a prvky, které
procházíme jsou definovány pomocí range(10)
. For cyklus v následujícím
příkladu postupně vypíše čísla od 0 do 9.
Výsledkem range(n)
není přímo seznam, ale tzv. objekt range.
(podívejte se, co přesně vygeneruje range(10)
a list(range(10))
).
POZOR: v naší sbírce se chová funkce range
nesprávně a po jejím
zavolání získáme přímo seznam. Ve svých programech byste se ale na toto
chování neměli spoléhat.
Funkce
Abychom nemuseli psát některé skupiny příkazů pořád dokola, můžeme je seskupovat do takových pojmenovaných balíčků, kterým se říká funkce. Krom toho, že je funkce pojmenovaná skupina příkazů (pro názvy funkcí platí to samé jako pro názvy proměnných), mohou funkce definovat tzv. parametry, což je něco podobného jako proměnná jenom s tím rozdílem, že hodnotu parametrů dostáváme jako vstup ve chvíli, kdy se funkce používá. Funkce toho umí ještě o trochu více (návratové hodnoty), to ovšem uvidíte až v dalších kapitolách.
Závěrem úvodního okénka… no není ten Python skvělý?
(zdroj: XKCD)
2.1. Posloupnosti¶
2.1.1. Sudá čísla¶
Napište funkci, která vypíše prvních n
sudých čísel větších než 0.
def even_numbers(n):
pass
# 2 4 6 8 10 12 14 16 18 20
even_numbers(10)
2.1.2. Mocniny¶
Napište funkci, která vypíše prvních n
mocnin o daném základu.
def powers(base, n):
pass
# 1 2 4 8 16 32 64 128 256 512
powers(2, 10)
2.1.3. Dělitelé¶
Napište funkci, která vypíše všechny dělitele daného čísla (vzestupně).
def divisors(n):
pass
# 1 2 7 14
divisors(14)
2.1.4. Fibonacci¶
Napište funkci, která vypíše prvních n
prvků Fibonacciho posloupnosti.
def fibonacci(n):
pass
# 1 1 2 3 5 8 13 21 34 55
fibonacci(10)
2.1.5. Podposloupnosti¶
Napište funkci, která vypíše prvních n
prvků posloupnosti, jejíž první
prvky vypadají následovně:
1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 ...
def subsequences(n):
pass
# 1 1 2 1 2 3 1 2 3 4
subsequences(10)
2.1.6. Alternující řada¶
Napište funkci, která vypíše prvních n
prvků posloupnosti, jejíž první
prvky vypadají následovně:
1 -1 2 -2 3 -3 4 -4 5 -5 ...
def alternating(n):
pass
2.2. Tabulky¶
2.2.1. Násobilka¶
Napište funkci, která vypíše tabulku s daným počtem řádků a sloupců (+ popisný řádek a sloupce), kde v každé buňce se nachází součin čísla řádku a čísla sloupce.
def table_products(n):
pass
"""
1 2 3 4 5
- - - - -
1 | 1 2 3 4 5
2 | 2 4 6 8 10
3 | 3 6 9 12 15
4 | 4 8 12 16 20
5 | 5 10 15 20 25
"""
table_products(5)
2.2.2. Mocniny¶
def table_powers(n):
pass
"""
1 2 3 4 5
- - - - -
1 | 1 1 1 1 1
2 | 2 4 8 16 32
3 | 3 9 27 81 243
4 | 4 16 64 256 1024
5 | 5 25 125 625 3125
"""
table_powers(5)
2.2.3. Sčítání¶
def table_additions(n):
pass
"""
1 2 3 4 5
- - - - -
1 | 2 3 4 5 6
2 | 3 4 5 6 7
3 | 4 5 6 7 8
4 | 5 6 7 8 9
5 | 6 7 8 9 10
"""
table_additions(5)
2.2.4. Maximum¶
def table_maxs(n):
pass
"""
1 2 3 4 5
- - - - -
1 | 1 2 3 4 5
2 | 2 2 3 4 5
3 | 3 3 3 4 5
4 | 4 4 4 4 5
5 | 5 5 5 5 5
"""
table_maxs(5)
2.2.5. Zbytek po dělení¶
def table_remainders(n):
pass
"""
1 2 3 4 5
- - - - -
1 | 0 1 1 1 1
2 | 0 0 2 2 2
3 | 0 1 0 3 3
4 | 0 0 1 0 4
5 | 0 1 2 1 0
"""
table_remainders(5)
2.3. Textová grafika¶
2.3.1. Vyplněný čtverec¶
Napište funkci, která v textové grafice vykreslí vyplněný čtverec o straně n
.
def square(n):
pass
"""
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
"""
square(5)
2.3.2. Prázdný čtverec¶
Napište funkci, která v textové grafice vykreslí prázdný čtverec o straně n
.
def empty_square(n):
pass
"""
# # # # #
# . . . #
# . . . #
# . . . #
# # # # #
"""
empty_square(5)
2.3.3. Pyramida¶
Napište funkci, která v textové grafice vykreslí pyramidu o velikosti n
.
def pyramid(n):
pass
"""
#
# # #
# # # # #
# # # # # # #
# # # # # # # # #
"""
pyramid(5)
2.3.4. Šachovnice¶
Napište funkci, která v textové grafice vykreslí šachovnici o velikosti n * n
.
def chessboard(n):
pass
"""
# . # . # . # .
. # . # . # . #
# . # . # . # .
. # . # . # . #
# . # . # . # .
. # . # . # . #
# . # . # . # .
. # . # . # . #
"""
chessboard(8)
2.3.5. Kruh¶
Napište funkci, která v textové grafice vykreslí kruh. r
udává poloměr kruhu.
def circle(r):
pass
"""
. . . . . . . . . . .
. . . # # # # # . . .
. . # # # # # # # . .
. # # # # # # # # # .
. # # # # # # # # # .
. # # # # # # # # # .
. # # # # # # # # # .
. # # # # # # # # # .
. . # # # # # # # . .
. . . # # # # # . . .
. . . . . . . . . . .
"""
circle(5)
2.3.6. Křힶ
Napište funkci, která v textové grafice vykreslí kříž, jehož ramena budou mít délku n.
def cross(n):
pass
"""
# #
# #
# #
# #
#
# #
# #
# #
# #
"""
cross(5)
2.3.7. Diamant¶
Napište funkci, která v textové grafice vykreslí diamant o straně n
.
def diamond(n):
pass
"""
#
# # #
# # # # #
# # # # # # #
# # # # # # # # #
# # # # # # #
# # # # #
# # #
#
"""
diamond(5)
2.3.8. Písmeno „H“¶
Napište funkci, která v textové grafice vykresli velké písmeno „H“ o libovolné výšce větší nebo rovné 3.
def letter_H(size):
pass
2.3.9. Písmeno „N“¶
Napište funkci, která v textové grafice vykreslí velké písmeno „N“ o libovolné výšce větší nebo rovné 3.
def letter_N(size):
pass
2.3.10. Písmeno „Y“¶
Napište funkci, která v textové grafice vykreslí velké písmeno „Y“ o libovolné výšce větší nebo rovné 3.
def letter_Y(size):
pass
2.3.11. Vnořené čtverce¶
Napište funkci nested_squares
, která v textové grafice vykreslí n
vnořených čtverců.
def nested_squares(n):
pass
"""
# # # # # # # # #
# #
# # # # # # #
# # # #
# # # # #
# # # #
# # # # # # #
# #
# # # # # # # # #
"""
nested_squares(3)
2.3.12. Extra šachovnice¶
Napište funkci, která v textové grafice vykreslí šachovnici o velikosti n * n
polí, kde m
je velikost jednoho pole.
def extra_chessboard(n, m):
pass
"""
# # . . # # . .
# # . . # # . .
. . # # . . # #
. . # # . . # #
# # . . # # . .
# # . . # # . .
. . # # . . # #
. . # # . . # #
"""
extra_chessboard(4, 2)