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:
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/, 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].
Chcete-li zobrazit tuto diskusi na webu, navštivte
https://groups.google.com/d/msgid/django-cs/66df6009-4404-4159-ac90-1cc76bce5519%40googlegroups.com.
from random import randrange
import util
def tah_pocitace(pole):
# Vrátí herní pole se zaznamenaným tahem počítače
while True:
try:
"-" in pole == True
except Value:
print("Pole je plné")
else:
pozicia = int(randrange(0, 20))
if pole[pozicia] == "-" and (pozicia == 0 or pozicia == 19):
return util.tah(pole, pozicia, "y")
break
elif pole[pozicia] == "-" and (pole[pozicia-1] != "-" or pole[pozicia+1] != "-"):
return util.tah(pole, pozicia, "y")
break
else:
continueimport piskvorky
piskvorky.piskvorky1d()
import util
import ai
def vyhodnot(pole):
if "xxx" in pole:
return "x"
# vyhral X
elif "yyy" in pole:
return "y"
# vyhral Y
elif "-" not in pole:
return "!"
# remíza
else:
return "-"
# nikto nevyhral a stále tam je nejaké -, takže sa stále hrá
def tah_hrace(pole):
# Vrátí herní pole se zaznamenaným tahem hráče
while True:
try:
pozicia = int(input("Na ktorej pozícii chceš hrať? (0-19)"))
except ValueError:
print("To nebolo číslo, skús to znovu")
else:
if pozicia < 0 or pozicia >= len(pole):
print("Nemôžeš hrať mimo poľa")
elif pole[pozicia] != "-":
print("Táto pozícia je už obsadená")
else:
break
return util.tah(pole, pozicia, "x")
def piskvorky1d():
pole = "-" * 20
while vyhodnot(pole) == "-":
pole = tah_hrace(pole)
print(pole)
if vyhodnot(pole) == "x":
print("Vyhral si :) ")
break
pole = ai.tah_pocitace(pole)
print(pole)
if vyhodnot(pole) == "y":
print("Vyhral počítač")
break
elif vyhodnot(pole) == "!":
print("A máme tu remízu :) ")
import pytest
import piskvorky
import ai
def test_tah_na_prazdne_pole():
pole = ai.tah_pocitace('--------------------')
assert len(pole) == 20
assert pole.count('y') == 1
assert pole.count('-') == 19
def test_tah_chyba():
with pytest.raises(ValueError):
ai.tah_pocitace('oxoxoxoxoxoxoxoxoxox')def tah(pole, cisloPolicka, symbol):
# Vrátí herní pole s daným symbolem umístěným na danou pozici
return pole[:cisloPolicka] + symbol + pole[cisloPolicka + 1:]