`On 2020-05-08 18:40, Helena Zubčeková wrote:
Ahoj,

Myslím, že som pohopila, čo myslíš, ale stále neviem, ako opraviť svoj kód... Mala by som teda v ai.py, kde mám funkciu tah_pocitace, pridať nejaké ošetrenie situácie, keď v "pole" nemám žiadnu "-", čo znamená, že už tam nie sú voľné miesta. Napísala som toto:

try:
    "-" in pole == True
except Value:
    print("Pole je plné")
(zbytek programu)



Řekněme že jsem Python a jdu udělat co mi tenhle program přikazuje. Řekněme že pole je 'oxoxoxoxoxoxoxoxoxox', tedy neobsahuje pomlčku.

`try:` -- hmm, tady asi nastane nějaká výjimka, budu na to připravený!

`"-" in pole == True` -- to je složitý výraz, vyhodnotím ho postupně.
žádá pomlčka v `pole` není, takže `"-" in pole` neplatí; můžu za to dosadit False. Z `"-" in pole == True` se stane `False == True`. To neplatí, takže hodnota celého výrazu je False. S výrazem `"-" in pole == True` nemám nic dělat, tak na výsledek `False` zapomenu.

`except Value:` -- žádná výjimka nenastala, tak celý `except` blok přeskočím.

A teď Python dostane ke zbytku programu, který se, jak víme z dřívějška, zacyklí.



Když tenhle kousek programu přeložím z Pythonu do češtiny, dostanu:

zkus:
    spočítat jestli "pole obsahuje pomlčku" je rovno "pravdě"
a když se to nepovede:
    napiš "pole je plné!"

Tady je možná líp vidět, proč to nedělá co má. Tenhle program reaguje na případné výjimky (try/except), ale žádné výjimky nezpůsobuje! Přitom právě vyvolání výjimky je správná reakce na nekorektní vstup jako pole='oxoxoxoxoxoxoxoxoxox'.


Ale keď skúšam zavolať test_piskvorky.py, tak sa mi to stále zacyklí, rovnako, ako predtým... Myslím, že nerozumiem, ako spolu komunikujú súbory text_piskvorky.py a ai.py, aký je medzi nimi vzťah. Ak test_piskorky raisuje chybu za určitých okolností, tak ai.py má mať try:except blok? Alebo vôbec nie? Zatiaľ tomu rozumiem tak, že test_piskvorky skúša funkciu s použitím nesprávneho vstupu, a raisuje chybu, ak tam je, a potom ten core súbor (v tomto prípade ai.py) potrebuje mať takúto chybu nejako ošetrenú? takže try-except? Až na to, že toto to nefunguje, možno to bude tým, že ak "-" in pole == True nie je pravdivé, tak tá chyba nie je ValueError...

Som hodne zmätená. Díky za radu,
Heli


Dne úterý 5. května 2020 12:58:52 UTC+2 Petr Viktorin napsal(a):

    On 2020-05-01 15:58, Helena Zubčeková wrote:
     > Ahoj,
     >
     > Som v kapitole
     > https://naucse.python.cz/course/pyladies/beginners/testing/
    <https://naucse.python.cz/course/pyladies/beginners/testing/>, a
     > nerozumiem, prečo mi test_tah_chyba nefunguje...
     > V príkazovom riadku sa mi program zasekne na modro podčiarknutej
    časti,
     > a musím to ukončiť ctrl+C...
     >
     >
     > Chýba mi niečo v piskvorky.py? Nakoniec som tam doplnila túto
    časť (aj
     > keď v materiáloch to vyslovene povedané nie je, ale naznačené to
    asi je):
     > Ale nepomohlo to. Nedáva mi to aj tak moc zmysel, pretože vtedy,
    keď je
     > na rade počítač, nemôže mať plné pole... pretože najprv hrá hráč,
    potom
     > počítač, obaja doplňujú po jednom písmene, a pole má párny počet
    polí...
     >
     > Moc díky za radu :) snažím sa to pochopiť, a z materiálov mi nie je
     > jasné, čo je zle a prečo sa mi to cyklí/zasekáva.
     >
     > Heli

    Ahoj!
    Zkus tu funkci zavolat, tak jak ji volá test:

    piskvorky.tah_pocitace('oxoxoxoxoxoxoxoxoxox')

    V téhle situaci funkce tah_pocitace nemůže nic rozumného vrátit.
    Správná
    reakce na tuhle situaci je tedy vyvolání výjimky, třeba ValueError.
    Místo toho to vypadá, že se tvoje funkce zacyklí: vybírá pořád dokola
    náhodné pozice, a nikdy nevybere volnou pozici na kterou jde hrát.
    Je tedy potřeba změnit funkci tah_pocitace: když v hracím poli není
    volné místo, vyhoď výjimku.

    Je pravda, že když správně napíšeš program který tuhle funkci volá, tak
    k téhle situaci nedojde. Ale co když ho napíšeš špatně? Co když budeš
    pracovat v týmu, a jeden z tvých kolegů bude chtít tah_pocitace
    použít v
    jiném programu?
    `test_tah_chyba` testuje funkci jako takovou, ne jen způsob jak ji
    Piškvorky volají.

--
--
E-mailová skupina [email protected]
Správa: http://groups.google.cz/group/django-cs
---
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „django-cs“ ve Skupinách Google. Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete e-mail na adresu [email protected] <mailto:[email protected]>. Chcete-li tuto diskusi zobrazit na webu, navštivte https://groups.google.com/d/msgid/django-cs/66df6009-4404-4159-ac90-1cc76bce5519%40googlegroups.com <https://groups.google.com/d/msgid/django-cs/66df6009-4404-4159-ac90-1cc76bce5519%40googlegroups.com?utm_medium=email&utm_source=footer>.

--
--
E-mailová skupina [email protected]
Správa: http://groups.google.cz/group/django-cs
--- Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny django-cs ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete 
e-mail na adresu [email protected].
Chcete-li zobrazit tuto diskusi na webu, navštivte 
https://groups.google.com/d/msgid/django-cs/354ece1c-cb72-0f57-edfc-33600ff22a26%40gmail.com.

Reply via email to