Tato lekce navazuje na dřívější úkoly - 1D piškvorky. Pokud je nemáš udělané, můžeš použít ukázkové následující soubory.
Soubor util.py
musí obsahovat funkci tah(pole, index, symbol)
, která se
pokusí umístit hráčův symbol do zadaného hracího pole a vrací nový stav hracího
pole (neúspěch je indikován vyvoláním výjimky ValueError
). Může vypadat
například takto:
Podobně s ai.py
. Ten musí obsahovat funkci tah_pocitace(pole, symbol)
, který
se pokusí umístit zadaný symbol do hracího pole, vrací nový stav hracího pole.
použít velmi naivní strategii:
Pro webový server dneska použijeme knihovnu flask
. Již tradičně, nejprve si ji
nainstalujeme:
(venv) $ python -m pip install flask
Začneme s jednoduchou kostrou:
# webpiskvorky.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hra():
jmeno_zvirete = 'Andulka na bidýlku'
return f'Ahoj, jmenuju se {jmeno_zvirete}.'
Aplikace ve Flasku se spouští trochu jinak, než programy, které jsme si doposud napsali. Nejprve je nutné nastavit několik proměnných prostředí a to se dělá na různých počítačích jiným způsobem.
V linuxu/Mac:
$ export FLASK_APP=webpiskvorky.py
$ export FLASK_DEBUG=1
Pokud pracuješ na Windows:
> set FLASK_APP=webpiskvorky.py
> set FLASK_DEBUG=1
Tak, tím máme nachystané prostředí a konečně můžeme server spustit:
(venv) $ flask run
* Serving Flask app "webpiskvorky.py" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 279-218-554
Otevři si v prohlížeči stránku http://127.0.0.1:5000 a mělo by se ti zobrazi prázdná stránka pouze s textem
Ahoj, jmenuju se Andulka na bidýlku.
Psaní obsahu stránky přímo v pythonu je docela nepohodlné. Proto využijeme tzv. šablon. To je soubor, do kterého ve kterém se dají nahradit proměnné za jejich hodnoty.
Ve stejné složce, jako se nachází soubor webpiskvorky.py
vytvoříme novou
složku templates
a v ní následující piskvorky.html
:
Soubor templates/piskvorky.html
:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
</head>
<body>
Ahoj, jmenuju se {{ jmeno }}
</body>
</html>
Nyní upravíme naši funkci tak, abychom šabloně předali proměnné a výsledný obsah vrátili jako odpověd serveru.
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def hra():
jmeno_zvirete = 'Andulka na bidýlku'
return render_template('piskvorky.html', jmeno=jmeno_zvirete)
Pojmenovaný argument funkce render_template
uvnitř šablony vezme jako název
proměnné uvnitř šablony. Hodnotu proměnné v šabloně vypíšeme pomocí dvojitých
složených závorek.