[Tutor PyCZ] Help

geon geon na post.cz
Úterý Únor 21 20:15:04 CET 2006


jak.petr na atlas.cz napsal(a):
> Mam problem v pythonu 2.4.2 a to ze mi to v jednom (jeste sice nedokoncenem ale mel by byt funkcni) programu hazi chybu kterou nechapu? Kod onoho programu je zde take. Prosim napiste mi co ta chyba znamena a jak se da opravit.
>
>   
Příště prosím pošli i tu chybku, ten její výpis....

Asi to nebyl dobrý nápad, když jsem překládal kurz livewires 
http://www.geon.wz.cz/livewires/5-robots.html , abych se přesně držel 
jejich podání. Zneužívání global vede právě k takovým chybám, které tu 
teď uvádíš.

No ale když už jsi takhle jednou začal, tak bys to mohl i tak dokončit. 
Musíš zglobalizovat     global xh, yh, Hrac_telo  -  proměnné ve všech 
(dvou ) funkcích.     klavesy = keys_pressed() tohle přeci patří do 
hlavní smyčky a smaž sleep(1) a už to bude frčet jako dráha....

move_to(Hrac_telo, xh, yh) - tohle nemusíš mít snad v každém if... to 
stačí dát na konec funkce - bude to přehlednější a kratší.

Taky bych zkusil naznačit jak se zbavit toho "proklatého" ;-) global v 
první funkci:


def vyrobHrace():
    xh=random.randint(0, 630)
    yh=random.randint(0, 479)
    Hrac_telo = circle( xh, yh, 5, filled=1)
    return xh, yh, Hrac_telo


xh, yh, Hrac_telo= vyrobHrace()

while 1:
    klavesy = keys_pressed()
    xh, yh = posunHrace(xh, yh)
    if "q" in klavesy:
        break

Musí se to ale podobně dotvořit i v té druhé funkci. Do toho bych se ale 
pustil, až se ti rozpohybuje ta černá tečka ;-)


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



Další informace o konferenci Tutor