• Что случится, когда звуковой сигнал из файла превысит максимальный уровень громкости девайса?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Уровень громкости не абсолютный. Грубо говоря он, как бы, в процентах от максимального. Нельзя превысить максимум.
    Ответ написан
    Комментировать
  • Что почитать про программирование под Линукс?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А под линукс как-то особенно программировать не требуется. Наоборот можно уже писать кроссплатформенно.
    У винды много своей специфики, связанной со странными особенностями файловой системы, с выкрутасами в плане использования кодировок в терминале, в файловой системе, в остальных местах... Когда начинаешь кодить на линукс и под линукс, то аж дышится легче.
    Начинаешь думать, что интерфейсы можно делать не нативно, а в виде веб-интерфейсов, которые отлично смогут работать и в облаке, и прямо на роутере, и локально.
    В линуксе гораздо проще и каноничнее всё с доке-контейнерами, стандартной является вся инфраструктура командной строки, свзанная с механизмами автоматизации: стандартные тулзы, make, системы управления пакетами...
    Поднять на линуксе изолированную повторяемую среду получатся гораздо проще, чем в винде.

    Вообще не понятно, конечно, о каком програмировании речь. Тут и системное программирование упоминалось, и GUI...
    По собственному опыту скажу, что сомнения при переходе на разработку под линукс в основном надуманные и ненужные. Переход происходит естественно и непринужденно.
    Особенно подкупает встроенная в систему хорошая документация и огромное количество структурированной информации в сети. Даже книг каких-то специальных читать не пришлось. Просто по обстоятельствам ищем статьи и мануалы по конкретным темам: особенности и устройство файловой системы, пайпы, потоки, процессы, система прав доступа...
    Ответ написан
    1 комментарий
  • Как удалить строку в python, если в ней менее 2 русских букв?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ну, во-первых, вы возвращаете тот же список, что принимаете на входе, а новый сформированный никуда не возвращаете.
    Во-вторых, вы оставляете строки, которые имеют две подряд идущие русские буквы, а если букв будет две, но между ними будет пробел, или английская, или цифра, то вы такую строку проклассифицируете неверно. Регексп у вас не соответствует задаче.

    И вам не надо искать все вхождения, достаточно первого признака. Грубо говоря, ам надо искать в строке русскую букву, за которой идёт что угодно и сколько угодно раз (даже ноль раз), а затем идет еще русская буква. Если такая подстрока нашлась, строку надо оставить, иначе пропустить.

    Правила этого ресурса запрещеют постить код скриншотами. Нужно постить его текстом в специальном теге или в виде ссылки на онлайн интерпретатор с кодом.
    Ответ написан
  • Как написать "62 рубля 00 копеек", и "37 рублей 12 копеек"?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    А что конкретно вам не понятно в этой задаче? Это не биржа фрилансеров и никто вам не будет делать готвого решения, поэтому задавая вопрос нужно показать как вы сами пытаетесь решить свою проблему, и вам покажут где вы не правы.

    Ну давайте резберем вашу задачу на части. Это называется декомпозиция. Любые задачи нужно решать начиная с декомпозиции - разбиения на более простые подзадачи.

    Итак, в чем проблема? Вам не ясно как число разбить на целую и дробную часть? Окей, ещё глубже декомпозируем: вам не ясно как отбросить дробную часть, чтобы получить число рублей? Или вам не ясно как получить целое число копеек?

    Допустим это вы сделали. Что вам ещё не ясно? Как правильно согласовать два слова с числами?
    Ну так в школе это изучается. Вроде ж всё просто. Есть всего три варианта: "рублей", "рубль", "рубля". Обычно эти варианты принято нумеровать: 0 - рублей, 1 - рубль, 2- рубля.
    Да, с 2 до 4 - это то же самое, что 2 (рубля). Ноль, а также с 5 до 19 - это то же самое, что 0 (рублей). Осталось получить остаток от деления числа на 20, привести это к по формуле выше к одной и трёх цифр и получите нужный вариант словоформы.
    Выходит для любого слова, которое нужно согласовать с числительным, нужно предусмотреть три варианта и сделать функцию, которая будет их правильно выбирать в зависимости от числа.
    Да, там могут быть ещё варианты с падежами и родами, но это не про ваш случай.

    Ок. что е вам ещё может быть не ясно? Как подставить в текстовый шаблон параметры?

    Вопросы надо конкретизировать.
    Ответ написан
    Комментировать
  • Индекс в субд это по сути отдельная таблица?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Странная постановка вопроса. Как будто мы тут какие-то слухи обсуждаем. А между тем всё легко и быстро гуглится. Вот можно даже начать с википедии. Там и про бинарные сбалансированные деревья ответ есть:
    https://ru.wikipedia.org/wiki/Индекс_(базы_данных)....

    Вы бы хотя бы уж привели свои источники, в коих усмотрели противоречие. Иначе получился расплывчатый неконкретный вопрос, как бдто вам про БД Одна Бабка Сказала...
    Ответ написан
    1 комментарий
  • Как добиться плавности движения змейки?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Придётся довольно глубоко менять вашу "Змейку", чтобы она плавно двигалась.
    Для этого ваш тик перемещения нужно разбить на число подтиков, соответствующих числу пикселей вашей игровой ячейки. В вашем случае это 20.
    То есть ваша змея должна отрисовываться в 20 раз чаще. При этом тело змеи будет по-прежнему дискретным, просто добавится ещё один вложенный счетчик.
    Внешний счетчик как и сейчас будет считать шаги змеи, а внутренний будет считать шаги анимации перемещения внутри одного шага змеи. На протяжении анимации перемещения каждый сегмент змеи попиксельно перемещается от своих координат на предыдущем шаге к своим координатам на следующем. Ничего сложного.

    Но ваш код уже плохо читается. Такой код называют спагетти-кодом.
    Можно вынести структуру данных состояния змеи в отдельный класс и отрисовку реализовать отдельным методом, куда снаружи передавать шаг анимации.
    Тогда у вас будет разделено логическое перемещение змеи по сегментом, и чисто декоративное по пикселям.
    Ответ написан
    Комментировать
  • Как исправить ошибку в программе?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Приглашения к вводу данных не соответствуют заданию.
    Не использованы средства шаблонизации, которые предоставляет язык рограммирования.
    Оформление кода не соответствуют требованиям PEP8.
    Не предусмотрено согласование количества дней и ночей с окончанием слов "ночей" и "дней" в шаблоне. При числах 1,2,3, 4, 21, 22 и т.д., окончания будут неверными.
    Ответ написан
    Комментировать
  • Kак сделать иммутабельный список?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вы меня удивляете, сударь.
    Вроде не новичок и понимаете концепию иммутаельности, передачи аргументов по значению и по ссылке, но с непониманием элементарной базовой особенности языка вы идёте задавать тривиальный вопрос у живых людей, когда самые-самые новички знакомятся с этим в первых главах любой книжки про питон для чайников.

    К питону не применимы понятия "передачи аргументов по значению" или "по ссылке".
    В Питоне переменные раотают иначе, чем в Си или Паскале.
    Переменная в Си - это ящичек, куда вы что-то можете положить. В том числе в ящичке может лежать ссылка на другой ящичек.
    В питоне переменная больше похожа на ярлычок, привязанный к объекту. Число, строка, список, словарь, класс, инстанс класса, None, ... - всё это объекты и они лежат где-то в памяти.
    Какие-то объекты мутабельны, какие-то иммутаельны, но это не важно. У любого объекта может быть много ярлычков (например имен). Также ярлычком будет элемент списка, ключ или значение в словаре и т.д.
    От обычного указателя в си это отличается тем, что его не нужно разыменовывать, чтобы обратиться к объекту. Употребляем имя - подразумеваем значение. Присвоение перевешивает ярлычок, удаление удаляет ярллычок.
    Да, чем-то это смахивает на смартпоинтеры, но не полностью.
    Да, в питоне не принято изменять мутабельные входные параметры. По крайней мере можно яно скопировать мутабельный объект поверхностно или глубоко. Для этого есть специальные методы или функция copy.

    Ох и предстоит вам еще поудивляться побочному эффекту мутабельности в дефолтных значениях аргументов функций.

    Подавите свои амбиции и прочитайте хотя бы бегло какую-нибуь книжку по питону. Вам можно даже не шибко детскую.
    Ответ написан
  • Aiogram Message is not modified как исправить?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вы пытаетесь в цикле поменять текст сообщения на тот же самый текст.
    Протокол телеграмма не позволяет этого делать, потому что это бессмысленно.
    Вы можете:
    1) помнить предыдущий текст и сравнивать новый с ним, чтобы вызыватьредактирование только если текст изменился.
    2) Перехватывать и игнорировать MessageNotModified, если считаете, что эта ситуация будет редкой и лишний трафик на сервера телеги вас не беспокоят.
    3) Вы можете чисто логически не редактировать сообение, если исходные параметры его не поменялись.
    4) вы можете гарантированно менять исходные параметры сообщения, чтобы оно гарантированно изменило текст.

    Выбирайте решение на своё усмотрение. А в той второй ошибке, что вы привели в комментах, вы не учитываете, что счетчик у вас глобальный на уровне модуля и достуен во всех функциях модуля, но если вы делаете его присвоение в коде функции, то в ней появляется локальная одноименная переменная, которая перекрывает глобальную, но в конкретно этом случае вызывает ошибку, поскольку при первой итерации у вас локальная переменная еще не определена, хотя фактически объявлена.
    Вам нужно почитать как в питоне работают неймспейсы, как объявлять переменные в функции из глобального скоупа.
    Ответ написан
  • Как мне реализовать семеричную систему счисления в ascii символы на nasm?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А в чем проблема конкретно? Зачем вы привели этот код?
    Тут нет даже попытки решить вашу задачу.
    Что именно у вас не получается?
    Чтобы преобразовать любую систему счисления нужно домножить каждый разряд исходного числа (в исходной системе счисления) на нужную степень основания исходной системы и сложить результаты.
    К примеру семиричное число "123" будет состоять из трёх единиц, двух семёрок и одной сорокдевятки: 3+2*7+1*7*7=49+14+3=66. После этх операций вы получите бинарное число, а его уже надо преобразовать в десятичные знаки.
    Если готовой функуии для этого у вас нет, то просто действуете обратным способом. Многократно делите число на основание системы счисления (теперь это 10) с остатком. Остатки будут соответствовать десятичным цифрам.
    Ответ написан
    7 комментариев
  • Как передать значения из данной функции в основную программу?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    нио каком 'return' тут речь быть не может. Это calback.
    Если ваш "основной код" работает в том же потоке, то можете сделать глобальный обьект (синглтон), который будет "виден" на уровне модуля и в on_message и в вашем "основном коде". В него вы затягивайте сообщения, а в другом месте их вынимаете. Для этого очереди и существуют.
    Если речь идёт о разных потоках, то так не получится. Тогда оптимально будет поднять внешнюю очередь, например RabbitMQ и пользоваться ею. Но судя по вашему вопросу, знаний у вас пока не хватит на это. Подучить бы сперва питон на более простых вещах.
    Ответ написан
    1 комментарий
  • Почему запрос по имени работает медленнее если заменить фамилию на %?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Так устроен индекс. Он строится в первую очередь по первым символам и в последнюю по последним.
    Если вы подменяете % начало, то индекс просто не будет работать.
    Разделите ФИО на отдельные компоненты и сделайте отдельный индекс для имени, тогжа ваш кейс будет быстрее работать.
    У вас же фактически происходит полный перебор базы без индекса.

    Для примера. Вот у вас есть больой алфавитный список людей. Найти в нем любого человека по тому, по чему список отсортирован - это тривиальная задача. Вы делите весь спислк пополам и мгновенно определяете в какой половине искомая строка. Потом делите оставшуюс половину и так далее. А теперь представьте, что ваш список осортирован по фамилии, а вам надо найти в нем Сигизмунда. Всех Сигизмундов. Сортировка по фамилии вам не поможет быстро искать. Нужна сортировка по имени. Для этого и делают отдельные индексы.
    Ответ написан
    3 комментария
  • Как спарсить svg картинки?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Нужно приводить полный стек трейс ошибки, а не только её текст.
    Вам нужно разбить imglink по вопросительному знаку и взять только левую часть.
    Ответ написан
    Комментировать
  • Почему программа не записывает данные в CSV файл?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ваш код записывает данные в файл, просто вы выбрали символ-разделитель зачем-то именно этот.
    Возможно ваш эксель его не понимает как таковой.

    63727c6f21376150389635.png
    Ответ написан
    Комментировать
  • Что быстрее: json или sqlite?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вам следует более детально расписать чего вам нужно добиться.
    Сейчас вы пытаетесь сравнивать две совершенно разные функциональности.
    Сериализация json довольно не быстрая операция, но всё зависит от того, какой объём и каких данных вы будете сериализовать, а потом ка кхотите эти данныеиспользовать. sqlite размещает свою БД в файловой системе и там свои накладные расходы на ее использование, а сериализацию json можно делать в памяти, однако тут будет уже сиьно важно какие объёмы и в какой структуре у вас данные. Доступ к большому количеству однотипных записей в sqlite можно сделать по индексу, а json, если его прдставлять в виде строки, нужно сперва десериализовать в структуры данных. Это требует много памяти и никакого индекса на данном этапе у вас нет.

    В общем, вы не корректно поставили вопрос. поэтому на него нельзя ответить простым и понятным способом.
    Неьзя сравнивать тёплое с мягким.
    Ответ написан
    1 комментарий
  • Где лучше хранить БД? В докере или нет?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Дополню немного ответ Dr. Bacon, поскольку мне кажется он не так понял ваш вопрос, а вы, возможно, не так поняли суть проблемы.
    Под БД, например постгрес, обычно понимают две разные вещи:
    1) сами данные в файловой системе,
    2) сервер базы данных, который реализует сетевой интерфейс для работы с БД и правильным образом кладёт и читает данные в файловой системе.

    Так вот, сервер можно развернуть ка кна хостовой машине (как вы сказали "локально"), так и в докер-контейнере.
    Файлы БД можно разместить как в файловой системе контейнера, так и в локальной файловой системе, примонтированной внутрь контейнера.
    И тут полно нюансов.
    Давайте начнём с того, как правильно.
    Правиьным будет взять стандартный докер-образ сервера БД, сконфигурировать его через компоуз-файл, а размещение файлов БД примонтировать в виде отдельного volume.

    Что имел в виду Dr. Bacon. Он имел в виду, что если не монтировать файлы БД в volume, то они будут лежать внутри контейнера, а значит при его перезапуске все данные будут стерты, поскольку состояние файловой системы контейнера не принято хранить. Это одно из преимузеств докера - сделал образ унаследовав его от других образов, а потом при запуске контейнера он какждый раз как новенький.
    Ответ написан
    Комментировать
  • Как работать с конструкцией try except?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Сделайте ещё один вложенный цикл для попыток обработки каждого из элементов. Можно при успешном выполнении без ошибок выходить из внутреннего цикла досрочно, а при ошибке не выходить досрочно и цикл будет повторять попытки.
    Если бы у вас было побольше опыта программирования на питоне, я бы посоветовал бы вам вынести обработку одного элемента в отдельную функцию, а еще посоветовал бы поупражняться в написании декоратора `retry`, который будет оборачивать любую функцию в новую функцию и в случае ошибки повторять её запуск пока не будет исчерпан лимит попыток.
    По-моему такой пример или упражнение, кстати, и было в одной из книг Лутца. Но вам подойдёт практически любая, где рассматриваются основы языка.
    Ответ написан
    2 комментария
  • Можно ли написать OS на Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Сейчас включу максимального зануду и скажу, что не всё так уж однозначно.
    Вопрос в том, что называть языком. Если языком считать синтаксис, то вполне можно написать транспилер, который будет транслировать питоновский код в сишный код, например, а его уже в машинный.
    ОС, написанная на Си - это скомпилированный машинный код - результат работы компилятора над исходником на языке Си. Да, стандартный компилятор Си может откомпилировать машинный код, а потом стандартный сборщик превратит его в набор файлов операционной системы.
    Стандартный транслятор питона в его байткод и интерпретатор этого байткода не смогут работать самостоятельно без операционной системы, но разве в условии вопроса было сказано про стандартный интерпретатор?

    В общем, писать ОС на питоне - очень странная идея, но и микроскопом теоретически можно попробовать "разминировать" противопехотную мину, особенно если привязать его к длинной штанге и снабдить зарядом взрывчатки, однако это чревато большими и бессмысленными страданиями.

    Простой ответ - нет, питон не предназначен для написания ОС, но использовать его для разработки большОго количества элементов ОС можно.
    Ответ написан
    2 комментария
  • Почему при обращении к @classmethod возникает NameError: name 'cls' is not defined?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    cls и self - это никакие не префиксы, а обычные перемнные. Они поступают в виде первого аргумента метода.
    Вы даже назвать их можете по-другому и ничего не поломается.
    Попробуйте, всё-таки, почитать книжку по питону по порядку, а не действовать методом тыка и не гадать на кофейной гуще.
    В функции zas у вас нет переменной cls, отсюда и NameError.
    Получить класс объекта можно с помощью функции type: type(self).infield()

    Ну и да, судя по всему, вы не поняли до конца для чего нужны классовые методы, а для чего обычные.
    Ктсати, Test().zas() отработает вполне корректно, не смотря на то, что это классовый метод, а вызывается он у инстанса. Просто классовому методу будет передан в аргумент класс, а не инстанс.

    Серёьзно. Бросайте пытаться разбираться в этом методом тыка и вопросов на QnA. Там дальше наследование, полиморфизм, множественное наследование, метаклассы... Вы всех задолбаете и будете этим заниматься целую вечность
    Ответ написан
    1 комментарий