• Выделяется ли память при использовании срезов в цикле в Python?

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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Посмотрите в сторону сервиса дадата
    Ответ написан
    1 комментарий
  • Как правильно сократить код и сделать его понятным?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    def button_callback(call):
        actions = {
            'hlep': bulk,
            'souss': souss,
            'vasabi': imvs,
            'palki': palk,        
        }
        fn = actions.get(call.data)
        bot.answer_callback_query(call.id)
        if fn:
            bot.send_message(call.message.chat.id, fn, parse_mode='html', reply_markup=button)
        elif call.data == 'button1':
            bot.send_message(call.message.chat.id,text = "Простите, автор-оладушек и еще не реализовал эту функцию")


    И наведите порядок с отступами. Если они такие и есть в вашем коде. то всё плохо. Приводите код на pastebin
    Ответ написан
  • У меня не выводит сложение всех чисел, как найти?

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Ну можно SPA замутить и API на фласке.
    Я трогал лифлет давным давно и тогда он мне не очень понравился. Особенно ступенчатостью зумма и видимой подгрузкой. Хотелоь всё сделаь максимально плавно. Сейчас, вроде, появились такие карты в сети, о я с исходниками не знакомился.
    У меня вот так тогда поучилось на уровне прототипа:
    https://sublayers.net
    Там всё сырое и плохо написано. первый мой JS-код, с тех пор и не писал ничего на JS.
    Надо, конечно отрефаторить.
    Суть идеи такая: на базе канваса делается плавный рендер карты и всё это встраиватся в SPA, чтобы в браузере работало без перезагрузок и отчатси в оффлайне. Потом можно в электрон какой-нибудь запечь, или ещё как, чтобы прототип мобильного приложения в рамках MVP быстро сделать можно было.
    На джанго тоже можно сделать SPA, к тому же структура проекта джанго позволяет навешивать на основной проект свои и сторонние приложения, которые смогут нормально друг с другом уживаться. Часто в проекте требуется блоговый движок, авторизации какие-то особенные, дугие интеграции... Все эти батарейки у Джанго в избытке доступны.
    SPA на фласке проще потнятнее, но больше писать самому и нет админки из коробки. Хотя надо поискать, наверняка и для фласка того же есть готовые штуки.

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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    А для чего вы вырезали куски кода в методах? Там вполне может быть ответ на ваш вопрос, а нам как-то гадать надо на кофейной гузе?
    К примеру в NodeConnection.__init__ вызывается наверно конструктор через super и туда вполне может быть передан target, а там может быть что угодно полезное и нужное, что обясняет ситуацию.
    Почему не вставить полностью код для ясности?
    UPD.
    Наследование от треда здесь применяется потому, что каждый NodeConnection породит свой поток, в котором будет вычитываться свой инкапсулированный сокет) в который кажому инстансу NodeConnection передаются какие-то данные.
    Можно было сделать просто отдельный класс и в него инкапсулировать и сокет и тред, но автор выбрал сокет инкапсулировать в тред.

    В обзем NodeConnection - это тред с инкапсулированным сокетом для передачи ему данных из другого потока.
    Ответ написан
  • Какая есть программа для почти подбора паролей для архивов?

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    VDS подойдёт точно, не факт, что это будет самый дешевый вариант, но уж точно самый удобный в плане изоляции. Если сайт не слишком нагруженный, то можно в контейнерах поднять и БД и бэк, и nginx, и что там еще потребуется...
    Ответ написан
    1 комментарий
  • Что случится, когда звуковой сигнал из файла превысит максимальный уровень громкости девайса?

    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 комментария