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

Python - 6. lekcePython - 6. lekce

 

Python - 6. lekce

Google       Google       22. 7. 2005       23 414×

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 NEWTON Media prohledá 200  milionů mediálních zpráv během sekund díky Cisco UCS

NEWTON Media prohledá 200 milionů mediálních zpráv během sekund díky Cisco UCS

Česká společnost NEWTON Media provozuje největší archiv mediálních zpráv ve střední a východní Evropě. Mezi její zákazníky patří například ministerstva, evropské instituce nebo komerční firmy z nejrůznějších oborů. NEWTON Media rozesílá svým zákazníkům každý den monitoring médií podle nastavených klíčových slov a nabízí online službu, kde lze vyhledat mediální výstupy v plném znění od roku 1996.

Reklama
Reklama
Obrázek ke článku Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Touto roční dobou, kdy je zem pokrytá barevným listím a prsty křehnou v mrazivých ránech, se obvykle těšíme na zbrusu novou verzi RAD Studia. Letos si však ale budeme muset počkat na Godzillu a Linux až do jara. Vezměme tedy za vděk alespoň updatem 2 a jelikož dle vyjádření pánů z Embarcadero se budou nové věci objevovat průběžně, pojďme se na to tedy podívat.

Obrázek ke článku Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Stále rostoucí zájem o cloudové služby i maximální důraz na pružnost, spolehlivost a bezpečnost IT vedou k výrazným inovacím v datových centrech. V infrastruktuře datových center hraje stále významnější roli software a stále častěji se lze setkat s hybridními přístupy k jejich budování i provozu.

Obrázek ke článku Konference: Mobilní technologie mají velký potenciál pro byznys

Konference: Mobilní technologie mají velký potenciál pro byznys

Firmy by se podle analytiků společnosti Gartner měly  rychle přizpůsobit skutečnosti, že mobilní technologie už zdaleka nejsou horkou novinkou, ale standardní součástí byznysu. I přesto - nebo možná právě proto - tu nabízejí velký potenciál. Kde tedy jsou ty největší příležitosti? I tomu se bude věnovat již čtvrtý ročník úspěšné konference Mobilní řešení pro business.

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 © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý