programovÆní: zÆkladní konstrukce · 2014. 9. 24. · farmÆł chovÆ prasata a slepice. celkem...

59
Programování: základní konstrukce IB111 Úvod do programování skrze Python 2014

Upload: others

Post on 21-Dec-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 ".",

print

def lichy_radek(n):for j in range(n):

if (j % 2 == 1): print "#",else: print ".",

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

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 ".",

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

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

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

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

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

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

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