Python - 6. lekce
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Python - 6. lekcePython - 6. lekce

 

Python - 6. lekce

Google       Google       22. 7. 2005       24 018×

Dnes bychom se měli v našem snažení s modulem Livewires a funkcemi i obličejem dostat zase o kus dál. Snad je jasné, že malování obličeje slouží jako záminka. Že malovat dokážeme daleko lépe, jinak a jednodušeji. Nám tady ale jde jednak o pochopení toho, co se to na obrazovce při malování děje a jednak o funkce. O ty hlavně. Tak s chutí do toho!

Reklama
Reklama

...pokračujeme z minula....

Otevíráme ústa

Jak jsem již řekl, ústa jsou těžší. Je třeba, abychom se naučili vykreslit jen část kruhu. Můžeme to udělat tak, že řekneme, kde je střed kruhu a kde jsou konce oblouku. V obrázku nahoře, koncové body pusy jsou na (280,180) a (320,180). Není zcela zřejmé, kde by měl být střed, já to odhaduji na asi (300,195) -- jen trochu pod středem velkého kruhu.

Z toho vyplývá, že do programu potřebujeme dodat toto:

circle(300,195, endpoints = ((280,180),(320,180)))

Vypadá to trochu hrozivě, pokusím se to vysvětlit. Nejprve udáte střed kruhu (300,195), jako kdybyste ho malovali celý. Pak abyste řekli počítači, že ho nechcete celý, ale jen jeho část, zadáte kde jsou koncové body (endpoints) té části kruhu. Kde jsou koncové body řeknete pomocí souřadnic.

Výzva: Udělejte další změny na tváři, abyste plně pochopili smysl, jak tyto grafické příkazy fungují. Například:

  • Zvedněte trochu oči.
  • Přidejte obočí (čáry nad očima, snad trochu šikmo).
  • Přidejte uši, vlasy.
  • Změňte jemně tvar nosu.
  • Použijte barvy.

Barvičky

Možná budete chtít udělat z černobílého obrázku barevný. Modul livewires umí pár základních barev, např. red, green, pink, yellow, atd. Použití u kruhů je následující:

circle(300,200,100, colour=Colour.red)	# namaluje kruh červeně
# namaluje kruh s červenou výplní:
circle(300,200,100, colour=Colour.red, filled=1) 

# chcete-li i jiné barvy, můžete si je "vyrobit", 
# stačí znát RGB složky....
# jak zjistíte RGB složky?: třeba 
# PSPad - Nástroje - Zobrazit barvu....
# co je to RGB?: tak to je téma pro jiný kurz 
# nebo pro strýčka googla :-)

dpp=255.0  
# je důležité, aby dpp bylo desetinné číslo a ne pouhých 255,
# protože jinak by v následujícím řádku vycházela ve zlomcích celá čísla
ruzova=Colour(255/dpp, 192/dpp, 203/dpp)
draw (40, 120, colour=ruzova)

Dvě hlavy je víc než jedna

Co kdybyste chtěli namalovat dvě takové hlavy? Mohli byste vše zkopírovat, vložit na konec programu, změnit v kopii souřadnice a bylo by to, že? To by jistě fungovalo, ale bylo by to nudné a lehce byste se mohli splést. A pokud byste chtěli ještě jednu tvář, tak byste se asi zapotili.

Je zde lepší cesta.

Již víte, že Python vám umožňuje pojmenovávat čísla, řetězce, seznamy a další věci. Také vám dává možnost pojmenovat části programu. Část programu, která dostane jméno, se nazývá "funkce" (proč? - to je složitější a teď na tom nezáleží).

Funkce

Zkuste následující příklad. (pythonýrský "prompt", kterým začíná každá řádka se bude měnit jako u příkladu cyklu for. Nezapomeňte na mezery na začátcích řádků!)

>>> def vyzva():
...     print 'Python je bajecny!'
...     print 'Stejne jako ja.'
...        # Zde jen stiskněte Enter

Co se stane, když napíšete?:

>>>  vyzva()

Zkuste to. Vy jste vlastně "nadefinovali" nové slovo, kterému teď Python rozumí. (def je zkratka pro definovat.) Zkuste si také tyto tři řádky napsat do souboru, do programu, samozřejmě bez těch >>> a uložit. Pak program spusťte a pokud jste to napsali správně, vidíte před sebou >>>. No a teď můžete znovu zkusit funkci zavolat: vyzva().

Funkce je něco jako proměnná, jen že uvnitř není uložené číslo, ale malý program, pár řádků kódu. Jiný je ale způsob použití. U funkce jsou nutné na konci závorky (podle toho se lehce zjistít, že to není proměnná, ale funkce). A rozhodně nemůžeme použít, jako u proměnných, např. vyzva()=10.

Za názvem funkce musí být závorky, a to jak při definici, tak při použití.

Bez závorek to sice nevyhodí chybu, protože Python vám prostě napíše na které adrese v paměti ta funkce leží, ale rozhodně se nevykoná kód, který je schovaný uvnitř.

Výzva: Napište funkci takovou, že když napíšete bedovani(), tak počítač vytiskne:

Python je pro kocku! A stejne tak tento kurz!

Dobrý argument

Funkce jsou však více než pouhá úspora při psaní. Vyzkoušejte naspat následující definici a přemýšlejte o tom, co může znamenat.

>>> def dvakrat(x):
...     print x, ' + ', x, ' = ', x+x
...        # Zde jen stiskněte Enter.

Pokud si myslíte, že tomu rozumíte (nebo jste se rozhodli, že tomu nebudete rozumět nikdy :-) ), experimentujte. Zkuste se zeptat Pythona na dvakrat(3), nebo dvakrat(99), nebo dokonce dvakrat('och').

Nyní je to snad již jasnější. Když řeknete dvakrat(7), počítač vykoná kód uvnitř definice dvakrat (stejně jako to vykonal u funkce vyzva a bedovani již dříve) jen s tím rozdílem, že "x = 7". Takže je to tak, jako kdybyste řekli:

print 7, ' + ', 7, ' = ', 7+7

Věci, které se takto dostanou dovnitř funkce, se z jistých důvodů nazývají "argumenty" nebo "parametry". Takže když řeknete dvakrat('superstar'), tak řetězec 'superstar' je argumentem funkce dvakrat. Pythonu se ale nebude líbit, když mu zadáte dvakrat()>, tedy bez argumentu. Vyzkoušejte. Víte co se to děje? (Python hlásí chybu , že funkce dvakrat() očekávala 1 argument a nedostala žádný).

Výzva: Napište funkci, která se chová skoro jako dvakrat, ale narozdíl od tisku kolik je x+x (kde x je argumentem funkce), vytiskne, kolik je x*x . Vyzkoušejte. (Bohužel to nebude fungovat na řetězce!)

Funkce může mít více jak jeden argument. Jak to funguje bude zřejmé, jakmile to uvidíte, takže dávám příklad.

def secti(x,y):   
  print x, ' + ', y, ' = ', x+y

a=input('Zadej prvni cislo: ')
b=input('Zadej druhe cislo: ')
secti(a,b) 

Vestavěné funkce

Mimochodem je mnoho věcí, které jste doposud Pythonu říkali, a které jsou ve skutečnosti funkce. Když jste například říkali move(100,100), tak jste používali funkci se dvěma argumenty. Jediný rozdíl byl v tom, že jste nemuseli psát definici funkce sami.

...pokračování příště...

Příště to snad již doděláme.

Úkol

5 libovolných příkladů (to jsou ty kódy v rámečcích) z 1. lekce spáchejte pomocí funkcí. To znamená definici a hned za ní použití, aby mi prostě při spuštění programu Python postupně vypisoval to, co je v příkladech. Samozřejmě bez těch >>> :-). Dám příklad pro "plat":

def tiskniPlat(plat):
    print "plat = ", plat
    print "plat * 4 = ", plat * 4
    print "plat/12 = ", plat / 12

tiskniPlat(123456)

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Pavel KosinaAutor programuje v Pythonu.
Web    

Nové články

Obrázek ke článku Malware KONNI se úspěšně skrýval 3 roky. Odhalil ho bezpečnostní tým Cisco Talos

Malware KONNI se úspěšně skrýval 3 roky. Odhalil ho bezpečnostní tým Cisco Talos

Bezpečnostní tým Cisco Talos odhalil celkem 4 kampaně dosud neobjeveného malwaru, který dostal jméno KONNI. Ten se dokázal úspěšně maskovat od roku 2014. Zpočátku se malware zaměřoval pouze na krádeže citlivých dat. Za 3 roky se ale několikrát vyvinul, přičemž jeho současná verze umožňuje útočníkovi z infikovaného počítače nejenom krást data, ale i mapovat stisky na klávesnici, pořizovat screenshoty obrazovky či v zařízení spustit libovolný kód. Pro odvedení pozornosti oběti zasílali útočníci v příloze také obrázek, zprávu a výhružkách severokorejského režimu či kontakty na členy mezinárodních organizací.

Reklama
Reklama
Obrázek ke článku Pouze jedna z deseti lokálních firem ví o pokutách plynoucích z GDPR

Pouze jedna z deseti lokálních firem ví o pokutách plynoucích z GDPR

Trend Micro, celosvětový lídr v oblasti bezpečnostních řešení a VMware, přední světový dodavatel cloudové infrastruktury a řešení pro podnikovou mobilitu, oznámily výsledky výzkumu mezi českými a slovenskými manažery zodpovědnými za ochranu osobních údajů, který zjišťoval, jak jsou připraveni na nové nařízení o ochraně osobních údajů (GDPR). Většina firem v České republice a na Slovensku nad 100 zaměstnanců je již s novým nařízením GDPR obeznámena. Výzkum provedený ve spolupráci s agenturou Ipsos ukázal, že téměř 8 firem z 10 o nařízení ví, přičemž jeho znalost je o něco vyšší na Slovensku (89 %) než v České republice (69 %).

Obrázek ke článku Vyděračský software Locky se vrací, tváří se jako potvrzení platby, odhalil tým Cisco Talos

Vyděračský software Locky se vrací, tváří se jako potvrzení platby, odhalil tým Cisco Talos

Jeden z nejznámějších ransomwarů, Locky, se vrací. Po většinu roku 2016 patřil mezi nejrozšířenější vyděračské softwary. Ke svému šíření využíval emailové kampaně s infikovanými přílohami. Ransomware Locky byl rozesílán prostřednictvím botnetu (internetový robot zasílající spamy) Necurs. Jeho aktivita na konci roku 2016 téměř upadla a spolu s ní i šíření ransomwaru Locky. Před několika týdny se Necurs opět probudil a začal posílat spamy nabízející výhodný nákup akcií. Dne 21. dubna zaznamenal bezpečnostní tým Cisco Talos první velkou kampaň ransomwaru Locky prostřednictvím botnetu Necurs za posledních několik měsíců.

Obrázek ke článku Dovozci baterií mění logistiku, letadlo nahrazuje námořní doprava

Dovozci baterií mění logistiku, letadlo nahrazuje námořní doprava

Dovozci baterií do mobilů či notebooků upouštějí od letecké přepravy zboží. V letošním roce plánují dovézt až 80 % produktů lodí. Přitom před 5 lety byla většina baterií do mobilních přístrojů dovezených do České republiky přepravována letadlem. Za proměnou způsobu transportu akumulátorů stojí zpřísnění pravidel pro leteckou přepravu, která přinášejí vyšší náklady i náročnou agendu.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý