Вам рано заниматься ботами. Ваш вопрос напоминает вопрос хирурга: коллеги, а когда аппендикс удаляем, разрез надо справа или слева делать?
Рекомендую сначала поучить анатомию и физиологию (т.е. язык программирования и ООП).
Роутер сделать можно, но зачем? NAS сделать можно, но смысл делать это на таком железе?
Чтоб оно было домашним NAS, надо купить несколько весьма недешевых компонентов - тихих вентиляторов Noctua, виброгасящих подвесов для HDD, мощный бесперебойник…
Например, у меня на работе webdriver не может скачать что ему надо, а руками драйвер можно скачать. Так что бывают разные казусы.
Но в целом - поддерживаю.
Мне кажется, что переменная в классе пуля не определена, поэтому python будет искать её в глобальной области видимости.
А там она определена. И должна меняться в цикле while, получая новые значения из атрибута класса Enemy.
Но вообще-то, конечно, каша из класса и лапши варится плохо…
CteplerMarinovich, эта ошибка очень-очень популярна тут. Каждый день её спрашивают. Воспользуйтесь поиском по строке UnicodeDecodeError и вы обязательно найдете среди всего этого и ваш случай, или близкий.
Ну и вдогонку: старайтесь не использовать кириллицу в путях - не все библиотеки корректно с ней работают.
Qerriom Magnelius, вам моё предложение кажется заморочным и излишним. Ваше право. Но время на разбиение и отладку по частям парадоксальным образом будет тем меньше, чем мельче детали вы сделаете и чем больше деталей у вас будет.
Qerriom Magnelius, ну вот я вас спрошу:
В какой именно строчке приведённого кода проблема?
Вы сможете ответить? Я бы затруднился.
Возможно, какая-то из них работает не так, как вы ожидаете. Какая? :/
Потому я и предлагаю разбить всё на много маленьких функций и проверять по частям.
Можно, конечно, поступить иначе:
В дебаггер все пошагово проходить и смотреть, на каком шаге в какой переменной не то, что ожидается.
Но с этим подходом проблема в том, что много всего разом и трудно не запутаться.
Проблему надо делить. Вашу мегафункцию надо делить обязательно, это плохо, когда функция делает это и это и это и это…
Qerriom Magnelius, тогда давайте подробностей. Код есть. Но что по-вашему не так? Где именно вас не устраивает синтаксис? Почему?
Вообще по коду:
Если подумать, приведённый код можно разделить на части:
Основная функция с декоратором, который контролирует сообщения и отдает объект message остальным частям кода;
Часть кода, получающая данные, используя message
Часть кода, генерирующая имя файла
Часть кода, сохраняющая данные в файл со сгенерированным именем
Часть про отправку сообщения о работе бота
Какая-то myqr, которая принимает полученные данные
Создание нового сообщения
Открытие ранее созданного файла
Попытка отправки открытого файла (без закрытия!)
Запуск какого-то get_menu
Такое огромное количество разных функций в одной. Надо всё это разложить в разные функции, а внутри основной функции лишь сделать вызов всех этих отдельных функций с передачей из одной в другую нужных объектов.
И отлаживать каждую по-отдельности. В идеале обвесить каждую проверками типов того, что приходит, а также тестами.
Вот если всё это сделать, то можно будет относительно легко найти, где у вас проблема. Да вы и сам легко найдете.
Мысленно разгребать же груду разнообразных строк, пытаясь понять, в какой из них у вас что-то не так… увольте-с.
Mind2077, да хоть про луны Юпитера. На тэг python подписано почти 40 тыс. читателей. Не надо спамить всем им вашими траблами с ботом и ИИ. Ни кода python, ни существенных деталей, касающихся языка… при чем тут тэг python?
Qerriom Magnelius,
На вопрос «как сделать» отвечает документация и поиск в интернет.
Тут отвечают на вопросы «почему я сделал так, как в документации, а оно не работает. Поискал в интернет, вот запросы, в ответах не нашел. Что я делаю не так?»
Покажите, как вы пробовали решить проблему, приведите код попытки (пусть неудачной), опишите, как запускали, что ожидали и что получилось.
За готовыми решениями - на фриланс. В текущем виде это не вопрос, а задание. Нарушен п.5.12 Регламента.
Вообще, можно сделать в интересующем вас классе признак изменения; признак выставлять при любом изменении; экземпляры класса при создании сложить в список, и периодически перебирать этот список, проверяя признак изменения. Обнаружив признак установленным, обработать изменённый экземпляр, и сбросить признак.
Альтернативный вариант – переносить изменённые экземпляры в отдельный список, типа стека или очереди, а после обработки возвращать в общий список.
Если хранить экземпляры в словаре, а не списке, то можно при изменении экземпляра имя ключа, соответствующего измененному экземпляру, складывать в списочек «имена изменённых экземпляров», а после обработки экземпляров – убирать из этого списка.
Необходимо привести код проекта, чтобы понять, почему данные не передаются. Со слов ничего не понятно. Если код слишком длинный, его можно отредактировать, оставить только существенное для вопроса. Длинную портянку кода желательно спрятать под спойлер.
Послушайте доброго совета.
4 день в питоне - чересчур рано для ботов.
Вот был бы 4-й месяц плотного изучения - можно было бы попробовать.
Сейчас вы как студент 1 курса медвуза, пытающийся выполнить операцию аппендицита. Рановато…
Рекомендую сначала поучить анатомию и физиологию (т.е. язык программирования и ООП).