ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem...
Transcript of ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem...
![Page 1: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/1.jpg)
Programování: základní konstrukce
IB111 Úvod do programování skrze Python
2014
![Page 2: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/2.jpg)
Rozcvička
1 2 3 4 5 6 7 8 9 102 3 4 5 6 7 8 9 10 113 4 5 6 7 8 9 10 11 124 5 6 7 8 9 10 11 12 135 6 7 8 9 10 11 12 13 146 7 8 9 10 11 12 13 14 157 8 9 10 11 12 13 14 15 168 9 10 11 12 13 14 15 16 179 10 11 12 13 14 15 16 17 1810 11 12 13 14 15 16 17 18 19
![Page 3: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/3.jpg)
Základní konstrukce
proměnné, operaceřízení toku výpočtu:
podmiňovací příkaz (if-else)cykly (for, while)
funkce
![Page 4: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/4.jpg)
O přednášce
důraz na princip použití (k čemu to je), ilustrace použití,přemýšlení o problémuilustrace na příkladechsyntax (zápis) jen zběžně, zdaleka ne vše z jazyka Pythonsyntax je však potřeba také umět!
cvičenísamostudium, např. howto.py.cz
![Page 5: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/5.jpg)
Příklad
Problém: vypočítat výšku mostu na základě času pádu koule
vstup: časvýstup: výška
t = input()h = 0.5 * 10 * t * tprint h
![Page 6: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/6.jpg)
Proměnné
udržují hodnotuudržovaná hodnota se může měnit – proto proměnnétypy:
číselné: int, float, . . .pravdivostní hodnota (bool)řetězec (string)seznam / poleslovník. . .
![Page 7: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/7.jpg)
Výrazy a operace
výrazy: kombinace proměnných a konstant pomocíoperátorůoperace:
aritmetické: sčítání, násobení, . . .logické: and, or, not, . . .zřetězení řetězců. . .
preference operátorů, pořadí vyhodnocování
![Page 8: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/8.jpg)
Proměnné a výrazy: příklady
x = 13y = x % 4 # dělení se zbytkemy = y + 1y += 1
a = (x==3) and (y==2)b = a or not a
s = "petr"t = "klic"u = s + t
z = x + s # chyba: nelze sčítat int a string
![Page 9: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/9.jpg)
Zápis v Pythonu
přiřazení =test na rovnost ==většina operací „intuitivníÿ: +, -, *, /, and, or, . . .umocňování: **dělení se zbytkem: %zkrácený zápis: „y += 5ÿ znamená „y = y + 5ÿ
![Page 10: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/10.jpg)
Typy v Pythonu
„deklaraceÿ proměnné: první přiřazení hodnotydynamické implicitní typování
typ se určuje automatickytyp proměnné se může měnitrozdíl oproti statickému explicitnímu typování (většinakompilovaných jazyků jako C, Pascal): int x;
zjištění typu: funkce type
![Page 11: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/11.jpg)
Explicitní přetypování, dělení
explicitní přetypování (x = float(3))významné např. při dělení
3 / 2 = 1float(3) / 2 = 1.53.0 / 2 = 1.5
![Page 12: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/12.jpg)
Pořadí vyhodnocování
3 + 2**3 < 15 or "pes" == "kos"
pořadí vyhodnocování vesměs intuitivnípokud na pochybách:
konzultujte dokumentacizávorkujte
zkrácené vyhodnocování: 1+1 == 2 or x == 3
![Page 13: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/13.jpg)
Operace, pořadí vyhodnocování
![Page 14: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/14.jpg)
Proměnné a paměť
x 1 x = x + 1 x 2
x 1 x = x + 1 x 1
2
![Page 15: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/15.jpg)
Výstup
základní výpis: print xbez odřádkování: print x,další možnosti: sys.write, .format, .rjust . . .(rozdíl oproti Python 3)
![Page 16: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/16.jpg)
Podmínky: příklad
Příklad: počítání vstupného
vstup: věkvýstup: cena vstupenky
vek = input()if vek < 18:
cena = 50else:
cena = 100print cena
![Page 17: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/17.jpg)
Podmíněný příkaz
if <podmínka>: příkaz1else: příkaz2
podle toho, zda platí podmínka, se provede jedna z větvípodmínka – typicky výraz nad proměnnýmielse větev nepovinnávícenásobné větvení: if - elif - . . . - else(switch v jiných jazycích)
![Page 18: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/18.jpg)
Blok kódu
co když chci provést v podmíněné větvi více příkazů?blok kódu
Python: vyznačeno odsazenímjiné jazyky: složené závorky { }, begin-end
![Page 19: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/19.jpg)
Podmíněný příkaz: příklad
if x < 0:x = 0print ’Zaporne vynulovano’
elif x == 0:print ’Nula’
elif x == 1:print ’Jedna’
else:y = x * xprint ’Moc’
![Page 20: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/20.jpg)
Cykly: příklady
vstupné za celou rodinuvýpis posloupnosti číselvýpočet faktoriálupřevod čísla na binární zápis
![Page 21: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/21.jpg)
Cyklus
opakované provádění sekvence příkazůznámý počet opakování cyklu:
příkaz for
neznámý počet opakování cyklu:příkaz whileopakuj dokud není splněna podmínka
![Page 22: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/22.jpg)
For, range
for x in range(n):příkazy
provede příkazy pro všechny hodnoty x ze zadanéhointervalurange(a, b) – interval od a do b-1range(n) – interval od 0 do n-1 (tj. n opakování)for/range lze použít i obecněji (nejen intervaly) – vizpozději/samostudium
![Page 23: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/23.jpg)
Faktoriál pomocí for cyklu
Co to faktoriál? K čemu se používá?Kolik je „5!ÿ?Jak vypočítat „n!ÿ (n je vstup od uživatele)?
![Page 24: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/24.jpg)
Faktoriál pomocí for cyklu
n = input()f = 1
for i in range(1,n+1):f = f * i
print f
![Page 25: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/25.jpg)
První posloupnost z úvodní přednášky
1 0 0 2 8 22 52 114 240 494
for i in range(n):print 2**i - 2*i,
![Page 26: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/26.jpg)
Zanořování
řídicí struktury můžeme zanořovat, např.:podmínka uvnitř cyklucyklus uvnitř cyklu. . .
libovolný počet zanoření (ale . . .)
![Page 27: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/27.jpg)
Rozcvička
1 2 3 4 5 6 7 8 9 102 3 4 5 6 7 8 9 10 113 4 5 6 7 8 9 10 11 124 5 6 7 8 9 10 11 12 135 6 7 8 9 10 11 12 13 146 7 8 9 10 11 12 13 14 157 8 9 10 11 12 13 14 15 168 9 10 11 12 13 14 15 16 179 10 11 12 13 14 15 16 17 1810 11 12 13 14 15 16 17 18 19
![Page 28: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/28.jpg)
Rozcvička programem
n = 10soucet = 0
for i in range(1,n+1):for j in range(n):
print i+j,soucet += i+j
print "Soucet je", soucet
![Page 29: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/29.jpg)
Rozcvička programem – hezčí formátování
for i in range(1,n+1):for j in range(n):
print str(i+j).rjust(2),print
![Page 30: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/30.jpg)
While cyklus
while <podmínka>:příkazy
provádí příkazy dokud platí podmínkamůže se stát:
neprovede příkazy ani jednouprovádí příkazy do nekonečna (nikdy neskončí) – tovětšinou znamená chybu v programu
napište výpočet faktoriálu pomocí while cyklu
![Page 31: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/31.jpg)
Faktoriál pomocí while cyklu
n = input()f = 1while n > 0:
f = f * nn = n - 1
print f
![Page 32: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/32.jpg)
Binární soustava: počítání na prstech
1
2 4 8
16
http://www.khanacademy.org/math/vi-hart/v/binary-hand-dance
![Page 33: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/33.jpg)
Příklad: převod na binární zápis
Problém: převodník z desítkové na binární soustavuvstup: číslo v desítkové soustavěvýstup: číslo v binární soustavě
Jak převedeme „22ÿ na binární zápis?Jak převedeme obecné číslo na binární zápis?
![Page 34: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/34.jpg)
Převod na binární zápis
n = input()vystup = ""while n > 0:
if n % 2 == 0:vystup = "0" + vystup
else:vystup = "1" + vystup
n = n / 2print vystup
![Page 35: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/35.jpg)
Převod na binární zápis – průběh výpočtu
n = 22 vystup =n = 11 vystup = 0n = 5 vystup = 10n = 2 vystup = 110n = 1 vystup = 0110n = 0 vystup = 10110
![Page 36: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/36.jpg)
Funkce
Programy nepíšeme jako jeden dlouhý „štrúdlÿ, ale dělíme jedo funkcí.
Proč?
opakované provádění stejného (velmi podobného) kódu narůzných místech algoritmumodularita (viz Lego kostky), znovupoužitelnostsnazší uvažování o problému, dělba práce
![Page 37: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/37.jpg)
Funkce
Programy nepíšeme jako jeden dlouhý „štrúdlÿ, ale dělíme jedo funkcí.
Proč?
opakované provádění stejného (velmi podobného) kódu narůzných místech algoritmumodularita (viz Lego kostky), znovupoužitelnostsnazší uvažování o problému, dělba práce
![Page 38: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/38.jpg)
Funkce
vstupy (parametry)
funkce
návratová hodnota
vedlejší efekty
return
výpisyzměny globálních proměnných
![Page 39: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/39.jpg)
Funkce
vstup: parametry funkcevýstup: návratová hodnotaproměnné v rámci funkce:
lokální: dosažitelné pouze v rámci funkceglobální: dosažitelné všude, minimalizovat použití
![Page 40: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/40.jpg)
Funkce pro převod na binární zápis
def binarni_zapis(n):vystup = ""while n > 0:
if n % 2 == 0:vystup = "0" + vystup
else:vystup = "1" + vystup
n = n / 2return vystup
![Page 41: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/41.jpg)
Vnořené volání funkcí
funkce mohou volat další funkcepo dokončení vnořené funkce se interpret vrací apokračujerekurze: volání sebe sama, cyklické volání funkcí(podrobněji později)
![Page 42: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/42.jpg)
Vnořené volání: jednoduchý příklad
def info_o_sudosti(cislo):print "Cislo", cislo,if cislo % 2 == 0:
print "je sude"else:
print "je liche"
def pokusy_se_sudosti(a, b):print "Prvni cislo", ainfo_o_sudosti(a)print "Druhe cislo", binfo_o_sudosti(b)print "Konec"
pokusy_se_sudosti(3, 18)
![Page 43: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/43.jpg)
Vnořené volání – ilustrace
def pokusy_se_sudosti(a, b): print "Prvni cislo", a info_o_sudosti(a) print "Druhe cislo", b info_o_sudosti(b) print "Konec"
def info_o_sudosti(cislo): print "Cislo", cislo, if cislo % 2 == 0: print "je sude" else: print "je liche"
pokusy_se_sudosti(3,18)
![Page 44: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/44.jpg)
Rozcvička programem II
Experimentální otestování hypotézy o třetí mocnině
def tabulka_soucet(n):soucet = 0for i in range(1,n+1):
for j in range(n):soucet += i+j
return soucet
def vypis_souctu(kolik):for n in range(1, kolik+1):
print n, n**3, tabulka_soucet(n)
![Page 45: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/45.jpg)
Druhá posloupnost z úvodní přednášky
0 1 1 2 1 2 2 3 1 2 2 3 2 3 3 4 1 2 2 3 2 3 3 4 23 3 4 3 4 ...
Počet jedniček v bitovém zápisu.
Jak vypsat programem?
![Page 46: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/46.jpg)
Druhá posloupnost z úvodní přednášky
0 1 1 2 1 2 2 3 1 2 2 3 2 3 3 4 1 2 2 3 2 3 3 4 23 3 4 3 4 ...
Počet jedniček v bitovém zápisu.
Jak vypsat programem?
![Page 47: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/47.jpg)
Druhá posloupnost z úvodní přednášky
def pocet_jednicek(n):pocet = 0while n > 0:
if n % 2 == 1: pocet += 1n = n / 2
return pocet
def posloupnost2(n):for i in range(n):
print pocet_jednicek(i),
![Page 48: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/48.jpg)
Funkce: Python speciality
def test(x, y = 3):print "X =", xprint "Y =", y
defaultní hodnoty proměnnýchvolání pomocí jmen proměnnýchtest můžeme volat např.:
test(2,8)
test(1)
test(y=5, x=4)
(dále též libovolný počet argumentů a další speciality)
![Page 49: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/49.jpg)
Programátorská kultura
psát smysluplné komentáře, dokumentační řetězce (vizpozději)dávat proměnným a funkcím smysluplná jménafunkce by měly být krátké:
max na jednu obrazovkujen pár úrovní zanoření
příliš dlouhá funkce – rozdělit na menšíneopakovat se, nepoužívat „copy&paste kódÿ
![Page 50: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/50.jpg)
Další důležité programátorské konstrukce
složitější datové typy (seznamy, řetězce), objektyvstup/výstup (input/output, IO):
standardní IOsoubory
dělení projektu do více souborů (packages), použitíknihoven
viz další přednášky, cvičení, samostudium
![Page 51: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/51.jpg)
Příklad: výpis šachovnice
# . # . # . # .. # . # . # . ## . # . # . # .. # . # . # . ## . # . # . # .. # . # . # . ## . # . # . # .. # . # . # . #
![Page 52: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/52.jpg)
Nevhodné řešení
def sachovnice(n):for i in range(n):
if (i % 2 == 0): sudy_radek(n)else: lichy_radek(n)
def sudy_radek(n):for j in range(n):
if (j % 2 == 0): print "#",else: print ".",
def lichy_radek(n):for j in range(n):
if (j % 2 == 1): print "#",else: print ".",
![Page 53: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/53.jpg)
Lepší řešení
def sachovnice(n):for i in range(n):
radek(n, i % 2)
def radek(n, parita):for j in range(n):
if (j % 2 == parita): print "#",else: print ".",
![Page 54: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/54.jpg)
Jiný zápis
def sachovnice(n):for i in range(n):
for j in range(n):if ((i+j) % 2 == 0):
print "#",else:
print ".",print
![Page 55: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/55.jpg)
Příklad: Hádanka hlavy a nohy
Farmář chová prasata a slepice. Celkem je na dvoře 20 hlav a56 noh. Kolik má slepic a kolik prasat?
jak vyřešit pro konkrétní zadání?jak vyřešit pro obecné zadání (H hlav a N noh)?co když farmář chová ještě osminohé pavouky?
![Page 56: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/56.jpg)
Hlavy, nohy: řešení
dva možné přístupy:
1 „inteligentněÿ: řešení systému lineárních rovnic2 „hrubou silouÿ:
„vyzkoušej všechny možnostiÿcyklus přes všechny možné počty prasat
![Page 57: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/57.jpg)
Hlavy, nohy: program
def hledej_reseni(hlavy, nohy):for prasata in range(0, hlavy+1):
slepice = hlavy - prasataif prasata * 4 + slepice * 2 == nohy:
print "prasata =", prasata,\"slepice =", slepice
Jak bych musel program změnit, kdybych řešil úlohu i spavouky?
![Page 58: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/58.jpg)
Ukázka nevhodného programu: ciferný součet
if n % 10 == 0:f = 0 + f
elif n % 10 == 1:f = 1 + f
elif n % 10 == 2:f = 2 + f
elif n % 10 == 3:f = 3 + f
elif n % 10 == 4:f = 4 + f
...
![Page 59: ProgramovÆní: zÆkladní konstrukce · 2014. 9. 24. · FarmÆł chovÆ prasata a slepice. Celkem je na dvołe 20 hlav a 56 noh. Kolik mÆ slepic a kolik prasat? jak vyłe„it](https://reader036.fdocument.pub/reader036/viewer/2022081410/609bd38870dee910ab68b581/html5/thumbnails/59.jpg)
Ukázka nevhodného programu: čtverec
def ctverec(n):for i in range(1, n):
print "*" * iif i == n-1:
p = 1while n+1 > p:
print "*" * nn = n - 1