`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.