[Tutor PyCZ] Dalsi problem s Livewires

geon geon na post.cz
Úterý Únor 28 07:42:08 CET 2006


Tomáš Bělonožník napsal(a):
> Ahoj,
> tak jsem se taky jal vyrabet roboti hru z toho Livewires tutorialu a
> zasekl jsem se temer na zacatku. Procital jsem si tuhle konferenci a
> snazil jsem se tedy vyvarovat global. Muj problem je asi v tom, ze
> dostatecne nerozumim prikazu return, nikde sem ani nenasel nejaky
> vyklad. 
return někdy předčasně, někdy až na konci opuští cyklus a vrací jednu 
nebo několik hodnot.

> Pokusil jsem se aplikovat postup, ktery platil na vyrobHrace i
> na posunHrace, ale háže mi to chybu, kterou si nejsem schopen
> prelozit"
>
> Hrac_telo, xh, yh = posunHrace()
> TypeError: unpack non-sequence
>   
Ty se pak ukládají do odpovídajících proměnných

Je-li ve funkci mojeFunkce() return a, b - tak funkce vrací dvě 
proměnné, které se musí do dvou proměnných zapsat:
pocet, velikost = mojeFunkce(). Odpovídá to zápisu:
pocet=a
velikost=b

Je to vlastně praktické využití jedné pythonoské fíčurky:
a,b,c = 1,2,3
nebo taky
a,b,c=[1,2,3]
a,b,c=(1,2,3)

return a,b je ve skutečnosti return (a,b), takže se vrací tuple, která 
se samorozbaluje do přislušných proměnných.

Pokud není soulad v počtu proměnných, dostáváš tuto chybu--> vracíš dvě 
proměnné (xy, yh), očekáváš tři (Hrac_telo, xh, yh ).

> Muj kod ted vypada takhle:
>
> import random
> from livewires import *
> begin_graphics()
> allow_moveables()
> def vyrobHrace():
>    xh=random.randint(0, 639)
>    yh=random.randint(0, 479)
>    Hrac_telo = circle(xh, yh, 5, filled=1, colour=Colour.red)
>    return xh, yh, Hrac_telo
> def posunHrace():
>     stisky = keys_pressed()
>   
tahle (výše uvedená)řádka tam být nemusí (nebo nemá?)
>     if "2" in stisky:
>   
if "2" in klavesy:
>         move_to(Hrac_telo, xh, yh+1)
>         return xh, yh
>
> xh, yh, Hrac_telo = vyrobHrace() # Jak tak nad tim premyslim tak tuhle
> radku nechapu...
> while 1:
>    klavesy = keys_pressed()
>    Hrac_telo, xh, yh = posunHrace() # Tady je problém
>    if "q" in klavesy:
>        break
> end_graphics()
>
> Díky za jakoukoliv pomoc, mozna mi bude stacit jen vysvetleni toho return...
>   
S tím return to může být ještě zamotanějsí, ale snad to takhle zatím 
stačí...

-- 
geon
Vyjímka je pravidlo. Rekurzivní.



Další informace o konferenci Tutor