Ваша проблема заключается в том, что строки в Python являются неизменяемыми (immutable), и вы не можете изменять символы в строке по индексу. Вместо этого вам нужно создать новую строку с заменённым символом.
В вашем случае вы можете воспользоваться следующим подходом:
1. Преобразовать строку в список, чтобы вы могли изменять отдельные символы.
2. Выполнить изменение символа по индексу.
3. Преобразовать список обратно в строку.
Вот как это можно сделать в вашем коде:
```python
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 = ' | | '
def update_board(board, pos, symbol):
# Преобразуем строку в список, чтобы изменять по индексу
board_list = list(board)
# Обновляем символ по индексу
board_list[pos] = symbol
# Преобразуем обратно в строку
return ''.join(board_list)
async def main():
global chatmsgs, frty, srty, trty
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 = update_board(frty, 0, 'O')
msgbox.append(put_markdown(f"{nick} : \n{frty}\n{srty}\n{trty}"))
chatmsgs.append(f"{nick} : \n{frty}\n{srty}\n{trty}")
if data['msg'] == '1x':
frty = update_board(frty, 0, 'X')
msgbox.append(put_markdown(f"{nick} : \n{frty}\n{srty}\n{trty}"))
# Запускаем сервер
if __name__ == '__main__':
start_server(main, port=80)
```
Здесь мы добавили функцию `update_board`, которая берет текущую строку, заменяет символ по указанному индексу на новый символ и возвращает обновленную строку. Теперь ваш код должен работать правильно и обновлять состояние игры по мере ввода ходов. Пожалуйста, убедитесь, что вы обновляете символы в соответствии с логикой вашей игры!