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

Python - 6. lekcePython - 6. lekce

 

Python - 6. lekce

Google       Google       22. 7. 2005       29 328×

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!


...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 Stavebnice umělé inteligence 1

Stavebnice umělé inteligence 1

Článek popisuje první část stavebnice umělé inteligence. Obsahuje lineární a plošnou optimalizaci.  Demo verzi je možné použít pro výuku i zájmovou činnost. Profesionální verze je určena pro vývojáře, kteří chtějí integrovat popsané moduly do svých systémů.

Obrázek ke článku Hybridní inteligentní systémy 2

Hybridní inteligentní systémy 2

V technické praxi využíváme často kombinaci různých disciplín umělé inteligence a klasických výpočtů. Takovým systémům říkáme hybridní systémy. V tomto článku se zmíním o určitém typu hybridního systému, který je užitečný ve velmi složitých výrobních procesech.

Obrázek ke článku Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Vedení týmu v oboru informačních technologií se nijak zvlášť neliší od jiných oborů. Přesto však IT manažeři čelí výzvě v podobě velmi rychlého rozvoje a tím i rostoucími nároky na své lidi. Udržet pozornost, motivaci a efektivitu týmu vyžaduje opravdu pevné manažerské základy a zároveň otevřenost a flexibilitu pro stále nové výzvy.

Obrázek ke článku Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Za poslední rok se podoba práce zaměstnanců změnila k nepoznání. Především plošné zavedení home office, které mělo být zpočátku jen dočasným opatřením, je pro mnohé už více než rok každodenní realitou. Co ale dělat, když se při práci z domova ztrácí motivace, zaměstnanci přestávají komunikovat a dříve fungující tým se rozpadá na skupinu solitérů? Odborníci na personalistiku dali dohromady několik rad, jak udržet tým v chodu, i když pracovní podmínky nejsou ideální.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý