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ý?

_images/awesome_python.png

(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)
Next Section - 3. Jednoduché výpočty