Rekurze je speciální postup používaný v programování, v rámci kterého necháme funkci, aby volala sama sebe. Asi nejznámější příklad na rekurzi je generování fibonacciho čisla.
Fibonacciho posloupnost = 0, 1, 1, 2, 3, 5, 8, 13, 21, …
def fib(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fib(n - 1) + fib(n - 2)
fib(6)
fib(10)
range
¶Range generuje vždy čísla od nuly do zadaného kladného celého čísla.
cislo = 5
list(range(cislo + 1))
Pokud mu jako jediný argument zadáme číslo záporné, range nám nedá ani jedno číslo.
cislo = -10
list(range(cislo + 1))
Můžeme mu ale dát jako začátek tak konec intervalu a pak bude range používat i záporná čísla.
cislo = -10
list(range(cislo, cislo + 20))
I range se dá přiřadit do proměnné :)
def vypocet_mocniny(cislo):
if cislo < 0:
muj_range = range(cislo, 0)
else:
muj_range = range(0, cislo + 1)
vysledek = []
for i in muj_range:
vysledek.append((i, i**2))
return dict(vysledek)
print(vypocet_mocniny(8))
print(vypocet_mocniny(-8))
None
?¶def vypsat_na_radek(znamky_matematika):
for klic, hodnota in znamky_matematika.items():
print("{}: {}".format(klic, hodnota))
znamky_matematika = {'Pepa': 5, 'Anicka': 2, 'Karlik': 1}
print(vypsat_na_radek(znamky_matematika))
Funkce, která neobsahuje return
vždy vrátí None
a protože je zde použita ve funkci print
tak se None i vypíše jako poslední řádek. Řešením je volat funkce, které nic nevrací, bez printu.
vypsat_na_radek(znamky_matematika)
def slovnik_z_retezce(retezec):
slovnik={}
for klic in retezec:
slovnik=slovnik.setdefault(klic,(retezec.count(klic)))
return slovnik
print(slovnik_z_retezce("abcdebcdecdedee"))
Chyba je v tom, že výstup z funkce setdefault
je nějaká hodnota, která přepíše proměnnou slovnik
a ta už tedy nadále slovníkem není a znovu se na ní nedá metoda setdefault
aplikovat.
def slovnik_z_retezce(retezec):
slovnik={}
for klic in retezec:
slovnik.setdefault(klic,(retezec.count(klic)))
return slovnik
print(slovnik_z_retezce("abcdebcdecdedee"))
def slovnik_z_retezce(retezec):
slovnik={}
for klic in retezec:
slovnik[klic] = retezec.count(klic)
return slovnik
print(slovnik_z_retezce("abcdebcdecdedee"))
from random import choice
questions = ['Kdo?', 'S kým?', 'Co dělali?'] # , 'Kde?', 'Kdy?', 'Proč?']
answers = {}
result = ''
for question in questions:
print('Odpovídej na otázku. Až toho budeš mít dost, odpověz "konec"')
while True:
answer = input(question + ' ')
if answer == 'konec':
break
else:
if question not in answers:
answers[question] = [answer]
else:
answers[question].append(answer)
for question in questions:
result += choice(answers[question]) + ' '
print(result)
veta = ['Pepa', 'Mirka', 'pekli pizzu']
veta[0:1] + ['a'] + veta[1:] + ['.']
print(' '.join(veta))