[Tutor PyCZ] Dalsi problem s Livewires
geon
geon na post.cz
Úterý Únor 28 14:32:38 CET 2006
Tomáš Bělonožník napsal(a):
> Moc díky za rady, konečně už jsem pochopil to "xh, yh, Hrac_telo =
> vyrobHrace()". Narazil jsem ale na další problém, který souvisí s
> prvním. Snažil jsem se funkci posunHrace napsat takhle:
>
> def posunHrace():
> stisky = keys_pressed()
> if "2" in stisky:
> yh = yh - 10
> move_to(Hrac_telo, xh, yh)
> return yh
>
> Mělo to fungovat tak, abych změnil yh, pak posunul hráče podle na
> novou hodnotu, a pak si nechal vrátit yh v nové formě. Hází mi to ale
> chybu "local variable 'yh' referenced before assignment". Chápu to
> tak, že jsem proměnnou yh zmínil ještě předtím, než jsem jí přiřadil
> nějakou hodnotu. Ale proč si tu hodnotu nevezme sám z vyšších pater
> programu, jako to udělal, když řádek move_to vypadal
> "move_to(Hrac_telo, xh, yh-10)". To totiž hráčem opravdu posunul o 10
> pixelů. Potřeboval bych tedy prosím vědět, jak říci funkci, aby si
> vzala potřebné hodnoty "zeshora"
>
>
Potřebnou teorii jistě dodá pepr :-) , já jen za sebe:
To je to, o čem jsem psal ve svém druhém mailu. Musíš této funkci
potřebné parametry *předat* a ona je musí umět *přijímat*.
Předávání se děje při volání funkce, tedy:
posunHrace(xh, yh) [1]
a v definici funkce se nadefinuje, že musí přijímat 2 parametry:
def posunHrace(xh,yh):
....
Nesmíš ovšem zapomenou, že funkce bude ty dvě proměnné vracet (nebo tam
máš 3 - no to je ostatně jedno, to již si uděláš podle své aktuální
situace). Takže někde ve funkci je radka:
return xh, yh
No a nakonec tedy musím opravit svůj [1] takto:
xh, yh = posunHrace(xh, yh)
Snad jsem na nic nezapomněl. Trocha teorie ode mne: některé proměnné
skutečně funkce dokáže brát zezhora - zde třeba Hrac_telo nebo tvůj výše
uváděný move_to(Hrac_telo, xh, yh-10) . Jsou to ale vzdy jen ty
proměnné, které se ve funkci nemění - jsou tam jen jakoby read-only.
Proto ti to házelo tu chybu, protože jsi chtěl změnit read-only
proměnnou. (jinak se toto právě dá řešit pomocí zglobalizování proměnné,
ale to je fuj :-) , to už jsme se dohodli...)
--
geon
Vyjímka je pravidlo.
Další informace o konferenci Tutor