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:
				continue
import 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:]

Reply via email to