Задать вопрос
@Restore_4321

Проблема с Python. Модуль pywebio. Поможете исправить ошибку?

67b9a877c40aa431160170.png
Я пытаюсь сделать онлайн крестики-нолики, но вылетает ошибка

код:
from pywebio import start_server
from pywebio.input import *
from pywebio.output import *
from pywebio.session import run_async, run_js

import asyncio

chatmsgs = []

frty = " | | "
srty = " | | "
trty = " | | "

async def main():
global chatmsgs

put_markdown('крестики-нолики')

msgbox = output

put_scrollable(msgbox, height=300, keep_bottom=True)
ddd = await input('Вход', required=True, placeholder='Пароль')
if ddd == 'qwerty1234567890':
refsh_task = run_async(refresh_msg(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 data == '1о':
frty[1] == "0"
msgbox.append(put_markdown(frty))
if data == '1х':
frty[1] == "X"
msgbox.append(put_markdown(frty))
if data == '2о':
frty[3] == "0"
msgbox.append(put_markdown(frty))

async def refresh_msg(msgbox):
global chatmsgs
last_idx = len(chatmsgs)
while True:
await asyncio.sleep(1)

for m in chatmsgs[last_idx]:
msgbox.append(put_markdown(f"{m[0]}: {m[1]}"))

if __name__ == "__main__":
start_server(main, debug=True, port=8080, cdn=False)
  • Вопрос задан
  • 116 просмотров
Подписаться 1 Простой 6 комментариев
Пригласить эксперта
Ответы на вопрос 1
@Hichnick
Привет!
Основные проблемы в коде связаны с несколькими моментами:
1. Неправильное изменение строки:
Вы пишете выражения вида
frty[1] == "0"
Это не присваивание, а операция сравнения. При этом строки в Python неизменяемы, и даже если бы использовался оператор присваивания (например, frty[1] = "0"), это вызвало бы ошибку. Если вам нужно изменить строку, создайте новую. Например, если строка имеет фиксированную длину, можно сделать так:
frty = frty[:1] + "0" + frty[2:]
или, что зачастую удобнее, хранить строку в виде списка символов, изменять нужный элемент, а затем объединять список в строку.

2. Неверное обращение к данным, полученным из input_group:
Функция input_group возвращает словарь, например:
data = {'msg': '1о', 'cmd': 'Отправить'}
Поэтому проверять ввод нужно по ключу (например, if data['msg'] == '1о':), а не сравнивать весь словарь со строкой.

Возможно, потребуется поправить форматирование и отступы (например, строка global chatmsgs должна быть с отступом внутри функции).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы