Devátá lekce je zaměřena na tvorbu a použití vlastních funkcí v Pythonu.

Studijní materiály

Odkaz pro zobrazení Google Slides.

Kontrolní otázky

Vysvětli výraz „funkce“. K čemu je užitečná, kdy se používá?
Vysvětli rozdíl mezi výrazy „parametry“ a „argumenty“.

Programy

Čtverec

def obvodCtverce(strana):
obvod = 4 * strana
return obvod

def obsahCtverce(strana):
"""
Funkce vracející obsah čtverce.
"""
obsah = strana ** 2
print(f'Obsah čtverce je {obsah}.')

a = int(input('Zadej délku strany: '))
o = obvodCtverce(a)

# print(f'Obvod čtverce je {o}.')
# obsahCtverce(a)

print(obsahCtverce.__doc__)

Šachovnice

"""
sachovnice.py
Vytvoř program, který vykreslí šachovnici 8 × 8 znaků naplněnou střídavě znaky B a W (jako black a white).
"""
def sachovnice():
for i in range(1, 9):
for j in range(1, 9):
if (i + j) % 2 == 0:
print("B ", end = "")
else:
print("W ", end = "")
print()

odpoved = input("Chceš vykreslit šachovnici? Ano/ne: ")
odpoved = odpoved.lower()

while odpoved == "ano":
sachovnice()
print()
odpoved = input("Chceš znovu vykreslit šachovnici? Ano/ne: ")
odpoved = odpoved.lower()

Malá násobilka

"""
malaNasobilka.py
Vytvoř program, který vypíše malou násobilku, tzn. prvních 10 násobků čísel 1 až 10. Násobilku formátuj vzhledově do tabulky.
"""
def nasobilka(cislo1, cislo2):
for i in range(1, cislo1 + 1):
for j in range(1, cislo2 + 1):
print(f"{i * j:>4}", end = "")
print()

a, b = int(input("Zadej číslo: ")), int(input("Zadej číslo: "))

nasobilka(a, b)

Pyramida

"""
pyramida.py
Vytvoř program, který dle vloženého přirozeného čísla vykreslí pyramidu.
Př.: vstup = 3
výstup:
o
o o
o o o
"""
def pyramida(cislo):
for i in range(1, cislo + 1):
print("o " * i)
a = int(input("Zadej přirozené číslo: "))

if a > 0:
pyramida(a)
else:
print("Nebylo zadáno přirozené číslo.")

Trojúhelník

"""
trojuhelnik.py
Vytvoř program, který na vstupu získá přirozené číslo, a na výstupu vykreslí tvar rovnostranného trojúhelníku.

Př.: vstup = 4
výstup:
  o
 o o
o o o
o o o o
"""
def trojuhelnik(delka):
for i in range(1, delka + 1):
print(" " * (delka - i) + "o " * i)

a = int(input("Zadej délku podstavy: "))

trojuhelnik(a)

Čtverec (výplň)

"""
ctverecVypln.py
Vytvoř program, který na vstupu získá přirozené číslo a znak pro vykreslení, a na výstupu vykreslí čtverec, jehož strana bude obsahovat právě tolik znaků, jaká byla hodnota na vstupu. Čtverec bude vykreslený s výplní.
"""
def ctverecVypln(delka, znak):
for i in range(1, delka + 1):
print((znak + " ") * delka)

a = int(input("Zadej délku čtverce: "))
znak = input("Zadej znak pro vykreslení: ")

ctverecVypln(a, znak)

Čtverec (obvod)

"""
ctverecObvod.py
Vytvoř program, který na vstupu získá přirozené číslo, a na výstupu hvězdičkami vykreslí obvod tohoto čtverce.

Př.:
vstup = 5
výstup:
* * * * *
*       *
*       *
*       *
* * * * *
"""
def ctverecObvod(delka):
vnitrek = delka + (delka - 3)
# 5 + (5 - 3) = 7 4 + (4 - 3) = 5 6 + (6 - 3) = 9

for i in range(1, delka + 1):
if (i == 1) or (i == delka):
print("* " * delka)
else:
print("*" + " " * vnitrek + "*")

a = int(input("Zadej délku strany čtverce: "))

if a > 0:
ctverecObvod(a)
else:
print("Nebylo vloženo kladné číslo. ")

Vážený průměr

"""
vazenyPrumer.py
Vytvoř program, který na vstupu získá dvě stejně velká pole -- hodnoty a k nim odpovídající váhy. Na výstupu vypíše hodnotu váženého průměru.
"""
def vazenyPrumer(hodnoty, vahy):
suma = 0
for i in range(0, len(hodnoty)):
suma += hodnoty[i] * vahy[i]
prumer = suma / sum(vahy)
return prumer

hodnoty = []
vahy = []
pocet = int(input("Kolik hodnot chceš zadat? Napiš: "))

for i in range(0, pocet):
print(f"\n{i + 1}. dvojice: ")
hodnoty.append(int(input("Zadej hodnotu: ")))
vahy.append(int(input("Zadej váhu: ")))

# hodnoty = [1, 2, 3, 4, 5]
# vahy = [1, 1, 1, 1, 10]

print(f"Vážený průměr je: {vazenyPrumer(hodnoty, vahy)}")

Medián

"""
median.py
Vytvoř program, který na vstupu získá pole čísel a na výstupu vrátí jeho medián. Wikipedia: (...) stačí hodnoty seřadit podle velikosti a vzít hodnotu, která se nalézá uprostřed seznamu. Pokud má soubor sudý počet prvků, obvykle se za medián označuje aritmetický průměr hodnot na místech n/2 a n/2+1.
"""
def median(seznam):
seznam.sort()
pocetPrvku = len(seznam)

if pocetPrvku % 2 != 0:
# [1, 2, 3, 4, 5], pocetPrvku = 5, median = [2], 2 = 5 // 2
# [1, 2, 3], pocetPrvku = 3, median = [1], 1 = 3 // 2
median = seznam[pocetPrvku // 2]
else:
# [1, 2, 3, 4], pocetPrvku = 4, median = ([1] + [2]) / 2
# [2] = 4 // 2, [1] = [2] - 1
x = pocetPrvku // 2
median = (seznam[x] + seznam[x - 1]) / 2
return median
seznam = []
pocet = int(input("Zadej počet prvků seznamu: "))

for i in range(0, pocet):
seznam.append(int(input(f"{i + 1}. prvek seznamu: ")))

print(median(seznam))

Další programy na procvičení

Přidávám zadání programů pro samostatné procvičování funkcí v Pythonu.

Funkce

"""
matematika.py
Vytvoř dvě funkce, které budeš volat na vložené číslo.

funkce „fibonacci“
Vytvoř funkci, která vypíše prvních „x“ prvků Fibonacciho posloupnosti.

funkce „faktorial“
Vytvoř funkci, která vrátí vypočítaný faktoriál vloženého čísla „x“.
"""

Odstranění českých znaků

"""
odstranCZ.py

Vytvoř funkci, která v řetězci na vstupu nahradí české znaky za znaky anglické abecedy. Tuto funkci dále používej v šifrovacích programech, které následují, a to tak, že si buď:
kód funkce zkopíruješ na začátek dalšího programu; nebo si na internetu zjistíš, jak vytvářet a importovat vlastní moduly.

Opravdu to není těžké :)
"""

Šifrování

"""
sifrovani.py

funkce „caesar“
Vytvoř funkci, která řetězec na vstupu zašifruje Caesarovou šifrou, tedy provede posun znaků o zadaný počet pozic vpravo. Pokud si chceš ušetřit práci, použij pouze znaky anglické abecedy.
Wikipedie: Princip Caesarovy šifry je založen na tom, že všechna písmena zprávy jsou během šifrování zaměněna za písmeno, které se abecedně nachází o pevně určený počet míst dále (tj. posun je pevně zvolen).

funkce „alberti“
Vytvoř funkci, která řetězec na vstupu zašifruje Albertiho šifrou.
Wikipedie: Původní Albertiho šifra (...) používala dvě šifrovací abecedy (...)

Pokud bychom chtěli zašifrovat slovo „silnice“, postupovali bychom takto: první písmeno „s“ bychom zašifrovali podle první abecedy: S→L. Druhé písmeno bychom zašifrovali podle druhé abecedy: I→E. Třetí písmeno opět podle první abecedy: L→E. Pak N→J, I→B, C→Y a E→X.

Výsledné šifrové slovo by bylo: „LEEJBYX“.
"""

Další programy

Následuje zadání a řešení programů, které vymyslely studentky v průběhu absolvování kurzu.

Převod
"""
prevod.py
Funkce převádí rychlost zadanou v metrech za sekundu na kilometry za hodinu.
"""
def prevod(ms):
       kmVhod = float(ms * 3.6)
       return kmVhod
metr = float(input('Zadej rychlost v m/s:'))
km = prevod(metr)

print("Rychlost v km/hod je", km)

Anglická konverzace

"""
ajKonverzace.py
Funkce přepisuje pouze pár základních zkratek, které se mohou vyskytovat v anglické konverzaci do celých slov, např. e.g. c = see etc.
"""
def zkratka(text):
       seznamZkr = "24bcioruy"
       seznamNahrad = ("to", "for", "be", "see", "eye", "owe", "are", "you", "why")
       prepis = []
       x = ""

       novy = text.split(" ")
       delka = len(novy)

       for i in range(0, delka):
               if novy[i] in seznamZkr:
                       index = seznamZkr.find(novy[i])

                       #print(index)
                       x = seznamNahrad[index]

                       prepis.append(x)
               else:
                       prepis.append(novy[i])
       #print(prepis)
       return prepis

text = input("Zadej text: ")
print(zkratka(text))

Bonus

Na závěr sdílím dvě z mých oblíbených videí TEDx, ve kterých se hovoří o krásách matematiky a hledání univerzálních vzorců (patterns).

Zaujal Tě tento online kurz?

Přihlásit k newsletteru

Projekt online vzdělávání byl realizován v rámci Stipendia Czechitas v projektu: „Ženy do IT“ (reg.č. CZ.03.1.51/0.0/0.0/16_061/0003268), který je financován z prostředků Evropského sociálního fondu prostřednictvím Operačního programu Zaměstnanost.