• Хочу сделать сайт для игры в шахматы, django на бекенд подойдет?

    trapwalker
    @trapwalker
    Ну что вы сразу так...
    Хотя понятно, что ребята, которые начинают с вопроса тут, дальше этого вопроса, скорее всего, не продвинутся, может быть даже никогда. Но надо же верить в людей.
    А вот по существу ваших рекомендация я бы поспорил.

    Джанго - нормальный выбор для описанных требований потому что из коробки кастомизируемая админка с авторизацией. Есть куча примеров, готовых "Plug And Play" аппликух для него, много готовых образцовых проектов на гитхабе.
    Бери, клонируй и доделывай.
    Фласк, согласен, проще, но и даёт он меньше из коробки. При нулевом опыте автора и таком коротком сроке проще склонировать близкий по функциональности пример проекта с гитхаба и добавить туда свой Блек-Джек.

    Даже API делать никакого не надо. Всё уже можно на моделях и джинериках построить.
    У Игры будет свой View с постоянным урлом.
    На странице игры будет виджет с джинерик-вью в виде списка ходов.
    Нужен один лишний метод - проверка на наличие новых ходов. Если они есть, то можно и страничку (в рамках MVP если мыслить) обновить.
    Можно поискать готовые виджеты с шахматной доской, а можно сделать свой на SVG и собирать полностью на бэке по шаблону.
    На клиенте понадобится лишь клик отслеживать, подсвечивать выбранную фигуру стилем или дёргать POST джинерика таблицы ходов для создания нового. Тутже можно и страничку рефрешнуть.

    Всё. Можно показать маме и даже папе и все будут в восторге, а опыт есть опыт. Улучшать можно бесконечно.

    Боюсь я только, что следующие 2.5 месяца у нас тут прибавится вопросв типа "как отследить нажатие мышки на доске" или "как чтобы поверх одной картинки другие в нужных местах были"
  • Как обработать вывод ошибок в скрипте на Python в Debian?

    trapwalker
    @trapwalker Куратор тега Python
    cbv, нет, я имею в виду, что если москито вальнётся с ошибкой и кодом выхода отличным от нуля, то ваш запуск субпроцесса опадёт с исключением, а присвоение в переменную накопившегося за время работы выхлопа не произойдёт.
  • Как объединить строки в sql?

    trapwalker
    @trapwalker
    alexalexes, ну видимо сначала были данные а теперь их хочется дедуплицировать.
  • Какие библиотеки нужно изучить?

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

    trapwalker
    @trapwalker
    Кстати, можно там что угодно писать. Просто нужно и якоря одноимённые ставить. А там похъоду наговнокожено и кто-то что-то "починил" костылём
  • Можно ли сделать чтобы мышка сама пошевелилась?

    trapwalker
    @trapwalker
    Что значит "Средний"?!! Тут поди-попробуй ОС угадай. Это явно сложный уровень!
  • "Висельница"на Python Вопросы в комментариях игры?

    trapwalker
    @trapwalker Куратор тега Python
    Даже форматировать код не научился.
  • Можно ли сохранить файл csv в кодировке Windows-1251 с русскими и армянскими буквами?

    trapwalker
    @trapwalker
    От 1251 даже Винда начала отказываться

    Да ну!!!! не может быть!!!
    Не прошло и пол века!
    Может, глядишь, пра-правнуки застанут тот счастливый день, когда винда откажется от cp866...
    Про отказ от `\r\n` в абзацах я и не мечтаю.
  • Как сделать чтобы игрок реагировал на платформу только прыгая на нее сверху?

    trapwalker
    @trapwalker
    Роман Кашатнов, я не делал ничего на юнити и на C#. ХЗ что и как у вас там происходит.
    Вот тут:
    other.transform.tag = "DelPlatform";
    Зачем-то платформа удаляется. То ли она исчезает просто из игры, то ли это временный объект и он удаляется после обработки столкновения. Зовите спецов по юнити.
    Но что-то мне подсказывает, что можно просто проверять вертикальную компоненту rb.velocity, и если она меньше нуля, то перс летит в одну сторону (вверх или вниз) а больше нуля -- в другую. ХЗ куда там у вас оси направлены.
    Так вот при каком-то из этих двух случаев можно попробовать не делать код прыжка, то есть поместить его под это условие.
    Собственно вот он у вас этот код прыжка и есть:
    rb.velocity = Vector2.zero;
                    rb.AddForce(transform.up * hightjump, ForceMode2D.Impulse);
                    GetComponent<SpriteRenderer>().sprite = stay;
                    GetComponent<AudioSource>().Play();
                    other.transform.tag = "DelPlatform";

    По пробуйте это не делать, если вертикальная компонента rb.velocity будет больше нуля.
  • Можете оценить код?

    trapwalker
    @trapwalker Куратор тега Python
    Andy_U, f'{x=}' мне тоже не нравится, кстати.
  • Можете оценить код?

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

    Вы сами себе противоречите.
    Вот это и есть быстрый отладочный вывод:print("your", object, "is in the", location)
    Причем там нельзя управлять разделительными пробелами, нельзя красиво отформатировать числа, нельзя красиво взять что-то в скобки... Короче устаревший способ что-то отформатировать для консоли.
    канонический вариант сильно укорачивается в отличие от "современного"

    И что? ну где-то он укорачивается, а где-то нам понадобится обрезать лишние цифры вещественного числа или выровнять по правому краю и вы воспользуетесь f-строкой и будет у вас зоопарк в коде.
    И что вы сэкономите отказавшись от гибкости f-строк? Даже длиннее на несколько символов выйдет и менее очевидно в плане того, как это будет выглядеть на печати. Тут и запятые глаз мозолят и добавление пробелов принтом неявно и абзацем управлять надо отдельным параметром...
    Ну и нет совместимости с предыдущими версиями питона. А он еще ой как часто встречаются.

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

    Мало ли на какие мысли вас наводят какие-то изменения. Мне кажется вы слишком много придаёте значения этой рефлексии.
    Пользоваться свежим питончиком куда приятнее, расслабьтесь уже.

    Такая строка обычно идет в print

    У меня "такая строка" обычно идёт в logging.debug и в logging.info и в logging.warninig.
    Это потому, что я много логирую. Но если что-то делается чуть реже чем часто, это не значит, что им можно пренебречь. Вы ещё соберите статистику для чего циклы и генераторы чаще используются и делайте из этого разные выводы.
  • Проверка логина и пароля?

    trapwalker
    @trapwalker Куратор тега Python
    fdroid, хорошо хоть код есть, а не просто в двух словах "понятно" описал ситуацию.
  • Можете оценить код?

    trapwalker
    @trapwalker Куратор тега Python
    Andy_U,
    См. этот ответ. :)

    "your %s is in the %s" % (object, location)
    or
    "your " + object + " is in the " + location

    Лично мне первый вариант более симпатичен и читабелен.
    А вот этот ещё более:
    f"your {object} is in the {location}"
    Представьте, что во втором варианте вы ещё и кавычки хотите приконкатенировать вокруг одного или нескольких элементов. Это ж адище нечитабельности получается.
    Да, большой минус, что повторное использование f-строк невозможно. Мне кажется стоило сделать менее "сахарную" интеграцию в виде какого-то метода у строки, который по умолчанию принимает целиком локальный контекст, но тогда пришлось бы делать такие же возможности для обычных функций, или оставить это грязным исключением. Возможность неявной передачи контекста, в свою очередь, грозит вылиться в проблемы с безопасностью, в утечки памяти, в неявные замыкания... Короче проблем огромной количество.
    Для себя я выбрал следующие правила:
    • если шаблон и подстановка одноразовые - f-строки.
    • если шаблон нужно переиспользовать - .format()
    • если нужно объединить явное небольшое количество строк: f-строка, .format или ''.join по обстоятельствам
    • для большого или неизвестного числа строк ''.join

    Плюсика в этом списке нет, поскольку использование этой перекрытой для строки операции кажется мне менее явным, чем все выше перечисленное.

    Приоритеты:
    1. читабельность и прозрачность
    2. минимизация возможных ошибок
    3. эффективность
  • Можете оценить код?

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

    trapwalker
    @trapwalker Куратор тега Python
    megasaur, там и пояснять-то нечего.
  • Можете оценить код?

    trapwalker
    @trapwalker Куратор тега Python
    Andy_U, ну строки в питоне иммутабельный тип (неизменяемый). Это значит, что нельзя, например, взять и заменить некоторые символы внутри строки. В памяти до сбора мусора останутся и обе части соединённых конкатенацией строк и новая соединённая копия. Представьте, что вы решили накопить конкатенацией длинную строку по одному символу. Например строку в сотню килобайт длиной (какой-нибудь длинный XML).
    В памяти это будет итеративно занимать 1+2+3+4+5+6+..+N = N*(N-1)/2 байт. Это уже квадратичная сложность по памяти и по операциям копирования. В C# у вас, к примеру, выделось бы в куче под строку места с запасом и перевыделялось оно с копированием строки не каждый раз, а гораздо реже.

    В целом нет ничего плохого в конкатенации коротких строк, кроме читабельности и плохой привычки так делать.
    Гораздо читабельнее и эффективнее применить форматную строку, которые прекрасны в питоне. Или собрать куски строк в список, а потом единой операцией собрать их методом join, который тоже работает крайне эффективно: ', '.join(list_of_strings). Сджойнить кучу строк в списке через пустую строку гораздо эффективнее, чем наращивать её конкатенацией.

    Если вы про соединение путей конкатенацией спрашиваете, то это тоже плохая идея, поскольку файловые системы бывают разные, с разными сепараторами пути, есть разные операционные системы более или менее толерантные к разным разделителям. А ещё можно напутать с абсолютными и относительными путями, с хвостовым слешем у каталога, с пустой левой частью конкатенации (''+'\'+'my_filename.ext'). 'Пустая строка, наверно, подразумевает текущий каталог, а уж никак не корневой. При такой конкатенации через слеш путь станет от корня.
    Думаю во всех серьёзных языках есть стандартная библиотека с методами работы с путями. В питоне есть os.path (малость старенькая уже) и чудесная современная объектная библиотека pathlib. Вот она кроссплатформенная, содержит вкусный синтаксический сахар и приятные методы работа с файлами, каталогами и прочим. Всё в одном одобном флаконе.
  • Как проверить наличие строки в файле в bash скрипте?

    trapwalker
    @trapwalker
    DYLAN, так в чем проблема зареплейсить в нём все решетки, точки и скобки автоматом?
    echo "## [1.0.3]" | grep "$(echo "## [1.0.3]" | sed 's/[#.\[\]/\\\0/g')"
  • Как проверить наличие строки в файле в bash скрипте?

    trapwalker
    @trapwalker
    ну да, или так. Да как угодно. Какие-то символы мешают - экранируем.