Я делаю крестики-нолики онлайн, используя pywebio. У меня не получается взять из строки символ по индексу и изменить его для вывода.
Код:
from pywebio import start_server
from pywebio.input import *
from pywebio.output import *
from pywebio.session import run_async, run_js
import asyncio
chatmsgs = []
onlineus = set()
max_msg = 10
frty = ' | | '
srty = ' | | '
trty = ' | | '
async def main():
global chatmsgs
put_markdown('Крестики-нолики')
msgbox = output()
put_scrollable(msgbox, height=300, keep_bottom=True)
nick = await input('Вход', required=True, placeholder='Имя', validate=lambda n: 'Такое имя уже используется!' if n in onlineus else None)
ddd = await input('Вход', required=True, placeholder='Пароль')
if ddd == 'qwerty1234567890':
chatmsgs.append((f"{nick} присоединился!"))
msgbox.append(put_markdown(f"{nick} присоединился!"))
refsh_task = run_async(refresh_msg(nick, msgbox))
while True:
data = await input_group("Ход",[
input(placeholder='(1о, 2x)', name='msg'),
actions(name='cmd', buttons=['Отправить', {'label':'Выйти из чата', 'type':'cancel'}])
], validate=lambda m: ('msg', "Введите читаемый ход!") if m["cmd"] == 'Отправить' and not m["msg"] else None)
if data is None:
break
if True:
if data['msg'] == '1o':
frty[0] == "0|"
msgbox.append(put_markdown(f"{nick} : \n{frty}\n{srty}\n{trty}"))
chatmsgs.append((nick, "\n{frty}\n{srty}\n{trty}"))
if data['msg'] == '1x':
frty[0] == "X|"
msgbox.append(put_markdown(f"{nick} : \n{frty}\n{srty}\n{trty}"))
chatmsgs.append((nick, "\n{frty}\n{srty}\n{trty}"))
if data['msg'] == '2o':
frty[2] == "0"
msgbox.append(put_markdown(f"{nick} : \n{frty}\n{srty}\n{trty}"))
chatmsgs.append((nick, "\n{frty}\n{srty}\n{trty}"))
if data['msg'] == '2x':
frty[2] == "X"
msgbox.append(put_markdown(f"{nick} : \n{frty}\n{srty}\n{trty}"))
chatmsgs.append((nick, "\n{frty}\n{srty}\n{trty}"))
if data['msg'] != '1o' or '1x' or '2o' or '2x' or '3o' or '3x' or '4o' or '4x' or '5o' or '5x' or '6o' or '6x' or '7o' or '7x' or '8o' or '8x' or '9o' or '9x':
msgbox.append(put_markdown(f"{nick} : \n{data['msg']}"))
chatmsgs.append((nick, "\n{data['msg']}"))
refsh_task.close()
onlineus.delete(nick)
toast('Вы проиграли!')
msgbox.append(put_markdown(f"{nick} покинул игру!"))
chatmsgs.append(f"{nick} покинул игру!")
async def refresh_msg(nick, msgbox):
global chatmsgs
last_idx = len(chatmsgs)
while True:
await asyncio.sleep(1)
for m in chatmsgs[last_idx:]:
if m[0] != nick:
msgbox.append(put_markdown(f"{m[0]} : {m[1]}"))
if len(chatmsgs) > max_msg:
chatmsgs = chatmsgs[len(chatmsgs) // 2]
last_idx = len(chatmsgs)
if __name__ == "__main__":
start_server(main, debug=True, port=8080, cdn=False)